PHPでHTMLメールを送る方法
PHPでHTMLメールなどメールソースを記述する場合には、mb_send_mail関数は使用できません。
HTMLメールや添付ファイルを付けたメールを送信するには、mail関数またはpopen関数を使用します。
HTMLメールや添付ファイル、携帯メールのデコメールなどを送るときは、自分宛にメールを送信して、受信したファイルのソースを参考にするといいです。
[参考記事] mb_send_mail、mb_encode_mimeheaderの文字化けのまとめ(半角カタカナなど)
[参考記事] mb_send_mailでCCやBCCを指定する 表示名を指定する
[参考記事] mail関数やmb_send_mail関数でReturn-Pathを設定する方法
[参考記事] PCからデコメールを送るときの仕様
[参考記事] mailto本文での改行 ドコモのN、Pで送信に失敗します
[参考記事] mailtoの使い方
[参考記事] 携帯サイトでのmailtoの使い方
RFCの仕様ではメールの改行コードはCR+LFとなります。
RFC2821(SMTP)/RFC1939(POP3)/RFC2822(Internet Message Format)
mail関数を使用する場合
$mail_from = 'test@example.com'; $mail_to = 'hoge@example.net'; $mail_from_name = '送信者の名前'; $subject = '件名'; $body_text = '代替テキストの本文'; $body_html = 'HTMLメールの本文'; $parameter = "-f ".$mail_from; $boundary = "--".uniqid(rand(),1); // ヘッダー情報 $headers = ''; $headers .= 'Content-Type: multipart/alternative; boundary="' . $boundary . '"' . "\r\n"; $headers .= 'Content-Transfer-Encoding: binary' . "\r\n"; $headers .= 'MIME-Version: 1.0' . "\r\n"; $headers .= 'Content-type: text/html; charset=UTF-8' . "\r\n"; $headers .= "From: " . mb_encode_mimeheader($mail_from_name) . "<" . $mail_from . ">" . "\r\n"; // 送信者名を指定しない場合は次のよう // $headers .= "From: " . $mail_from . "\r\n"; // メッセージ部分 $message = ''; $message .= '--' . $boundary . "\r\n"; $message .= 'Content-Type: text/plain; charset=UTF-8' . "\r\n"; $message .= 'Content-Disposition: inline' . "\r\n"; $message .= 'Content-Transfer-Encoding: quoted-printable' . "\r\n"; $message .= "\r\n"; $message .= quoted_printable_decode ( $body_text ) . "\r\n"; $message .= "\r\n"; $message .= '--' . $boundary . "\r\n"; $message .= 'Content-Type: text/html; charset=UTF-8' . "\r\n"; $message .= 'Content-Disposition: inline' . "\r\n"; $message .= 'Content-Transfer-Encoding: quoted-printable' . "\r\n"; $message .= "\r\n"; $message .= quoted_printable_decode ( $body_html ) . "\r\n"; $message .= '--' . $boundary . "\r\n"; // 送信する if(!mail($mail_to,$subject, $message, $headers, $parameter)){ echo "送信失敗"; }else{ echo "送信成功"; }
popen関数を使用する場合
$mail_from = 'test@example.com'; $mail_to = 'hoge@example.net'; $mail_from_name = '送信者の名前'; $subject = '件名'; $body_text = '代替テキストの本文'; $body_html = 'HTMLメールの本文'; $boundary = "--".uniqid(rand(),1); $subject = mb_encode_mimeheader(mb_convert_encoding($subject, "JIS", "auto"), "JIS"); // ヘッダー情報 $headers = ''; $headers .= 'Content-Type: multipart/alternative; boundary="' . $boundary . '"' . "\r\n"; $headers .= 'Content-Transfer-Encoding: binary' . "\r\n"; $headers .= 'MIME-Version: 1.0' . "\r\n"; $headers .= 'Content-type: text/html; charset=UTF-8' . "\r\n"; $headers .= "From: " . mb_encode_mimeheader($mail_from_name) . "<" . $mail_from . ">" . "\r\n"; // 送信者名を指定しない場合は次のよう // $headers .= "From: " . $mail_from . "\r\n"; $headers .= 'To: ' . $mail_to . "\r\n"; $headers .= 'Subject: ' . $subject . "\r\n"; // メッセージ部分 $message = ''; $message .= '--' . $boundary . "\r\n"; $message .= 'Content-Type: text/plain; charset=UTF-8' . "\r\n"; $message .= 'Content-Disposition: inline' . "\r\n"; $message .= 'Content-Transfer-Encoding: quoted-printable' . "\r\n"; $message .= "\r\n"; $message .= quoted_printable_decode ( $body_text ) . "\r\n"; $message .= "\r\n"; $message .= '--' . $boundary . "\r\n"; $message .= 'Content-Type: text/html; charset=UTF-8' . "\r\n"; $message .= 'Content-Disposition: inline' . "\r\n"; $message .= 'Content-Transfer-Encoding: quoted-printable' . "\r\n"; $message .= "\r\n"; $message .= quoted_printable_decode ( $body_html ) . "\r\n"; $message .= '--' . $boundary . "\r\n"; // 送信する //sendmailへのプロセスを開く if(!($mp = @popen("/usr/sbin/sendmail -f $mail_from $mail_to", "w")){ echo "送信失敗"; exit; } fputs($mp, $headers); fputs($mp, $message); //sendmailへのプロセスを開放 pclose($mp);
関連記事
- PHPでwebサーバー(apache/nginx)の実行ユーザー・グループを確認する方法
- リクエストヘッダーやリクエストボディーなどを取得する方法
- 負荷が高いときには503エラーを返す方法
- サイトの更新情報をPINGサーバに送信する方法
- PHPでロードアベレージを表示させる方法
- PHPでTwitterのツイートをする/ツイート一覧を取得する/検索する(API v1.1)
- インクルードパスを設定する方法
- オブジェクト(Object)を配列(Array)に変換する方法
- PHPでgzip圧縮形式(gz圧縮)のファイルを読み書きする方法
- PHPでfacebook投稿時に公開範囲を指定する方法
- PHPで複数の画像をfacebookに投稿する方法
- PHPでfacebookのフィード(ウォール)に投稿する方法
- PHPでのfacebookアプリの認証処理(APIを使うユーザー認証)
- MySQL関数のまとめ
- MySQLサーバに接続できるかどうかを確認する
- ディレクトリ内のファイルのパーミッションを一括で変更する
- POSTでアップロードできるファイルサイズの制限を変更する方法
- 暗号化・複合化を行う ブロック暗号
- date型やdatetime型と年月日時分秒への変換
- 関数・メソッドの存在を調べる方法
- PHPでTwitterのbotを作る方法 ツイートをする/ツイート一覧を取得する(API v1)
- strtotimeの指定
- ディレクトリセパレータを短く定義する DIRECTORY_SEPARATOR
- モザイク画像を作る方法
- HTML内のアクセス解析タグを除去する方法
- HTMLのTABLEタグを簡単にCSVファイルに変換する方法
- 画像表示のときに指定サイズにリサイズする(画像の拡大縮小)
- テキストを可逆的な暗号化する Crypt_Blowfish
- PHPでwhois検索をする Net_Whois
- よく使うヘッダー関数のまとめ
- キャリア・世代を判別する
- mb_send_mailでCCやBCCを指定する 表示名を指定する
- より高速に、推測困難な一意なIDを生成する方法
- 画像ファイルを指定容量ぎりぎりに圧縮する
- 指定したHTTPヘッダーが送信済みあるいは送信予定に含まれているか
- DOCUMENT ROOTを得る $_SERVER["DOCUMENT_ROOT"]は使えない!
- マルチバイト文字列(日本語文字)を一文字づつ取り出す
- ファイルを削除する/フォルダを削除する
- ファイルを読み込む/ファイルに書き込む
- ディレクトリ内のファイル一覧を取得する
- quoted-printable文字列の変換
スポンサーリンク