メールの送信

メールの送信

bool mail (
    string $to ,                  // 送信先のメールアドレス
    string $subject ,             // メールの表題
    string $message               // メールの本文
    [, string $additional_headers // From、Cc、Bccヘッダ
    [, string $additional_parameters
    ]] )
PHP: mail - Manual

送信が受け入れられた場合にTRUEが返されますが、これは送信先に届いたことを意味しません。また迷惑メール対策として宛先不明なメールにエラーを返さないサーバーが多く、送信先を誤っても送信元にエラーが返されないことがあります。

送信元 (Fromヘッダ)

mail()の第4引数$additional_headersはメールヘッダの最後に追加する文字列で、通常Fromヘッダを指定します。このヘッダはWindows環境ならばphp.ini

sendmail_from = me@example.com

のように指定することでも可能です。いずれの方法でもFromヘッダが指定されていないと、「"sendmail_from" not set in php.ini or custom "From:" header missing」のように警告されます。

差出人の指定

差出人は$additional_headersに、

'From:sender<address>'

のように記述することで設定できます。

  • 差出人は、senderに記述。
  • 送信元のメールアドレスは、<>で囲んでaddressに記述。

実際のFromヘッダの値

$additional_headersの指定は、Fromヘッダに次のように反映されます。

引数$additional_headersの値 実際のFromヘッダの値※1
未指定 アカウント名@ホスト名
'From:sample' sample@ホスト名
'From:sample<test@so-zou.jp>' sample<test@so-zou.jp>
'From:sample<test@example.com>'
(実在しない架空のアドレス)
sample<test@example.com>
※1 サーバの設定により異なる結果となります。

日本語によるメール送信

言語と文字エンコーディングを設定して、マルチバイト対応のmb_send_mail()関数を使用します。

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

mb_send_mail( $to, $subject, $message, 'From:{$from}' )
bool mb_send_mail (
    string $to ,
    string $subject ,
    string $message
    [, string $additional_headers = NULL
    [, string $additional_parameter = NULL
    ]] )
PHP: mb_send_mail - Manual

ローカル環境でのメール送信

ローカル環境でメールを送信するには、まずメールサーバを用意する必要があります。

PHPの設定

php.iniで以下のように設定します。

メールサーバ名の指定

mail functionの項目に、適切なSMTPのメールサーバ名とポート番号を指定します。

[mail function]
; For Win32 only.
SMTP = localhost
smtp_port = 25

これが正しく設定されていないと、

Failed to connect to mailserver at "localhost" port 25,
  verify your "SMTP" and "smtp_port" setting in php.ini or use ini_set()

のように警告されます。この警告は、メールサーバによってアクセスが許可されていないときにも表示されます。

差出人の指定

sendmail_fromに差出人のメールアドレスを指定します。

; For Win32 only.
sendmail_from = me@example.com

これを指定していないと、

SMTP server response: 501 5.5.4 Invalid Address

のように警告されます。

メールサーバの設定

メールサーバにMicrosoft SMTP Serviceを使用しているならば、メールの中継を許可します。これが許可されていないと、

SMTP server response: 550 5.7.1 Unable to relay for name@example.com

のように警告されます。

PHPのマニュアルから検索