PHPで自動返信メールを実装する(qmail&virturlhost使用時) その2
単純に言うと、以下のコードはメール自動返信しているだけ(実際には返信条件や添付ファイルを色々と設定する)
1, Qmailで受け取ったメールの内容をPHPで受け取る
2, PHPからFromメールアドレスへメール送信する。複数の添付ファイル対応(日本語ファイル名も対応済)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 |
<?php require_once("Mail/mimeDecode.php"); // メールの生データを、変数(to,from,subject,body)に格納してくれるクラス class receiveMail{ public function __construct() { } public function get($input) { $receiveParams; $params['include_bodies'] = true; $params['decode_bodies'] = true; $params['decode_headers'] = true; $params['crlf'] = "\r\n"; $params['input'] = $input; $mail_data = Mail_mimeDecode::decode($params); //メール生データを変数に格納 $this->receiveParams['from'] = $mail_data->headers['from']; $this->receiveParams['to'] = $mail_data->headers['to']; $this->receiveParams['subject'] = $mail_data->headers['subject']; // Gmailなどではマルチパート送信(HTMLメールや添付ファイル付)されるので、MIMEで判断する $mime = $mail_data->ctype_primary; if($mime==="text"){ $this->receiveParams['body'] = mb_convert_encoding($mail_data->body,"UTF-8","JIS"); }else if($mime==="multipart"){ foreach($mail_data->parts as $part){ if("multipart" == strtolower(trim($structure->ctype_primary))){ $body = getMultiPartBody($part); } elseif ("text" == $part->ctype_primary){ $body = $part->body; break; } } $this->receiveParams['body'] = $body; } return $this->receiveParams; } } // 添付ファイル(日本語名ファイル&複数)付きでメール送信する関数 function SendAttachedMail( $from , $to , $subject , $body , &$file ){ // 文字コードを日本語UNICODEに設定 ini_set("mbstring.internal_encoding","UTF-8"); mb_language('uni'); mb_internal_encoding('UTF-8'); header('Content_Language: ja'); $boundary = "__Boundary__" . uniqid( rand() , true ) . "__"; $mime = "application/octet-stream"; $header = ""; $header .= "From: $from\n"; $header .= "MIME-Version: 1.0\n"; $header .= "Content-Type: Multipart/Mixed; boundary=\"$boundary\"\n"; $header .= "Content-Transfer-Encoding: 7bit"; $mbody = "--$boundary\n"; $mbody .= "Content-Type: text/plain; charset=UTF-8\n"; $mbody .= "Content-Transfer-Encoding: 7bit\n"; $mbody .= "\n"; // 元メール本文の各行の先頭に>を付与して、返信文にする $pattern = '/^/im'; $replacement = '> '; $body = "これは自動返信メールです。\nここに返信用文言が入ります。\n\n" . preg_replace($pattern, $replacement, $body); $mbody .= mb_convert_encoding( $body , 'UTF-8' , 'auto' ); $mbody .= "\n"; // 添付ファイルの数だけループ for( $i = 0 ; $i < count( $file ) ; $i++ ){ $filename = mb_encode_mimeheader( mb_substr(mb_strrchr($file[ $i ], "/"), 1), 'UTF-8' ); $mbody .= "--$boundary\n"; $mbody .= "Content-Type: $mime; name=\"$filename\"\n"; $mbody .= "Content-Transfer-Encoding: base64\n"; $mbody .= "Content-Disposition: attachment; filename=\"$filename\"\n"; $mbody .= "\n"; $mbody .= chunk_split( base64_encode(file_get_contents( mb_convert_encoding($file[ $i ], "SJIS", "UTF-8") ) ) , 76 ,"\n" ); $mbody .= "\n"; } $mbody .= "--$boundary--\n"; return mail( $to , mb_encode_mimeheader( mb_convert_encoding( $subject , "UTF-8" , 'auto' )) , $mbody , $header ); } // ここからがメイン関数 $receiveMail = new receiveMail(); $input = file_get_contents("php://stdin"); // メールの生データは標準入力 $mail = $receiveMail->get($input); // 分解して、配列に格納する。 // 添付ファイルで送る $file[0] = "/tmp/添付その1.txt"; $file[1] = "/tmp/添付その2.txt"; $file[2] = "/tmp/グーグル.png"; SendAttachedMail( $mail['to'] , // 送信元 $mail['from'], // 送信先メールアドレス 'Re: ' . $mail['subject'] , // タイトル $mail['body'], //本文 $file //添付ファイルパス(配列で複数指定) ); |