PHP で添付ファイル付きメールを送信する関数(修正版)

スポンサーリンク

こちらで紹介した、PHP で添付ファイル付きメールを送信する関数ですが、一部修正しました。

mb_internal_encoding( ‘UTF-8’ ); から mb_internal_encoding( ‘ISO-2022-JP’ ); に修正しました。

mb_internal_encodingでの文字コード指定と、mb_convert_encodingでの文字コード指定が一致しないと、長い文字列で一部文字化けが発生します。


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 );
}
?>

使用方法については、こちらを参照して下さい。

コメント

  1. げんき. より:

    すばらしく使いやすい関数の公開ありがとうございます.
    イベント発生時にmotionを使ってwebカメラで撮影した写真を管理者宛にメール添付で送信する.という処理に使わせていただきました.

  2. パソコン鳥 パソコン鳥 より:

    お役に立てて何よりです。
    また実際の用途を教えて下さり、ありがとうございます。

タイトルとURLをコピーしました