添付ファイル付きメールの送信

提供: とある社畜の頭脳整理
2019年7月26日 (金) 17:23時点におけるRin-scrooge (トーク | 投稿記録)による版 (→‎mail())
ナビゲーションに移動 検索に移動

メールの送信」を基にファイルを添付して送信してみるよ。
メールの送信と同じく、メール受信をトリガーにして呼び出す用だから、添付するファイルのパスはフルパスできってるよ。

mb_send_mail

「mb_send_mail()」を使って添付ファイル付きメールを送信するサンプルプログラムだよ。

#!/usr/local/bin/php
<?php
    //カレントの言語を日本語にする
    mb_language("ja");
 
    //内部文字エンコードを設定する
    mb_internal_encoding("UTF-8");
 
    //設定
    $mailTo = "【送信先アドレス】";
    $subject = "表題";
    $message = "本文";
    $dir = '【添付ファイル格納ディレクトリパス】';
    $file = '【添付ファイル名】';
    $filename    = $dir.$file;

    //文字コード変換
    $subject = mb_convert_encoding($subject,"ISO-2022-JP-MS","UTF-8");
    $message = mb_convert_encoding($message,"ISO-2022-JP-MS","UTF-8");

    $header  = "From: 【送信元アドレス】\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 .= $message . "\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";

 
    //メール送信
    mb_send_mail($mailTo, $subject, $body, $header);
?>

mail()

「mail()」を使って添付ファイル付きメールを送信するサンプルプログラムだよ。

#!/usr/local/bin/php
<?php
    //カレントの言語を日本語にする
    mb_language("ja");
 
    //内部文字エンコードを設定する
    mb_internal_encoding("UTF-8");
 
    //設定
    $mailTo = "【送信先アドレス】";
    $subject = "表題";
    $message = "本文";
    $dir = '【添付ファイル格納ディレクトリパス】';
    $file = '【添付ファイル名】';
    $filename    = $dir.$file;

    //文字コード変換
    $subject = mb_encode_mimeheader($subject,"ISO-2022-JP-MS");
    $message = mb_convert_encoding($message,"ISO-2022-JP-MS","UTF-8");

    $header  = "From: 【送信元アドレス】\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 .= $message . "\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";

 
    //メール送信
    mail($mailTo, $subject, $body, $header);
?>

Mail::send()

「Mail::send()」を使って、添付ファイル付きメールを送信するサンプルプログラムだよ。

#!/usr/local/bin/php
<?php
    require_once '/home/【ドメイン名】/pear/share/pear/Mail.php';
    require_once '/home/【ドメイン名】/pear/share/pear/Mail/mime.php';

    //言語設定、内部エンコーディングを指定する
    mb_language("japanese");
    mb_internal_encoding("UTF-8");
    
    //添付メールを送る
    $mailTo = "【送信先アドレス】";
    $subject = "表題";
    $body = "本文";
    
    //コード変換
    $subject = mb_convert_encoding($subject, "ISO-2022-JP-MS", "UTF-8");
    $body    = mb_convert_encoding($body, "ISO-2022-JP-MS", "UTF-8");

    $mimeObject = new Mail_Mime("\n");
    $mimeObject->setTxtBody($body);
    $mimeObject->addAttachment("【添付ファイルのフルパス】","image/jpeg");

    $body_param = array(
     "head_charset" => "ISO-2022-JP",
     "text_charset" => "ISO-2022-JP"
    );
    $body = $mimeObject->get($body_param);

    $headers = array(
     "To" => $mailTo,
     "From" => "【送信元アドレス】",
     "Subject" => mb_encode_mimeheader($subject)
    );
    $header = $mimeObject->headers($headers);
    
    //メール送信
    $mail = Mail::factory("mail");
    $mail->send($mailTo,$header,$body);

?>