2021-08-09

Mac OSのローカル開発環境にメール送信機能を実装する

PHPに関する記事

Mac OSのローカル開発環境にメール送信機能を実装する方法を紹介します。

Macにはデフォルトでメール転送エージェント、Postfixが用意されています。設定を行い、ローカル開発環境にメール送信機能を実装しましょう。

PHPのsendmail関数を利用して、メールが送信できる状態に設定します。なお、メールの送信サーバはGmailを利用したいと思います。事前にGoogleアカウントの用意してください。

Postfixの設定ファイルを編集

$ sudo /etc/postfix/main.cf

Postfixの設定ファイルを管理者権限で開き、下記を追記します。

relayhost = [smtp.gmail.com]:587
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_sasl_security_options = noanonymous
smtp_sasl_mechanism_filter = plain
smtp_use_tls = yes
tls_random_source=dev:/dev/urandom

記述内容のチェックを行ます。
エラーが出なければOK。

$ sudo postfix check

スポンサーリンク

Gmail側SMTPの設定ファイルを作成

簡易認証セキュリティー層、SASL(Simple Authentication and Security Layer)という仕組みを使用します。各種プロトコルに、認証機能や、暗号化機能を提供するレイヤー。ちなみにSASLはササルと読むそうです。

postfixディレクトリにGmailのSMTP認証に必要なファイルを作成します。
作成、編集はsudoで実行。

$ sudo vim /etc/postfix/sasl_passwd

ここではsasl_passwdというファイル名を指定していますが、任意で構いません。しかし、上記ファイルmain.cfsmtp_sasl_password_maps =で指定したファイル名と同じである必要があります。

作成したファイルに認証情報を記述します。

[smtp.gmail.com]:587 {account}@gmail.com:{passwd}

{account}にはGmailのアカウント名を記述。{passwd}にはGmailのパスワードを記述してください。

ハッシュマップデータベースを作成します。

$ sudo postmap /etc/postfix/sasl_passwd

postfixディレクトリを確認すると、sasl_passwd.dbというファイルが作成されています。
登録が完了したらsasl_passwdファイルは削除してOK。

$ sudo rm -rf /etc/postfix/sasl_passwd

Gmailアカウントの設定

Gmailをメール送信に使用する場合は、別途Google側の設定が必要です。

経由でメールを送信する場合、上記で設定したGmailアカウントで安全性の低いアプリにアクセスし、「安全性の低いアプリの許可」を有効にしてください。有効にしないとGoogle側のセキュリティに引っ掛かり、メールを送信することができません。

https://myaccount.google.com/lesssecureapps

スポンサーリンク

動作確認

以下のスクリプトを記載したphpファイルをローカル開発環境に設置し、メールを送信できるか確認してください。

sendmail_test.php

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

$to = 'to@example.com'; //送信先アドレス
$title = 'メール送信テスト';
$message = 'これはメールの送信テストです';
$headers = 'From: from@example.com'; //送信元アドレス

if (mb_send_mail($to, $title, $message, $headers)) {
    echo "メール送信成功です";
} else {
    echo "メール送信失敗です";
}

ターミナルからメール送信

スクリプトファイルをブラウザ上で実行しなくても、ターミナルからメール送信チェックができます。

mail -s {件名} {メールアドレス}

待機状態になるので、メール本文を入力し、最後に.(ピリオド)を入力してエンターを押します。

まとめ

to@example.comを確認し、メールが届いていれば問題ありません。
ローカル開発環境でフォームの動作確認ができれば非常に便利ですね。