添付ファイル付きメールをmb_send_mail()関数で送信する

PHPのmb_send_mailで、ファイルを添付して送信する方法を紹介します。

検索した限りでは、非推奨とか、できない、という記述が多かったけれど、この記事最後に紹介するphpレシピ本にはイケると書いてあって、試したら動きました。

使用した条件

・さくら専用サーバ
・PHPのバージョン5.1.6

添付ファイル付きメールをmb_send_mail()関数で送信するコード

<?php
/*----------------------------------------------------------
 添付ファイル付きメールをmb_send_mail()関数で送信する
----------------------------------------------------------*/
// 宛て先アドレス
$mailTo      = 'user@test.com';

// メールのタイトル
$mailSubject = 'メールタイトルです';

// メール本文
$mailMessage = 'メール本文です';

// 添付するファイル
$dir = './path/';
$file = 'sample.jpg';
$fileName    = $dir.$file;

// 差出人のメールアドレス
$mailFrom    = 'user@test.com';

// Return-Pathに指定するメールアドレス
$returnMail  = 'user@test.com';

// メールで日本語使用するための設定をします。
mb_language("Ja") ;
mb_internal_encoding("UTF-8");

$header  = "From: $mailFrom\r\n";
$header .= "MIME-Version: 1.0\r\n";
$header .= "Content-Type: multipart/mixed; boundary=\"__PHPRECIPE__\"\r\n";
$header .= "\r\n";

$body  = "--__PHPRECIPE__\r\n";
$body .= "Content-Type: text/plain; charset=\"ISO-2022-JP\"\r\n";
$body .= "\r\n";
$body .= $mailMessage . "\r\n";
$body .= "--__PHPRECIPE__\r\n";

// 添付ファイルへの処理をします。
$handle = fopen($fileName, 'r');
$attachFile = fread($handle, filesize($fileName));
fclose($handle);
$attachEncode = base64_encode($attachFile);

$body .= "Content-Type: image/jpeg; name=\"$file\"\r\n";
$body .= "Content-Transfer-Encoding: base64\r\n";
$body .= "Content-Disposition: attachment; filename=\"$file\"\r\n";
$body .= "\r\n";
$body .= chunk_split($attachEncode) . "\r\n";
$body .= "--__PHPRECIPE__--\r\n";

// メールの送信と結果の判定をします。セーフモードがOnの場合は第5引数が使えません。
if (ini_get('safe_mode')) {
 $result = mb_send_mail($mailTo, $mailSubject, $body, $header);
} else {
 $result = mb_send_mail($mailTo, $mailSubject, $body, $header,'-f' . $returnMail);
}

if($result){
       echo '<p>送信成功</p>';
}else{
       echo '<p>送信失敗</p>';
}

?>

参考書

以下の本を参考にしています。お世話になりすぎて表紙擦り切れてきた。

PHP 逆引きレシピ (PROGRAMMER'S RECiPE)
鈴木 憲治 安藤 建一 山田 直明 八木 照朗 山本 義之 河合 勝彦
翔泳社
売り上げランキング: 10,801
スポンサーリンク

シェアする

フォローして更新を受け取る

スポンサーリンク

コメント

  1. mr.o より:

    46行目、$file の後ろ、バックスラッシュ+ダブルクオートが抜けてませんか?

  2. htanaka より:

    mr.o さま
    ご指摘ありがとうございます!
    修正させていただきました。