*PHPでMail処理 [#jf69e08b] RIGHT:更新日&lastmod(); mailを受信したときそのあて先でコマンドを実行しメール処理をすることができるこれをphpのシェルで実行する。 ***aliases [#yf23f1e1] /etc/postfix/aliasesに以下のように指定 phptest: "|/var/lib/pgsql/comingout/php/test.php 以下のコマンドも実行 # newaliases ***phpの記述 [#r7201680] ''メール受信処理''~ メールの内容ははパイプで送られてくるのでそれをphpで読み込む ''test.php'' #! /usr/bin/php <?php while(!feof(STDIN)) { // $lndata = fread(STDIN, 4096); $lndata = fgets(STDIN, 4096); mb_internal_encoding("JIS"); $lndata = mb_convert_kana($lndata,'rn'); // $lndata = ereg_replace(".", ".", $lndata); // echo $lndata; // 送り元の取り出し //addressが okada@abc-u.ac.jp の場合 if ( ereg("^From: (.*)@.*", $lndata, $reqs)){ $name = $reqs[1]; } //addressが 岡田 <okada@abc.ac.jp>の場合 if ( ereg("^From: .*<(.*)@.*>", $lndata, $reqs)){ $name = $reqs[1]; } // 日付の取り出し if ( ereg("^Date: (.* \+.*)\n$", $lndata, $reqs)){ $date = $reqs[1]; } // Toの取り出し if ( ereg("^To: (.*)@.*$", $lndata, $reqs)){ $class = $reqs[1]; } ?> ''メール送信処理''~ function send_mail($name,$msg,$subject){ //EUCからISO-2022-JPに変換 $subject = mb_convert_encoding($subject, "ISO-2022-JP", "EUC-JP"); //ISO-2022-JPをMIMEでbase64=>"B"に変換 $subject = mb_encode_mimeheader($subject, "ISO-2022-JP", "B"); $fp = popen("/usr/bin/nkf -m0 | /usr/sbin/sendmail -oi -t", "w"); fwrite($fp, "From: comingout@abc.ac.jp\n"); fwrite($fp, "Reply-To: okada@abc.ac.jp\n"); fwrite($fp, "To: $name@abc.ac.jp\n"); fwrite($fp, "Subject: " . $subject ."\n"); fwrite($fp, "Mime-Version: 1.0\n"); fwrite($fp, "Content-Type: text/plain; charset=ISO-2022-JP\n\n"); fwrite($fp, $msg . "\n"); pclose($fp); } ''PHP関数でメール送信'' こちらのほうがいいかも SubjectのMIME化は関数がしてくれるので本文の元の文字コートを指定すればJISに変換してくれる。例はUTF-8をJISに変換してくれる function send_mail2($re_email,$msg,$subject){ mb_language("japanese"); mb_internal_encoding("UTF-8"); // $subject = mb_convert_encoding($subject, "ISO-2022-JP", "utf8"); // $subject = mb_encode_mimeheader($subject, "ISO-2022-JP", "B"); $header = "From: okada@ism21.net\n"; $header = $header ."Reply-To: okada@ism21.net\n"; $to = $re_email; mb_send_mail($to,$subject,$msg,$header ); } $subject = "○○を通過"; $jikoku = date("H:i"); $msg = "件名の場所を" . $jikoku . "に通過しました"; $re_email ="okada@abc-u.ac.jp"; send_mail2($re_email,$msg,$subject); ***デバッグ(動作確認) [#b6aa52d6] パイプ入力されるのでメールソースをファイルに入れて ''maildata''~ From okada@abc.ac.jp Mon Oct 20 11:36:03 2008 Return-Path: <okada@abc.ac.jp> X-Original-To: phptest@[10.99.99.173] Delivered-To: phptest@[10.99.99.173] Received: from mail.abc.ac.jp (mail.abc.ac.jp [192.244.75.5]) by db-bakup.abc.ac.jp (Postfix) with ESMTP id 689A82C6A2 for <phptest@[10.99.99.173]>; Mon, 20 Oct 2008 11:36:03 +0900 (JST) Received: from www.abc.ac.jp (www.abc.ac.jp [192.244.75.2]) by mail.abc.ac.jp (Postfix) with SMTP id 560C41CAC6B1 for <phptest@[10.99.99.173]>; Mon, 20 Oct 2008 11:36:16 +0900 (JST) Date: Mon, 20 Oct 2008 11:36:02 +0900(JST) Message-ID: <20081020113602.2a5e.okada@abc-u.ac.jp> From: 岡田 <okada@abc.ac.jp> To: ouyou_x@[10.99.99.173] Subject: TEST MIME-Version: 1.0 Content-Type: text/plain; charset=iso-2022-jp Content-Transfer-Encoding: 7bit X-Mailer: WebMailer Ver0.954 on Apache/2.0.55 (Unix) with Mozilla/4.0 (compatible; MSIE 7. 0; Windows NT 6.0; WOW64; SLCC1; .NET CLR 2.0.50727; .NET CLR 3.0.04506; InfoPath.2) 33 岡田 確認実行 $cat maildata | ./test.php