PHPでのメール送信について

投稿日:2013年1月17日

Webサイトでお問い合わせフォームなどを利用した場合に、
内容と送信を確認するための自動返信メールが来ることがよくあります。
そうした際にPHPでのメール送信を用いることができます。

日本語で(マルチバイト文字を含んで)メールを送りたいときには、
mb_send_mail関数を利用すると便利です。
必要な設定や引数についてまとめました。

まず前提として、php.iniで「sendmail_path」が正しく設定されている必要があります。

また、文字化けをふせぐために、mb_send_mail関数を呼ぶ前に、
使用するエンコーディングや文字コードを設定しておくとよいでしょう。
これは、php.iniで設定するものですが、
ソース内で明示的に宣言するほうが保守や利用の観点からも良い気がします。

文字コードの設定


・・・
  // 設定
  mb_language("Japanese");
  mb_internal_encoding("UTF-8");
・・・
  

さて、以下がメール送信のサンプルプログラムです。

メール送信サンプル


・・・
  // メール内容
  $message = "メッセージn";
  $mail_header .= "From: " . mb_encode_mimeheader("お問い合わせ") . "n";
	
  // メール送信
  if (mb_send_mail($to_email, "タイトル", $message, $mail_header, "-femail@xxx.com")) {
    // メール送信 成功処理
    successMsg();
  }
  else {
    // メール送信 失敗処理
    errorMsg();
    exit(1);
  }
・・・
  

mb_send_mail関数は5つの引数を指定することができます。

第1引数:
 送信先のメールアドレス

第2引数:
 メールのタイトル。
  第2引数に関しては、mb_send_mail関数が、
  mb_encode_mimeheaderでMIME用にエンコードしてくれます。

第3引数:
 メールの内容。

第4引数:(オプション)
 MIMEヘッダの設定。
  「From:」や「Bcc:」といったMIMEヘッダの設定ができる。
  「From:」は設定しておかないと迷惑メールと判断するサーバもあるようですので、
  設定しておいた方がいいでしょう。
  第4引数に関しては、第2引数とは違って、
  勝手にmb_encode_mimeheaderでエンコードしてくれません。

第5引数:(オプション)
 エラーがあった場合にメールを送信するメールアドレス。
  PHPの設定でsafe_modeが有効な場合は
  第5引数があるとmb_send_mail自体無効になるようです。
  ただ、PHP5.3では、safe_modeの設定そのものが非推奨、
  PHP5.4以降では完全になくなるようですが。

返値は、trueかfalseです。
mb_send_mail関数は、メールを投げることに成功したかどうかを返すので、
メールが相手に届いたかどうかはわかりませんので、ご注意を。

南本貴之

関連記事

カテゴリー: PHP, WEB
  • LINEスタンプ販売中!「カフィーノ♪」 BRISKオリジナル