パソコン鳥のブログ

アクセスカウンタ

zoom RSS PHP で添付ファイル付きメールを送信する関数

<<   作成日時 : 2013/08/05 21:54   >>

トラックバック 1 / コメント 4

PHP でメールを送る関数です。
日本語対応で、添付ファイルも送信できます。


準備


マルチバイト文字列関数の mb_language関数を使用します。
CentOS6 では、yum install php-mbstring でパッケージをインストールしておきます。


メール送信関数


SendAttachedMail()
メールを送信します。
添付ファイルも送信できます。
題名、本文、添付ファイル名とも日本語対応です。
メール送信が受け入れられた場合に TRUE 、それ以外の場合に FALSE を返します。

書式:
bool SendAttachedMail( 差出人 , 宛先 , 題名 , 本文 , 添付ファイル名の配列 );



2014/1/7
mb_internal_encoding( 'UTF-8' ); から
mb_internal_encoding( 'ISO-2022-JP' ); に修正

2014/1/31
Subject、添付ファイル名の文字化け回避で
$filename = mb_encode_mimeheader( mb_convert_encoding( basename( $file[ $i ] ) , "ISO-2022-JP" , 'auto' ) );
return mail( $to , mb_encode_mimeheader( mb_convert_encoding( $subject , "ISO-2022-JP" , 'auto' )) , $mbody , $header );
に変更

send_attached_mail.inc

<?php

function SendAttachedMail( $from , $to , $subject , $body , &$file ){

  mb_language( 'ja' );
  mb_internal_encoding( 'ISO-2022-JP' );

  $boundary = "__Boundary__" . uniqid( rand() , true ) . "__";
  $mime = "application/octet-stream";


  $header = "";
  $header .= "From: $from\n";
  $header .= "MIME-Version: 1.0\n";
  $header .= "Content-Type: Multipart/Mixed; boundary=\"$boundary\"\n";
  $header .= "Content-Transfer-Encoding: 7bit";


  $mbody = "--$boundary\n";
  $mbody .= "Content-Type: text/plain; charset=ISO-2022-JP\n";
  $mbody .= "Content-Transfer-Encoding: 7bit\n";
  $mbody .= "\n";
  $mbody .= mb_convert_encoding( $body , 'ISO-2022-JP' , 'auto' );
  $mbody .= "\n";

  for( $i = 0 ; $i < count( $file ) ; $i++ ){

    $filename = mb_encode_mimeheader( mb_convert_encoding( basename( $file[ $i ] ) ,  "ISO-2022-JP" , 'auto' ) );


    $mbody .= "--$boundary\n";
    $mbody .= "Content-Type: $mime; name=\"$filename\"\n";
    $mbody .= "Content-Transfer-Encoding: base64\n";
    $mbody .= "Content-Disposition: attachment; filename=\"$filename\"\n";
    $mbody .= "\n";
    $mbody .= chunk_split( base64_encode(file_get_contents( $file[ $i ] ) ) , 76 ,"\n" );
    $mbody .= "\n";

  }


  $mbody .= "--$boundary--\n";

  return mail( $to , mb_encode_mimeheader( mb_convert_encoding( $subject , "ISO-2022-JP" , 'auto' )) , $mbody , $header );


}
?>


サンプル



<?php

require "send_attached_mail.inc";


$file[0] = "/tmp/テスト.txt";
$file[1] = "/tmp/test.doc";

SendAttachedMail( "from@sample.com" , "hoge@sample.com" , "題名はテスト" , "本文1行目\n本文2行目" , $file );

?>

$file[0] , $file[1] で指定された箇所にあるファイルをメールに添付します。

参考


日曜プログラミング講座/PHP言語 - WEB要素編 - Water-Sunlight
PHP: mail - Manual

テーマ

関連テーマ 一覧


月別リンク

トラックバック(1件)

タイトル (本文) ブログ名/日時
PHP で添付ファイル付きメールを送信する関数(修正版)
こちらで紹介した、PHP で添付ファイル付きメールを送信する関数ですが、一部修正しました。 ...続きを見る
パソコン鳥のブログ
2014/01/07 18:37

トラックバック用URL help


自分のブログにトラックバック記事作成(会員用) help

タイトル
本 文

コメント(4件)

内 容 ニックネーム/日時
参考になりました。ありがとうございます!
koya
2014/01/30 10:15
どうしてもsubjectが文字化けしてしまったので
mb_encode_mimeheader( mb_convert_encoding( $subject , "ISO-2022-JP" , 'auto' ))
で送信したらうまくいきました。
koya
2014/01/30 11:05
ご指摘ありがとうございます。
記事を書いた時と別の環境で試してみると、確かにSubjectが文字化けしていました。
記事の修正をしました。
パソコン鳥
2014/01/31 23:54
添付ファイル名が日本語名の場合も文字化けしていましたので、こちらも修正しました。
パソコン鳥
2014/02/01 00:11

コメントする help

ニックネーム
本 文
PHP で添付ファイル付きメールを送信する関数 パソコン鳥のブログ/BIGLOBEウェブリブログ
文字サイズ:       閉じる