最終更新日:
公開日:
レシピ
メール送信
メールに複数のファイルを添付して送信する
メールに2つ以上のファイルを添付して送信する方法をmb_send_mail関数を使って解説します。
この記事のポイント
- ファイルを添付してメールを送信する
- メールに複数のファイルを添付する
目次
複数のファイルを添付する
システムからメールを送信するときに、案内や請求書など複数のファイルを添付して送信するケースがあります。
そこで今回は、複数のファイルを添付したメールの送信方法を解説していきます。
なお、ファイル添付の基本的な方法については別記事「メールにファイルを添付して送信する」で解説している方法をそのまま使います。
コードの解説
実は仕組みは非常に単純で、添付したいファイルの数だけ「–__BOUNDARY__」で区切ってファイルを指定していく形になります。
例えば、添付ファイルが3つの場合は次のようなコードで送ることができます。
コード例
<?php
//
// 次のような値が入っていることを想定
// $to = 'メールを受け取る人のメールアドレス';
// $subject = 'メールへのファイル添付テスト';
// $text = '本メールはファイル添付のテスト用メールです。';
// $file = 'テスト.pdf';
// $file = 'テスト2.jpg';
// $file = 'テスト3.xlsx';
//
function sendMail( $to=null, $subject=null, $text=null, $file=null, $file2=null, $file3=null){
//初期化
$res = false;
//日本語の使用宣言
mb_language("ja");
mb_internal_encoding("UTF-8");
if( $to === null || $subject === null || $text === null ) {
return false;
}
// 送信元の設定
$sender_email = 'noreply@gray-code.com';
$org = 'GRAYCODE';
$from = 'GRAYCODE <noreply@gray-code.com>';
// ヘッダー設定
$header = '';
$header .= "Content-Type: multipart/mixed;boundary=\"__BOUNDARY__\"\n";
$header .= "Return-Path: " . $sender_email . " \n";
$header .= "From: " . $from ." \n";
$header .= "Sender: " . $from ." \n";
$header .= "Reply-To: " . $sender_email . " \n";
$header .= "Organization: " . $org . " \n";
$header .= "X-Sender: " . $org . " \n";
$header .= "X-Priority: 3 \n";
// テキストメッセージを記述
$body = "--__BOUNDARY__\n";
$body .= "Content-Type: text/plain; charset=\"ISO-2022-JP\"\n\n";
$body .= $text . "\n";
$body .= "--__BOUNDARY__\n";
// ファイル添付1
if( !empty($file) ) {
$body .= "Content-Type: application/octet-stream; name=\"{$file}\"\n";
$body .= "Content-Disposition: attachment; filename=\"{$file}\"\n";
$body .= "Content-Transfer-Encoding: base64\n";
$body .= "\n";
$body .= chunk_split(base64_encode(file_get_contents("temp/".$file)));
$body .= "--__BOUNDARY__\n";
}
// ファイル添付2
if( !empty($file2) ) {
$body .= "Content-Type: application/octet-stream; name=\"{$file2}\"\n";
$body .= "Content-Disposition: attachment; filename=\"{$file2}\"\n";
$body .= "Content-Transfer-Encoding: base64\n";
$body .= "\n";
$body .= chunk_split(base64_encode(file_get_contents("temp/".$file2)));
$body .= "--__BOUNDARY__\n";
}
// ファイル添付3
if( !empty($file3) ) {
$body .= "Content-Type: application/octet-stream; name=\"{$file3}\"\n";
$body .= "Content-Disposition: attachment; filename=\"{$file3}\"\n";
$body .= "Content-Transfer-Encoding: base64\n";
$body .= "\n";
$body .= chunk_split(base64_encode(file_get_contents("temp/".$file3)));
$body .= "--__BOUNDARY__\n";
}
//メール送信
$res = mb_send_mail( $to, $subject, $body, $header);
return $res;
}
実行結果
3つの添付ファイルが付いたメールを受信すると、次のような形で届きます(Gメールでの表示例)。
上記のsendMail関数では、ファイル名が渡されたらfile_get_contents関数でファイルを取得し、添付する処理を実行しています。(最大3ファイルまで)
3つ以上のファイルを添付したい場合についても、上記の処理を4つ、5つと増やしていくだけで実装可能ですが、サーバー上の送信できるファイルサイズ(容量)の設定に注意してください。