複数の添付ファイルを含む.eml
形式の電子メールファイルを作成したい。添付ファイルが生成され、添付ファイルの内容が正しい。しかし、常に.dat
形式で来る添付ファイルやファイル名は「ATT00001」、「ATT0002」と行く...など電子メールで添付ファイル名とファイル拡張子が使用できない* .eml
は現在、私はthis stackoverflow questionで与えられた解決策を以下だと
PHPは、次のように私のコードです
foreach($reports as $pdf){
$attachment = file_get_contents("auto_report_attachments\\Template_Attachment.eml");
$attachment = str_replace("TEMPLATE_MIME_TYPE", $pdf['type'], $attachment);
$attachment = str_replace("TEMPLATE_FILE_NAME", $pdf['filename'], $attachment);
$attachment = str_replace("TEMPLATE_ATTACHMENT_CONTENT", base64_encode($pdf['file']), $attachment);
$content .= $attachment;
unset($attachment);
}
テンプレートの添付ファイル
--080107000800000609090108
Content-Type: "TEMPLATE_MIME_TYPE"
name="TEMPLATE_FILE_NAME"
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
filename="TEMPLATE_FILE_NAME"
TEMPLATE_ATTACHMENT_CONTENT
$content
は、上記のリンクで説明されているメインのメールヘッダーと本文です。私の.eml
ファイルは次のようになります。
MIME-Version: 1.0
Date: Tue, 16 Apr 2013 09:03:37 +0100
From: [email protected]
To: [email protected]
Subject: Email subject
Content-Type: multipart/mixed; boundary="080107000800000609090108"
This is a message with multiple parts in MIME format.
--080107000800000609090108
Content-Type: text/html
<p><strong>Project Name: Some Project and the body continues...</p>
--080107000800000609090108
Content-Type: "application/pdf"
name="AM22831 - - Cover Sheet.pdf"
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
filename="AM22831 - - Cover Sheet.pdf"
JVBERi0xLjMKMyAwIG9iago8PC9UeXBlIC9QYWdlCi9QYXJlbnQgMSAwIFIKL1Jlc291cmNlcyAyIDAgUgovQ29udGVudHMgNCAwICiUlRU9GCg==
--080107000800000609090108
Content-Type: "application/pdf"
name="AM22831 - - Manufacturing Status.pdf"
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
filename="AM22831 - - Manufacturing Status.pdf"
cSAxMTMuMzkgMCAwIDMwLjUzIDE0LjE3IDU1MC41OCBjbSAvSTEgRG8gUQpxIDAuMDAwIDAuMDAwIDEuMDAwIHJnIEJUIDEzMC4zOSRU9GCg==
--080107000800000609090108
ファイルがPDF Reader
で開くように選択することで、開かれた時には、上記base64
コンテンツがPDF
ファイルに適切なコンテンツを提供します。しかし、ファイルは.pdf
形式ではありません。 .xls
,.doc
などすべてのファイルタイプで同じです。すべてのファイルは、指定された名前ではなく標準の名前で.dat
形式になります。
この添付ファイルを解決するには、指定されたファイル名のfile type
が必要です。
NB:サンプル.eml
ファイルにbase64
内容は切り捨てられ