#背景
最近、LANで動いているサイトのPHPソースからGoogleメールを送信しなければならない状況になりました。その時に色々調べていく中で、「Fake Sendmail」なるものを使って実現しました。今回は、Fake Sendmailがどんなものなのかを理解した範囲で記事にまとめます。
自分なりの理解なので間違ってることがあるかもしれません。注意してください。また、サーバーに対してある程度知識がある人でないと何言ってるか分からないかもしれません。
#SMTPサーバーとは?
まず、Fake Sendmailを理解する上で、SMTPサーバーの理解は避けられません。SMTPサーバーとは、、、
SMTPには主に以下の2つの役割があります。
①メーラーからメールを受け取る
②宛先のメールアドレスから、相手側のメールサーバーを見つけてメールを転送する
引用先:https://sendgrid.kke.co.jp/blog/?p=11638
とあります。メーラーは、パソコン上にあるメールソフトの事を指します(OutlookとかChromeで開いたGmailとか)
つまり、SMTPサーバーはどっかのパソコンから「メール」を受け取って、そのメールの宛先へ「メール」を転送する役割を持っています。
#GmailのSMTPサーバー
今回はGoogleのSMTPサーバーに接続することを前提としていますが、一般的にSMTPサーバーが受け入れ可能としているポート番号は25・465・587番としています。このうち、465番ではSSLによる通信、587はTSLによる通信を約束しており、それが出来ないメーラーとは通信できません。(25番では暗号化が必要されません)
GoogleのSMTPサーバーでは、25番の接続を禁止しています。かっこにも書いたように、25番の通信は安全でないので、暗号化される465番と587番のみを許可しています。また、このサーバーはドメイン名「smtp.gmail.com」でアクセスできます。
#Fake Sendmailで行っている事
次にFake Sendmailで実際に行っている事を書いていきます。まず、Fake Sendmailを使うときに、「sendmail.ini」をいくつか書き換えましたよね?主に以下の内容を設定していたのです。
- 接続先のアドレス:smtp.gmail.com
- 接続時のポート番号:587(465でもオッケー)
- アカウント情報:ユーザー名(user@gmail.comの形式)とパスワード(user@gmail.comにアクセスする際のパスワード)
この情報からも察せるように、Fake Semdmailでは、「すでに構築されたSMTPサーバー(今回はsmtp.gmail.com)へ接続し、メールを送信する」という事をします。(図の例は465番ポートを使用した場合)
そして、メールを転送するのですが、その際にGmailの「どのアカウントで送信するか」をuser@gmail.comで指定し、パスワードも一緒に送信します。もし、そのアカウント情報が正しければ、SMTPサーバー(smtp.gmail.com)はメール内容を受け取ってくれます。
しかし、アカウント情報が正しくなければ、エラーログを返します。(設定によってログを出すようにする)
正しくsmtp.gmail.comへ転送されたメールは、送信元アカウントuser@gmail.comとして、Gmailがメール内容に書かれている宛先へ、送信されます。これがFake Sendmailが行っている事です。
#おわりに
ポイントとしては「自分でメールサーバーを立てていない」という事です。XamppでFake Sendmailを使っていたのですが、これを理解するまで「Mercury Mailインストールしたけど、Fake Sendmail使う必要あるのかなぁ。。。」とか思っていました。Fake Sendmailを使う事で、LANで構築されるメールサーバーMercury Mailを使わなくてもよくなる、って事ですね。
それでは!