php-fpmを変えてから大分動きがよくなりましたね・・サーバーのレスポンスがはやい・・
今回から数回に分けてメール送信の仕組みについて学習していこうと思います。
インフラ系の知識がやっぱり怪しいもんで・・・
Contents
メール送信のしくみ
パソコンでメールを送るとまずはメールサーバー(メールを格納しておくサーバー)に置かれることが一般的です。宛先にいきなり届くのではなくここにプールしておきます。
メール送信時に使われるプロトコルをSMTPとよび、メールをプールしておくサーバーをSMTPサーバーと呼びます。使用されるポート番号は587が一般的です。
SMTPサーバーから別のメールサーバーへ
SMTPサーバーに格納されたメールは別の配送先のメールサーバーへ運ばれます。(ちなみに配送先がどこかを知るためにはDNSサーバーにアクセスする必要があります。)このメール配送に使われるプロトコルもSMTPでポート番号は25になります。
メール受信のしくみ
メールを受信するさいのプロトコロルはPOPやIMAPが一般的です。前者は一般のメールクライアントなどでよく使われ、後者はGmailなどのクラウド型のサービスが該当します。POPのポート番号は110が一般的です。
エラー対策
一般的なメールの送受信では以下のようなトラブルが起こることが一般的です。
配送エラー
- 配送先メールサーバーが応答しない
- 宛先のメールアドレスが存在しない
- 宛先のメールボックスが満杯で受け付けられない
上記のような場合には、元のメール送信者に送り返されます。
不正中継防止
メールサーバーはどこから送られた誰あてのメールでも中継するわけではありません。信頼できないクライアントから外部の宛先メールを受け付けて送信するとスパムの温床になります。そのようなことに備え、一般的には下記のような対策をすることが一般的です。
- メール送信サーバーは信頼できるクライアントの接続であれば受け付ける
- メール受信サーバーは自分が管理しているドメインあてのメールであれば受け付ける
※信頼できるの定義は今後説明予定。
内部の処理
メールの送信受信などはほとんどの方がソフトから行うと思いますが、コンソールから対話形式で処理を行う場合以下のような流れになります。
SMTP
- 接続
- 接続確認 EHLO ホスト名
- 送信者アドレス指定 MAIL FROM:メールアドレス
- 受信者アドレス指定 RECP TO:メールアドレス
- メッセージ送信 DATA+テキスト入力
- リセット RSET
- 終了 QUIT
POP
- 接続
- 認証 USER ユーザー名 PASS パスワード
- メッセージサイズ確認 LIST
- メッセージUID(ユニーク番号) UIDL番号
- メッセージ取り出し RETR メッセージ番号
- メッセージ一部取り出し TOP
- 削除 DELE
- リセット RSET
- 終了 QUIT
参考資料
SoftwareDesign 2015年9月号
SMTP/POP -メールのしくみ-
POP3でのメール受信の仕組み