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 && /^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 =~ /至急.*/){ $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; &jcode::convert(\$mailbuff, "jis"); print MAIL $mailbuff; close(MAIL); } }
※文字コード:EUC-JP、改行コード:LFで保存のこと。
idとパスワードでログイン管理するのもどうか、と思っているので
メールアドレスをエンコードした文字列を付加したurlを
メールに記載して返信することで認証の替わりにしたいところ。
(セキュリティ的には不十分なのでしょうけれど、猫も杓子も
パスワード、パスワード・・・、じゃ、ユーザが困っちゃうよなぁ。)
以下のサイトが大いに参考になりました。
perlスクリプトは8割がた、以下サイトのものを流用しています。感謝。