skillup

技術ブログ

サーバー・ネットワーク

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

投稿日:

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月号
http://www.itbook.info/network/smtp.html
http://www.itbook.info/network/pop.html

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

執筆者:


comment

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

関連記事

no image

nginxの設定ファイルの書き方に関して

Contents1 設定ファイルの構成と基本用語1.1 ディレクティブ1.2 コンテキスト2 基本的なディレクティブの遷移2.1 serverディレクティブ2.2 locationディレクティブ2.3 …

no image

Gitのブランチについて

ちょっといろいろと触っているGitに関して。 前回は作業ディレクトリ、インデックス、コミットについて説明したのですが、今回はブランチについて行います。 Contents1 ブランチとは?2 ブランチに …

no image

vagrantでの静的ファイルのキャッシュがクリアされない

タイトルのまんまですが、vagrantでapacheを使ってまして、静的ファイルのキャッシュがクリアされないと言う問題が発生しました。 vagrantは結構長い間使ってましたが、今まで素のhtmlを書 …

no image

pythonのアップグレードに関して

pythonのアップグレードに関して。 python2.6だとpipがインストールされていないのですが、入れようとしてハマったのでメモ。 一般的なインストール方法ですが、下記のようになります。 [cr …

no image

カレントディレクトリ以下のすべてのCR+LFをLFに

windows環境からファイルをアップしていると文字コードがバラバラだったりすることが多々あります。 まあ何がめんどくさいかというと差分がチェックできない。これが最悪です。 gitのdiffコマンドの …