PHPの関数「mail()」で添付ファイル付きのメールを送信する方法です。
今回、日本語対応を前提に、ラッパー関数である「mb_send_mail」を使います。
添付なしメールを送る場合
通常、添付なしでメッセージのみのメールを送る場合は、以下のように記述します。
$to = "【送信先メールアドレス】"; $subject = "【メールタイトル】"; $message = "【メール本文】"; $additional_headers = "【オプションでメールヘッダに文字列追加】"; mb_send_mail($to, $subject, $message, $additional_headers);
$additional_headersには、送信元メールアドレスなどをセットします。
$header = "From:【送信元メールアドレス】\n";
これにプログラム上で任意のファイルを添付するためには、$message部分と$additional_headers部分に以下のようなフォーマットで追記します。
添付ありメールを送る場合
添付ありでメッセージを送る場合は、ヘッダ情報$additional_headersに以下を追加します。
boundaryには任意で区切り文字列を指定します。ここでは、例えば「__BOUNDARY__」をセットします。
Content-Type: multipart/mixed;boundary="__BOUNDARY__" From: 【送信元メールアドレス】
$message部分には、boundaryを区切りにメッセージと添付ファイル情報を記述します。
--__BOUNDARY__ Content-Type: text/plain; charset="ISO-2022-JP" 【メール本文】 --__BOUNDARY__ Content-Type: 【ファイルタイプ】; name="【ファイル名】" Content-Disposition: attachment; filename="【ファイル名】" Content-Transfer-Encoding: base64 【ファイルをMIME base64方式でエンコードした文字列】 --__BOUNDARY__--
以下のようにファイル部分を繰り返すことで、複数ファイルを添付できます。
--__BOUNDARY__ Content-Type: text/plain; charset="ISO-2022-JP" 【メール本文】 --__BOUNDARY__ Content-Type: 【ファイル1タイプ】; name="【ファイル1名】" Content-Disposition: attachment; filename="【ファイル1名】" Content-Transfer-Encoding: base64 【ファイル1をMIME base64方式でエンコードした文字列】 --__BOUNDARY__ Content-Type: 【ファイル2タイプ】; name="【ファイル2名】" Content-Disposition: attachment; filename="【ファイル2名】" Content-Transfer-Encoding: base64 【ファイル2をMIME base64方式でエンコードした文字列】 --__BOUNDARY__ Content-Type: 【ファイル3タイプ】; name="【ファイル3名】" Content-Disposition: attachment; filename="【ファイル3名】" Content-Transfer-Encoding: base64 【ファイル3をMIME base64方式でエンコードした文字列】 --__BOUNDARY__--
添付ファイルありメールのPHPコード
実際に、ファイルを添付してメールを送信するPHPコードをまとめると、以下のようになります。
$filepath = "【添付するファイルのパス】"; $boundary = "__BOUNDARY__"; $additional_headers = "Content-Type: multipart/mixed;boundary=\"" . $boundary . "\"\n"; $additional_headers .= "From: 【送信元メールアドレス】"; $message = "--" . $boundary . "\n"; $message .= "Content-Type: text/plain; charset=\"ISO-2022-JP\"\n\n"; $message .= "【メール本文】\n"; $message .= "--" . $boundary . "\n"; $message .= "Content-Type: " . mime_content_type($filetype) . "; name=\"" . basename($filepath) . "\"\n"; $message .= "Content-Disposition: attachment; filename=\"" . basename($filepath) . "\"\n"; $message .= "Content-Transfer-Encoding: base64\n"; $message .= "\n"; $message .= chunk_split(base64_encode(file_get_contents($filepath)))."\n"; $message .= "--" . $boundary . "--"; mb_send_mail($to, $subject, $message, $additional_headers);
コメントする