skillup

技術ブログ

サーバー・ネットワーク

メール送信に関して その1 おおまかな送受信の仕組み

投稿日:2016年4月14日 更新日:

php-fpmを変えてから大分動きがよくなりましたね・・サーバーのレスポンスがはやい・・

今回から数回に分けてメール送信の仕組みについて学習していこうと思います。

インフラ系の知識がやっぱり怪しいもんで・・・

メール送信のしくみ

パソコンでメールを送るとまずはメールサーバー(メールを格納しておくサーバー)に置かれることが一般的です。宛先にいきなり届くのではなくここにプールしておきます。

メール送信時に使われるプロトコルをSMTPとよび、メールをプールしておくサーバーをSMTPサーバーと呼びます。使用されるポート番号は587が一般的です。

SMTPサーバーから別のメールサーバーへ

SMTPサーバーに格納されたメールは別の配送先のメールサーバーへ運ばれます。(ちなみに配送先がどこかを知るためにはDNSサーバーにアクセスする必要があります。)このメール配送に使われるプロトコルもSMTPでポート番号は25になります。

メール受信のしくみ

メールを受信するさいのプロトコロルはPOPやIMAPが一般的です。前者は一般のメールクライアントなどでよく使われ、後者はGmailなどのクラウド型のサービスが該当します。POPのポート番号は110が一般的です。

エラー対策

一般的なメールの送受信では以下のようなトラブルが起こることが一般的です。

配送エラー

  • 配送先メールサーバーが応答しない
  • 宛先のメールアドレスが存在しない
  • 宛先のメールボックスが満杯で受け付けられない

上記のような場合には、元のメール送信者に送り返されます。

不正中継防止

メールサーバーはどこから送られた誰あてのメールでも中継するわけではありません。信頼できないクライアントから外部の宛先メールを受け付けて送信するとスパムの温床になります。そのようなことに備え、一般的には下記のような対策をすることが一般的です。

  • メール送信サーバーは信頼できるクライアントの接続であれば受け付ける
  • メール受信サーバーは自分が管理しているドメインあてのメールであれば受け付ける

※信頼できるの定義は今後説明予定。

内部の処理

メールの送信受信などはほとんどの方がソフトから行うと思いますが、コンソールから対話形式で処理を行う場合以下のような流れになります。

SMTP

  1. 接続
  2. 接続確認 EHLO ホスト名
  3. 送信者アドレス指定 MAIL FROM:メールアドレス
  4. 受信者アドレス指定 RECP TO:メールアドレス
  5. メッセージ送信 DATA+テキスト入力
  6. リセット RSET
  7. 終了 QUIT

POP

  1. 接続
  2. 認証 USER ユーザー名 PASS パスワード
  3. メッセージサイズ確認 LIST
  4. メッセージUID(ユニーク番号) UIDL番号
  5. メッセージ取り出し RETR メッセージ番号
  6. メッセージ一部取り出し TOP
  7. 削除 DELE
  8. リセット RSET
  9. 終了 QUIT

参考資料

SoftwareDesign 2015年9月号
SMTP/POP -メールのしくみ-
POP3でのメール受信の仕組み

-サーバー・ネットワーク
-

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連記事

no image

apacheで複数インスタンスの起動

前回のphpenvがらみの引き続きですが、php5.6と7を共存させ、なおかつWEBアプリで動かす方法を調べたところapacheの複数インスタンスがであれば可能だとのこと。 早速調べなんとかできました …

no image

ログ抽出コマンド特集 その2 シェルスクリプトの算術計算、配列とループ

前回の続きですが、ログを収集し、分布(80%台が~%、70%台が~%)を出したいとします。 Contents1 ロジック2 ソース3 気づいたこと4 参考リンク ロジック ロジックは以下のような流れに …

no image

vimの小ネタ(主にテキスト置換系に関して)

前回に引き続き、またまたvimの小ネタなど Contents1 マクロ2 単純な置換3 改行系の置換4 一括置換 マクロ エディタ上である動作を記録させておきたい場合、q+任意の文字(例えばa)+任意 …

no image

phpenv5.3+php-fpm

レガシーなプロジェクトではいまだにPHP5.3なんかを使うケースがあったりします。 これがCentOS6だったらyumでphp5.3とかだったらいいんですが、サーバーはCentOS7だったりするとなか …

no image

メニュー系のCSS

よく迷うのでこれを機にまとめておこうかと。 Contents1 通常時のメニュー2 携帯(いわゆる縦のメニュー)3 ホバー時の画像選択4 小ネタ 選択されているときのメニュー 通常時のメニュー htm …