冨山陽平のブログ “思いきり やりぬく”

ITの適正活用,ウェブサイト,クラウド/XaaS,セキュリティ,モバイルワーク,ITの適正活用、組織風土改革、従業員満足度調査、これあらた、久留真家、冨山陽平

冨山陽平のブログ 思いきりやりぬく
  • 14
    Mar
    2012
    2012/03/14 (水)
  • Xserver、Sixcoreでメール着信通知を設定する方法

中小規模の企業や士業さんは、経営者や営業部門を中心に、できるだけメールを早くチェックして、お客さまへの対応を高めるべく、携帯電話のメールアドレスに転送している方も多いのではないでしょうか?セキュリティの観点上、本来は、転送したくないけれども、メールの着信がすぐにわかるほうほうだからやむを得ずやっているという方もおられるように思います。もちろん、自前のサーバを保有していて、自由にアプリケーションを導入したり、プログラムを組み込んだりできるのであれば、このようなトラブルは発生しません。しかしながら、多くの小規模ビジネスでは、共用サーバなど自由度の低いサーバ(そのかわり安価でメンテナンスが楽)を利用していたり、コストがかけられなかったりという状況にあるので、このような手段をとっているのでしょう。携帯からウェブメールを見る方法ではNGなのか?という方もおられますが、通知がくるわけではないので、かなり意識をしてこまめにチェックしている必要があります。

本来は、携帯電話に「メールが届いた」という通知だけがくれば、携帯電話経由のウェブメールなり、パソコンを開くなりして、メールチェックができるわけです。今回は、共用サーバを利用している方に焦点を絞って具体例を解説いたします。エックスサーバーシックスコアは、共用サーバとして、ビジネス利用サイドできっちりと考えられている上に安価な大変優秀なサービスだと考えています。これら2つの違いは、Sixcoreのほうが、よりセキュアでより良心的な利用に限定しているという点が挙げられます。ただし、こちらのサーバには、着信通知機能は備わっていないので、下記の手順で整える必要があります。

仮にあなたのドメインをxxx.jpとします。この場合、/xxx.jp/scriptの領域に、当記事の一番最後にあるmail_alert.plを配置します。パーミッションは700とします。/xxx.jp/mail/xxx.jp/という下にメールアドレスごとのディレクトリがあります。このディレクトリの中に、.mailfilterというファイルがあるので、このファイルの文末に、

cc "| ../../../script/mail_alert.pl <通知先メールアドレス>"

と書き足してください。

なお、mail_alert.pl内のmailbuffという変数が、通知文になります。このまま利用すると下記のような文章が届きます。

例)a@a.jpからb@xxx.jpにメールが届き、通知先はc@c.jpの場合

c@c.jpに届くメールは、「差出人:b@xxx.jp、宛名: c@c.jp、件名:新着メール、本文:a@a.jpからメールが到着しました。」となります。

当社は、エックスサーバーシックスコアの利用は熟知しております。上記の設定がご自身では難しい方、共用サーバをお探しの方、ウェブサイトを制作したい方などぜひお問い合わせください。


# mail_alert.pl
#!/usr/bin/perl

use Jcode;
use MIME::Words qw(:all);

$sendmail = '/usr/sbin/sendmail';

#=====================================================
# DECODEする関数
#=====================================================
sub DecodeFld($) {
    my($sBuff) = @_;
    my($sRes, $sWk);
    chomp($sBuff);
    foreach $sWk (decode_mimewords( $sBuff, )){
        ($sTxt, $sCode) = @$sWk;
        $sRes .= $sTxt;
    }
    return $sRes;
}

#=====================================================
# 本体開始
#=====================================================
$subject = '';
$mail_to = '';
$mail_from = '';
$flg_subject = 0;
$flg_read_end = 0;
$flg_go = 0;

#ヘッダ部から情報抽出
while () {

    #ヘッダ情報抽出終了後、パイプを空送りしてSTDINを終了させる
    if($flg_read_end){
        next;
    }

    #ヘッダ部の終了チェック
    if(length == 1){
        $flg_read_end = 1;
        next;
    }

    #Subjectの取得
    if($flg_subject == 1){
        if(/^[ \t](.+)/){
            $subject .= $1;
        }
        else{
            $flg_subject = 2;
        }
    }
    elsif($flg_subject == 0 && /^Subject: (.+)/){
        $subject = $1;
        $flg_subject = 1;
    }

    #FromやTo、その他フラグの取得
    if(/^From: .*.*/){
        $mail_from = $1;
    }
    elsif(/^From: (.+)/){
        $mail_from = $1;
    }
    elsif(/^To: .*.*/){
        $mail_to = $1;
    }
    elsif(/^To: (.+)/){
        $mail_to = $1;
    }
}

#Subjectのデコード
$subject = &DecodeFld("$subject");  #Subject欄デコード(JISコードのまま)

#文字コード変換(JIS→EUC)
&Jcode::convert(\$subject, "euc");

#通知メール対象チェック
if($subject =~ /^\[SPAM\]/){
    $flg_go = 1;
}

#通知メール送信
if($flg_go == 0){
    open(MAIL, "| $sendmail -t") or $err = 1;
    if ($err == 0) {
        $mailbuff = '';
        $mailbuff .= "To: $ARGV[0]\n";
        $mailbuff .= "From: $mail_to\n";
        $mailbuff .= 'Subject: 新着メール'."\n";
        $mailbuff .= "\n";
        $mailbuff .= "$mail_from".' から';
        $mailbuff .= 'メールが到着しました。'."\n";
        $mailbuff .= "\n\n.\n";
        &Jcode::convert(\$mailbuff, "jis");
        print MAIL $mailbuff;
        close(MAIL);
    }
}

参考記事:さくらのレンタルサーバ非公式FAQ

  • 2012/03/14 (水)

コメント(1件あります)

  1. 竹田良雄 より:

    メールページが開かないのでメールを見たり配信が出来ない

コメントを残す