いますぐ実践! Linuxシステム管理

[バックナンバーのトップへ] [Linux システム管理のトップへ]


いますぐ実践! Linux システム管理 / Vol.008 / 読者数:255名

こんばんは,うすだです.

毎年,何らかの目標を立てるようにしています.
去年は,体脂肪率を 20% 未満にするという目標を決めて,達成することができました.(他にもいくつか立てましたが,ここでは割愛します.)
今年もがんばろう,と思っていましたが,ここ1カ月くらいで急激に太ってきてしまいました. 今年は,体脂肪率と体重のキープという,守りの目標を立ててしまったのが,よくなかったようです.

目標を立てるなら,攻めの目標にしないと,あまり意味がないようです.
ですので,もっと攻めの目標を,来週までに決めようと思います.

それでは,今日も,はりきってまいりましょう!

今週のお題 - 携帯にメールを転送する リターンズ

先週は,自分宛に来るメールのうち,Subject: の先頭に KEITAI という文字があったら,そのメールを携帯に転送する方法を,ご紹介しました.
http://www.usupi.org/sysad/007.html

今週は,ちょっとひねって,以下をやってみようと思います.

1. 本文が10行以内だったら,転送する.
2. エラーが送信元に通知されないよう,転送時に From: を書き換える.

他にもネタはあるにはあるのですが,行数などいろんな都合というものがありますので,上記の2つに限定させていただきます.
# 場合によっては,後日,WWWサイトでご紹介します.

1. 本文が10行以内だったら,転送する.

いくら題名に KEITAI と入っていても,メガバイト単位のメールを転送されたら, たまったものではありません.
できれば,ほどほどの長さのものだけに,限定したいですよね.
どの程度だと許されるのかは,時と場合とお金と忍耐によりけりだと思いますが, ここでは,10行以内という条件のものを,作ってみます.

全部書くと長いですので,スクリプトのうち大事なところだけを,以下に示します.

  #!/usr/bin/perl
  my $FORWARD_MAX_LINES = 10;
  ...中略...

  my $forward = 0;
  my $message = "";
  my $line = 0;

  # parse header (ヘッダの取得と解釈)
  while (<>) {
        chop;
        last if /^\s*$/;
        $forward = 1 if /^Subject:\s*KEITAI/;
        $message .= "$_\n";
  }

  # get content (本文の取得)
  while (<>) {
        $message .= $_;
        $line++;
  }
  exit 0 unless $forward && $line <= $FORWARD_MAX_LINES;

  &send_mail($SENDMAIL_CMD, $message);
  0;

本文の取得の while ループで,行数($line)をカウントします.
その直後で,行数が $FORWARD_MAX_LINES 以内かどうかのチェックをしています. …はい,ただそれだけです.

スクリプト全体は,こちらをご覧ください.
http://www.usupi.org/sysad/008-1_pl.txt

2. エラーが送信元に通知されないよう,転送時に From: を書き換える.

通常時は問題ないと思いますが,たまたま携帯にメールを転送できなかったとき, エラーメールが送信元に配送されてしまいます.
システム管理者の鏡! になるためには,少なくとも,人様に迷惑をかけてはいけませんよね.
# 携帯のアドレスを知られてしまう,というデメリットもあります.

これを避けるため,From: のアドレスを書き換えて転送してみましょう.
スクリプトの大事なところを,以下に示します.

  #!/usr/bin/perl
  my $MAIL_FROM = "kuri\@usupi.org";
  ...中略...

  # parse header (ヘッダの取得と解釈)
  while (<>) {
        chop;
        last if /^\s*$/;
        $forward = 1 if /^Subject:\s*KEITAI/;
        if(/^From:/) {
                $_ = "From: $MAIL_FROM\nX-Original-$_";
        }
        $message .= "$_\n";
  }

  # get content (本文の取得)
  while (<>) {
        $message .= $_;
        $line++;
  }
  exit 0 unless $forward && $line <= $FORWARD_MAX_LINES;

  &send_mail($SENDMAIL_CMD, $message);
  0;

基本的には同じですが,ヘッダの取得と解釈の while ループで,From: のアドレスを $MAIL_FROM の値に書き換え,もとの値を, X-Original-From: という適当なヘッダに置き換えて残しています.

スクリプト全体は,こちらをご覧ください.
http://www.usupi.org/sysad/008-2_pl.txt

以上,先週よりはちょっとましになったかな,と思われるスクリプトを, ご紹介しました.
# スクリプトばっかりで手を抜いているように見えますが,そんなことはございませんよ.(-ε-;;

でも,これで,緊急を要するメールを,携帯などに転送できるようになったのではないかと思います.
携帯に転送してみようかな,と一瞬でも思われたら,ぜひお試しください.

宿題の答え

先週の問題は,

  X-Keitai-Forward: というヘッダのあるメールを,携帯に転送する
  スクリプトを作ってください.

でした.
答えは,先週のスクリプトの

  $forward = 1 if /^Subject:\s*KEITAI/;

を,以下に変更するだけです.

  $forward = 1 if /^X-Keitai-Forward:/

スクリプトを全部ご覧になりたい方は,以下をどうぞ.
http://www.usupi.org/sysad/008-3_pl.txt

今週の宿題

今週の宿題は,こちらです.

  指定したメールアドレスからのメールを,携帯などに転送するための
  スクリプトを作ってください.

特定のヒトからのメールを携帯に転送したい,というニーズは,結構あるのではないかと思います.(私は,よめからのメールを,転送してます.)
# ひねりとしては,不十分かもしれませんが…

あとがき

冒頭の続きですが,目標を立てる,ということを始めたのは,知る人ぞ知る, 神田昌典氏の「非常識な成功法則」という本を読んでからです.
http://www.amazon.co.jp/exec/obidos/ASIN/4894511304/usupiorg-22

このメルマガを発行しようと思ったのも,上記がきっかけです.
いちおう,どのくらいの読者数を獲得するとか,どんなふうにしていくとか, 目標を決めています.
ええ,わたしはただの三流プログラマーですので,目標を達成できる根拠なんてありません.実現する目処も,今は,これっぽっちもありません.
でも,根拠がなくても,信じてみること,実際にやってみることが, 大事なのではないかと,上記を読んでから,思えるようになりました.

気が向いたら,一度読んでみてください.損はしないと思います.
そして,要領の悪い無愛想なプログラマーが,どこまでやっていけるのか, 見届けていただければ幸いです.

今週も,ここまで読んでいただき,ありがとうございました.
しつこいようですが,ご感想やネタは,随時受け付けております.
どしどし,ご連絡ください!
それでは,また来週,お会いしましょう!

「いますぐ実践! Linux システム管理」の登録・解除は,以下からどうぞ.
http://www.usupi.org/sysad/ (まぐまぐ ID:149633)

バックナンバーはこちら.
http://www.usupi.org/sysad/backno.html

「栗日記」も,好評発信中!
http://www.usupi.org/kuri/ (まぐまぐ ID:126454)


[バックナンバーのトップへ] [Linux システム管理のトップへ]

トップ

バックナンバー
    [日付順] [目的別]

プロフィール

▼ リンク

独学Linux
Linuxデスクトップ環境に関する情報が満載です。 メルマガもありますよ。
Server World
CentOS 6をサーバとしたときの設定例が、これでもかというくらいたくさん載っています。 CentOS以外のディストリビューション(Fedora, Ubuntu)も充実しています。
LINUXで自宅サーバーを構築・導入(Fedora9)
Fedora9のインストールの仕方から管理方法まで、詳しく載っています。 SearchManには情報がもりだくさんです。
マロンくん.NET
〜サーバ管理者への道〜
Linuxをサーバとして使用するための、いろいろな設定方法が載っています。 マロンくんもかわいいです。 なんといっても、マロンくんという名前がいいですね!!
日経Linux
今や数少なくなってしまったLinuxの雑誌。ニュースやガイドもあります。
Linux Square − @IT
@ITが提供する、Linux の情報が満載。 載っていない設定方法はないんじゃないでしょうか。
gihyo.jp…技術評論社
Linuxに限らず様々な技術情報が満載のサイト。 SoftwareDesign誌も、 ソフトウェア技術者は必見です。
SourceForge.JP Magazine
Linux に限らず、オープンソース関連の記事が網羅されています。
ITmediaエンタープライズ:Linux Tips 一覧
Tips というより FAQ 集でしょうか。わからないことがあれば覗きましょう。
IBM developerWorks : Linux
開発者向けですが、勉強になりますよ。
Yahoo!ニュース - Linux
Yahoo!のLinuxに関するニュース一覧です。
栗日記
システム管理とかと全然関係ありませんが、毎日栗の絵を描いています。
システム管理につかれちゃったとき、癒されたいときに、ご覧ください。:-)
WEB RANKING - PC関連
ランキングに参加してみました。押してやってください。

▼ 作ってみました

Add to Google

▼ せんでん




▼ 最近読んだ本

▼ 気に入ってる本