PHPのPear::Mailでシステムからメールを送信し、送信したメールを送信済みフォルダに入れたい事案があった。
解決方法がググっても出てこなかったので、自己解決。
基本的には送信したデータをIMAP関数で送信済みのフォルダに設置するだけ。
以下ソース。
include_once("Mail.php"); include_once("Mail/mime.php"); mb_language("uni"); mb_internal_encoding("UTF-8"); // 宛先とヘッダーとボディを作る。省略。以下mimeの例 $mime = new Mail_mime(); $mime->setHTMLBody('something<br />anything'); $body = $mime->get(array( 'text_encoding' => '7bit', 'text_charset' => 'UTF-8', 'html_charset' => 'UTF-8', 'head_charset' => 'UTF-8')); $headers = $mime->headers(array(/*省略*/)); $recipients = array(/*省略*/); // メール送信 $mailObject = Mail::factory("smtp", Array(/*省略*/)); $send = $mailObject->send($recipients, $headers, $body); if (PEAR::isError($send)){ return 'Mail send error! ' . $send->getMessage(); } //////////////////////////////////////////////////////////////// // IMAPフォルダに設定。 // 送信済みフォルダに設置するデータ作成 $message = ''; foreach($headers as $key => $value){ $message .= $key . ': ' . $value . "\r\n"; } $message .= "\r\n" . $body; // 設置フォルダー $folderName = '送信済み'; // 自分のIMAPの送信済みフォルダ $encodeFolder = mb_convert_encoding($folderName, 'UTF7-IMAP', 'UTF-8'); // エンコード // imap_openの説明を読んで。SSLならポート以降を:993/imap/ssl $path = "{imap.hogehoge.com:143/imap/notls}INBOX." . $encodeFolder; $imapStream = imap_open($path,'username@hogehoge.com','password'); if ($imapStream === FALSE){ die(); } $result = imap_append($imapStream, $path, $message, "\\Seen"); if ($result === FALSE){ die(); } imap_close($imapStream); /* end */
以上