mb_send_mail による メール送信におけるファイル添付の普通のサンプルはこちら 呼び出し
$( "#base" ).submit(function( event ) { event.preventDefault(); $("#action").prop( "disabled", true ); $("#action_copy").prop( "disabled", true ); // 新規送信用オブジェクト var formData = new FormData(); // 入力テキスト formData.append("fld_to", $("input[name='fld_to']").val() ); formData.append("fld_subject", $("input[name='fld_subject']").val() ); formData.append("fld_body", $("textarea[name='fld_body']").val() ); // ファイルオブジェクト( type="file" ) formData.append("fld_file", $("input[name='fld_file']").get(0).files[0]); $.ajax({ url: "app-mail.php", type: "POST", data: formData, processData: false, // jQuery がデータを処理しないよう指定 contentType: false // jQuery が contentType を設定しないよう指定 }) .done(function( data, textStatus ){ console.log( "status:" + textStatus ); console.log( "data:" + JSON.stringify(data, null, " ") ); if ( data.status == 0 ) { toastr.info("メールが送信されました"); $("input[name='fld_subject']").val( "" ); $("textarea[name='fld_body']").val( "" ); } if ( data.status == 1 ) { // エラーメッセージを表示 toastr.error("メール送信に失敗しました"); } }) // 失敗 .fail(function(jqXHR, textStatus, errorThrown ){ console.log( "status:" + textStatus ); console.log( "errorThrown:" + errorThrown ); }) // 常に実行 .always(function() { $("#action").prop( "disabled", false ); $("#action_copy").prop( "disabled", false ); }) ; });
受け側の PHP $_POST['fld_body'] の中身は UTF-8 ですが、mb_send_mail が変換してくれます。
<?php // *************************** // このアプリ特有の定義 // *************************** require_once("../mail-jquery/app.model"); $GLOBALS["content_type"] = "application/json"; $GLOBALS["upload_dir"] = "./upload"; require_once("{$GLOBALS["common_path"]}common.php"); // type="file" のフィールドの name の値 $fld = "fld_file"; // ****************************************************** // アップロード 処理 // ****************************************************** if ( !$_FILES ) { // php.ini の upload_max_filesize を超えて、 // Apache に制限が無いと $_FILE が空になる $_FILES[$fld]['error'] = 5; // ユーザエラーメッセージ } // ************************************* // アップロード処理 // フィールド名 : $fld で固定 // ************************************* // true では実行しない if ( !$GLOBALS["debug_update"] ) { $upload = realpath ( $GLOBALS["upload_dir"] ); $upload .= ( DIRECTORY_SEPARATOR . $_FILES[$fld]['name'] ); if ( move_uploaded_file( $_FILES[$fld]['tmp_name'], $upload ) ) { $_POST['result'] = "アップロードに成功しました"; } else { if ( !$_FILES ) { $_FILES[$fld]['error'] = 5; // ユーザエラーメッセージ } $_POST['result'] = "アップロードに失敗しました"; } } else { if ( $_FILES[$fld]['error'] == 0 ) { $_POST['result'] = "アップロードに成功しました"; } else { $_POST['result'] = "アップロードに失敗しました"; } } $_POST['files'] = $_FILES; // ************************************* // メール処理 // ************************************* mb_language("Japanese"); mb_internal_encoding("UTF-8"); $uniqid = uniqid(); $from_header = "From: " . mb_encode_mimeheader( mb_convert_encoding("差出人","iso-2022-jp") ); // このソースを置くサーバから使えるメールアドレス $from_header .= " <{$GLOBALS["mail"]}>\n"; $from_header .= "Content-Type: multipart/mixed; boundary=\"{$uniqid}\"\n"; $mime = $_FILES['fld_file']['type']; $fname = $_FILES['fld_file']['name']; $body = "--{$uniqid}\n"; $body .= "Content-Type: text/plain; charset=\"ISO-2022-JP\"\n"; $body .= "\n"; $body .= $_POST['fld_body'] . "\n"; $body .= "--{$uniqid}\n"; $body .= "Content-Type: {$mime}; name=\"{$fname}\"\n"; $body .= "Content-Transfer-Encoding: base64\n"; $body .= "Content-Disposition: attachment; filename=\"{$fname}\"\n"; $body .= "\n"; // アップロードされたファイル $path = $upload; $data = file_get_contents($path); $encode = base64_encode($data); $body .= chunk_split($encode); $body .= "\n--{$uniqid}--\n"; if ( !$GLOBALS["debug_update"] ) { $result = mb_send_mail( $_POST["fld_to"], $_POST["fld_subject"], $body, $from_header ); } if ( $result ) { $error = 0; } else { $error = 1; } // アップロードして添付したファイルを削除 unlink($path); // *************************** // JSON データ作成 // *************************** $json = new stdClass; $json->post = $_POST; // 行データ $json->status = $error; // エラー if ( !$GLOBALS["debug_update"] ) { $json->user = $GLOBALS["mail"]; $json->debug = $from_header; } print json_encode( $json, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE ); ?>
関連する記事 fake sendmail for windows を使って、PHP でごく普通に( mb_send_mail で )メール送信 : Gmail なので ssl(465)
|
【PHP + 通信の最新記事】
- fake sendmail for windows を使って、PHP でごく普通に( mb_send_mail で )メール送信
- PHP の cURL でファイルアップロード
- PHP : WEB でもコマンドラインでも HTTP でファイルをダウンロードする 『fget.php』
- PHP : cURL : Google Photo API の albums.list メソッドを使用して アルバム一覧データを取得する
- PHP + cURL で Google Photo API の アクセストークンを取得する
- PHP : cURL で FTP + SSL ダウンロード
- PHP の imap 関数で( Windows ローカル )、Yahoo メールのメールをさくらインターネットのメールへコピーする
- PHP の imap 関数( Windows のローカル )で、さくらインターネットのメールボックスの情報を取得する
- PHP : IMAP 関数 でまずメールのヘッダ部分を整理してログに出力する / ※ JSON 出力を追加
- ファイルを一つアップロード : FORM の target を IFRAME にして、PHP に JavaScript を書き出させて元のページにメッセージを表示させる
- Pear の Net_POP3 で、SSL(995) を使って簡単にメール受信
- PHP をコマンドプロンプトから実行して、WEB 上のデータを取得するいくつかの方法
- ファイルのアップロードからそれを添付してメールを送るテンプレート(スケルトン)
- PHP : mb_send_mail を使用した自家用メール送信 API
- PHP で Windows標準のオブジェクト(CDO.Message)とGMail を使ってメール送信
- PHP : http 経由でファイルのサイズを取得する file_size 関数と ファイルサイズを付加した get_imagesize 関数
- 連想配列のキー部分がプロパティと一致したらセットする( メール送信用クラス )
- PHP : リモートのファイルサイズを取得する
- ローカルの PHP を使ってコマンドプロンプトより簡単にバイナリファイルをアップロードする
- PHP の cURL で ftp サーバーにファイルをアップロードする(SSLなし)