【MAMPでGmail送信】Postfixの設定について

シェアする

どうも、純平@junpeko516です。

プログラミングスキルアップのために、とりあえず手を動かしてwebアプリを作って見ようと思い立ち、学習中のフレームワーク(Codeingiter)でお問い合わせフォームを作っている際に、メール送信機能が上手くいっていないという問題に直面しました。

どうやら、MAMPのローカル環境でメール送信のテストを行うには設定が必要とのこと。

このメール送信機能を設定に丸2日ぐらいかかりました。

なので、中や仕事から帰ったあとに、ひたすらググって調べていましたが、なんとか解決しました😂。

メールの送信設定って考えていたより複雑なんですね。

念願のメール送信ができるようになったので、備忘録として残しておきます。


スポンサーリンク

用語の確認

最初に、専門知識をまとめておきます。

まずは、SMTPサーバとPOPサーバーです。

SMTPサーバとはメールを送信してくれるコンピューター、
また、POPサーバとはメールを受け取るときに使うコンピューターのことです。

SMTPサーバ = メール送信用サーバ
POPサーバ = メール受信用サーバ

というイメージですね。
そして、「MTA」とは、「SMTPサーバの中にあるメール仕分けるプログラム」のことです。

MTAとはなんぞやという方は、こちらのサイトにまとめられています。
「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典

(この、「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典はIT用語がわからない時に僕がいつも参考にしているサイト。オススメです。)

またmacには、デフォルトでメール転送エージェント(MTA)である、Postfix(メール送信用のプログラム)がインストールされているようです。

windowsの場合は、Postfixはインストールする必要ありです。

今回は、Postfixというメールを仕分けしてくれるプログラムの設定がメインになります。

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

メール送信の流れも確認しておきます。

Postfixにメールを渡す

Postfixにより、SMTPサーバに接続する。

SMTPサーバにおいて、認証を行う。

メール送信完了!

です。

では、前提知識はここまでにしておいて、Postfixの設定からいきます。

Postfixの設定

まず、

/private/etc/postfix/main.cf

を編集します。

ファイルの一番下に、下記を追記しましょう。

myorigin = gmail.com
myhostname = smtp.gmail.com
relayhost = [smtp.gmail.com]:587
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/private/etc/postfix/sasl_passwd
smtp_sasl_security_options = noanonymous
smtp_sasl_mechanism_filter = plain
inet_protocols = all
smtp_use_tls = yes
smtp_tls_security_level = encrypt
tls_random_source = dev:/dev/urandom

smtp_sasl_password_maps のsasl_passwdは任意の名前でおっけいです。

Gmailパスワードの設定

GmailはSMTP認証が必要なサーバです。

なので、認証に必要なパスワードを用意しなければなりません。

以下から、アプリパスワードを設定しましょう。

アプリパスワードの設定

アプリを選択→端末を選択を選び、生成しましょう。

生成したパスワードをsasl_passwdという新規のファイルに書き込みます。

sudo vim /private/etc/postfix/sasl_passwd

より、以下の内容を記述します。

[smtp.gmail.com]:587 メールアドレス@gmail.com:アプリパスワード

メールアドレスの部分は自分のものを、アプリパスワードは先ほど生成したパスワードにしてください。

そして、下記のコマンドを実行します。

sudo postmap /private/etc/postfix/sasl_passwd

sasl_passwdは作成したファイル名を指定してください。
/private/etc/postfix/
に、sasl_passwd.dbが作られていればおっけいです。

ちなみに僕は、ここで、

postmap: fatal: open database /etc/postfix/sasl_passwd.db: Permission denied

という、エラーが出たのですが、

この場合はパーミッションを確認し、設定し直したらエラーが消えました。

メール送信を行う

ここまでできたら、テストでメールを送信してみましょう。

date | mail -s test 自分のアドレス@gmail.com

のコマンドを打ち、gmailの受信フォルダにメールが届いているか確認しましょう。

届いていない場合は、

log stream --predicate  '(process == "smtpd") || (process == "smtp")' --info

で、ログを確認することで解決していきます。

実際起こったエラーまとめ

もし、下記のようなエラーが出た場合は、

530-5.5.1 Authentication Required.

SMTP認証の設定が問題です。

認証パスワードが正しく設定されているかどうか等、一度チェックしてみてください。
もし、下記のようなエラーが出た場合は、

530 5.7.0 Must issue a STARTTLS command first.

Postfixではセキュリティーの確保の為、サブミッションポート(587番)を
使用した送信ではTLSを使用した通信(STARTTLS)が必須に設定されております。

とあるので、今回は一時的にセキュリティーレベルを下げる方法をとりました。

Postfixの設定ファイル

/private/etc/postfixs/master.cf

「submission」に対する設定行の記述を変更します。

パラメータの値を「encrypt」から「may」に変更します。
変更例:
————————————————————–
# -o smtpd_tls_security_level=encrypt

# -o smtpd_tls_security_level=may
————————————————————–

まとめ

以上で、MAMPでGmailを送信する設定は完了です。

Webアプリを作るとなると、こういうサーバー設定の知識も必要になってくることを痛感しました。

苦労はしましたが、色々調べていく中で、メール送信の仕組みも少し理解できたので、結果的によかったのかなと思います。

参考

以下のサイトを参考にさせていただきました。

Postfix 暗号化(STARTTLS)を使用しない送信に関して

mac MAMP から メール送信


スポンサーリンク