PHPで添付つきメールを送る

  • 2020.05.23
  • PHP
PHPで添付つきメールを送る

PHPで添付つきメールを送るメソッドを作成しましたので掲載します。
全部のメーラーに対応しているかどうかは保障してません。ご了承ください。

添付付きメール送信メソッド

//---------------------------------------
//添付付きメール送信
//引数  $to      送信先メアド
//     $subject 件名
//     $body    本文
//     $from    差出人メアド
//     &$file   添付ファイル
//---------------------------------------
public function fileMailSend($to, $subject, $body, $from, &$file){
  mb_language( 'ja' );
  mb_internal_encoding( 'ISO-2022-JP' );

  $boundary = "__Boundary__" . uniqid( rand() , true ) . "__";

  $mime = "application/octet-stream";

  $header = "";
  $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 );

}

普通のメール送信メソッド

//---------------------------------------
//メール送信
//引数  $to      送信先メアド
//     $subject 件名
//     $body    本文
//     $from    差出人メアド
//---------------------------------------
public function textMailSend($to, $subject, $body, $from){

  mb_language( 'ja' );
  mb_internal_encoding( 'UTF-8' );

  $body = mb_convert_encoding($body, 'ISO-2022-JP-ms', 'UTF-8');

  $add_header = "From: " . $from . "\n";
  $add_header .= "Reply-to: " . $from . "\n";

  return @mb_send_mail($to, $subject, $body , $add_header, "-f ".$from);

}