PHPを利用してメールを送りたくて試行錯誤しています。
ネットに情報はたくさんありましたが、特に文字化けに関することはサイトによって言っていることが違い、どれが正しいのか困惑している状況です。
表示文字に制限があるので出来るだけISO-2022-JPを使いたくないという気持ちがあり
いろいろと組み合わせ、(自身の環境でですが)試してみた結果、以下のようになりました。
問題点等ご指摘いただければ幸いです。
あと、一般的にはこうするという書き方や、ライブラリ、フレームワーク等ありましたら教えていただけますでしょうか。
よろしくお願いします。
疑問点① 「UTF-8をbase64エンコード」で送って、世間(※)のメーラーやMTAは対応しているのか
※メジャー処が対応していれば大丈夫だろうと思ってます…。
疑問点② そもそも「UTF-8をbase64エンコード」で送る場合の書き方はこれであっているのか
PHP
1<?php 2mb_language("ja"); 3mb_internal_encoding("UTF-8"); 4 5$to = "to_address@example.com"; 6$from = "from_address@example.com"; 7$fromname = "送信者 アイウエオ①㋐髙"; 8$subject = "件名 アイウエオ①㋐髙"; 9$message = "本文 アイウエオ①㋐髙"; 10 11$filepath = "tmp/test.jpg"; 12$filename = "テスト画像.jpg"; 13 14$boundary = "__BOUNDARY__"; 15 16$body = ""; 17$body .= "--$boundary\r\n"; 18$body .= "Content-Type: text/plain; charset=UTF-8\r\n"; 19$body .= "Content-Transfer-Encoding: base64\r\n"; 20$body .= "\r\n"; 21$body .= chunk_split(base64_encode($message))."\r\n"; 22$body .= "--$boundary\r\n"; 23$body .= "Content-Type: application/octet-stream; name=\"$filename\"\r\n"; 24$body .= "Content-Disposition: attachment; filename=\"$filename\"\r\n"; 25$body .= "Content-Transfer-Encoding: base64\r\n"; 26$body .= "\r\n"; 27$body .= chunk_split(base64_encode(file_get_contents($filepath)))."\r\n"; 28$body .= "--$boundary--\r\n"; 29 30$mail_headers = "Content-Type: multipart/mixed; boundary=\"$boundary\"\r\n"; 31$mail_headers .= "Content-Transfer-Encoding: base64\r\n"; 32$mail_headers .= "From: =?UTF-8?B?".base64_encode($fromname)."?= <$from>"; 33 34$send = mail( 35 $to, 36 "=?UTF-8?B?".base64_encode($subject)."?=", 37 $body, 38 $mail_headers 39 ); 40 41var_dump($send); 42?> 43
実行環境
さくらインターネット上で動かしています。
PHP 5.4
OS:FreeBSD 9.1-RELEASE
Webサーバ:Apache/2.2.34
回答2件
あなたの回答
tips
プレビュー