XAMPP環境でPHPを使ってメールを送れるようにするSMTPサーバーの設定方法


こういうエラーに対処できる

Failed to connect to mailserver at "localhost" port 25

1.sendmail.exeを手に入れる

まずは各自のxamppディレクトリにsendmailディレクトリがあるか確かめる。
なかった場合、xamppディレクトリ直下にsendmailディレクトリを作成。
fake sendmail for windowsからsendmail.zipをダウンロードし、解凍してsendmail.exeなどのzipファイル内のすべてのファイルを~\xampp\sendmailディレクトリに移す。

2.php.iniを編集する

作成した~\xampp\sendmailディレクトリの内容をXAMPPPHPに読み込ませるために、~\xampp\php\php.iniを編集する。

php.ini
[mail function]
; For Win32 only.
; http://php.net/smtp
; SMTP=localhost
; ↑コメントアウト
; http://php.net/smtp-port
; smtp_port=25
; ↑コメントアウト

; For Win32 only.
; http://php.net/sendmail-from
;sendmail_from = [email protected]

; For Unix only.  You may supply arguments as well (default: "sendmail -t -i").
; http://php.net/sendmail-path
sendmail_path = "\"\xampp\sendmail\sendmail.exe\" -t"
; ↑コメントアウトを外して、sendmail.exeのパスと-tを追加する。

3.sendmail.iniを編集する(Gメール版)

今度は~\xampp\sendmail\sendmail.iniに実際に送信するメールの設定などを追加していく。
今回はGメールのメールアドレスを使用する際の設定。

sendmail.ini
smtp_server=smtp.gmail.com
; ↑smtp.gmail.comを設定

; smtp port (normally 25)

smtp_port=587
; ↑ここは587を設定

; SMTPS (SSL) support
;   auto = use SSL for port 465, otherwise try to use TLS
;   ssl  = alway use SSL
;   tls  = always use TLS
;   none = never try to use SSL

smtp_ssl=auto
; ↑autoになっていなかったらautoにする

; /*中略*/

;debug_logfile=debug.log

; if your smtp server requires authentication, modify the following two lines

auth_username=[email protected]
; ↑Googleアカウントのメールアドレス
auth_password=password
; ↑Googleアカウントのパスワードでない、別に発行されたパスワードであるアプリパスワードを記入
; 4.アプリパスワードの発行で解説

; if your smtp server uses pop3 before smtp authentication, modify the 
; following three lines.  do not enable unless it is required.

pop3_server=
pop3_username=
pop3_password=

; force the sender to always be the following email address
; this will only affect the "MAIL FROM" command, it won't modify 
; the "From: " header of the message content

force_sender=[email protected]
; ↑Googleアカウントのメールアドレス

4.アプリパスワードの発行

Gメールを使ってメールを送信する際、アプリパスワードが必要になる。
このパスワードは二段階認証の代わりとして使用され、このパスワードが外部に漏れてもアカウントが特定されないようにするためのもの。
ここでは、そのアプリパスワードの発行方法を説明する。

  1. Googleアカウントのセキュリティからアプリパスワードを選ぶ。
  2. パスワードを入力し、本人確認を終えたら、アプリの選択をクリックしその他(名前の入力)を選ぶ。
  3. SMTPなどの名前を付けて、生成をクリック。
  4. お使いのデバイスのアプリ パスワードの下にある黄色い枠に囲まれた16文字がアプリパスワード。
  5. そのアプリパスワードをコピーして、sendmail.iniに貼り付ける。
sendmail.ece
[email protected]
auth_password=【アプリパスワード】

5.テスト

以上でメール送信に必要な設定は完了したため、ここではテストを行う。
PHPにはmb_sendmail()関数があるため、それだけのPHPファイルを作成し、コマンドプロントなどから実行して、実際にメールが送られるか確かめる。

mail_test.php
<?php 
mb_send_mail('送信先メールアドレス', '件名', '本文', 'From:[email protected]');
// $ php mail_test.php
// ↑コマンドプロントでの操作
 ?>

参考資料