*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

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS