レンタルサーバで自動返信メールシステムを構築する

webシステムを利用いただく方にメールを送信いただき、
そのメールに自動返信する仕組みを構築します。

愛用しているxrea.comやcoreserver.jpはどうやら出来ないらしいので、
他のメジャーなレンタルサーバについて調べて見ました。

すると唯一、さくらインターネットでそれを実現できることが
分かったので早速アカウントを作成し、二週間のお試し期間で
実験することにしました。

本契約の時にテンパるといけないので、備忘録的ポスト。

その1.
.mailfilterを編集する。
パーミッションは600厳守!

cc "| /home/(さくらアカウント名)/www/(受信メールアドレス)/info_mail.pl (送信先メールアドレス)"

行頭を「cc」とすると受信メールを保存しますが、
「to」にするとスクリプト実行時にメールが破棄されます。注意。

その2.
メール受信時に起動するperlスクリプト。
ここでは「info_mail.pl」。perlとか久しぶり過ぎだぁ。
まぁ、眺めてるとお作法(syntax)はなんとなくわかるはず。

#!/usr/bin/perl

require "jcode.pl";
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;

$send_from = '(自動返信用メールアドレス)@(さくらアカウント名).sakura.ne.jp(または取得、設定したドメイン名';
$send_subject = '(メールタイトル)';
$send_body  = '(メール本文)\n';
$send_body .= "(メール本文)";

#ヘッダ部から情報抽出
while (<stdin>) {</stdin>

#ヘッダ情報抽出終了後、パイプを空送りして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 &amp;&amp; /^Subject: (.+)/){
$subject = $1;
$flg_subject = 1;
}

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

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

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

#通知メール対象チェック (今回はコメントアウト)
#if($subject =~ /至急.*/){
$flg_go = 1;
#}

#通知メール送信
#入力パラメータは使用しないのでコメントアウト
#       $mailbuff .= "To: $ARGV[0]\n";
if($flg_go == 1){
open(MAIL, "| $sendmail -t") or $err = 1;
if ($err == 0) {
$mailbuff = '';
$mailbuff .= 'To: '."$mail_from\n";
$mailbuff .= 'From: '."$send_from\n";
$mailbuff .= 'Subject: '."$send_subject\n";
$mailbuff .= $send_body;
&amp;jcode::convert(\$mailbuff, "jis");
print MAIL $mailbuff;
close(MAIL);
}
}

※文字コード:EUC-JP、改行コード:LFで保存のこと。

idとパスワードでログイン管理するのもどうか、と思っているので
メールアドレスをエンコードした文字列を付加したurlを
メールに記載して返信することで認証の替わりにしたいところ。
(セキュリティ的には不十分なのでしょうけれど、猫も杓子も
パスワード、パスワード・・・、じゃ、ユーザが困っちゃうよなぁ。)

以下のサイトが大いに参考になりました。
perlスクリプトは8割がた、以下サイトのものを流用しています。感謝。

さくらのレンタルサーバ非公式FAQ – .mailfilterについて

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です