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

php-fpmトラブル(nginxが競合?)

php-fpmが急に停止になるトラブルがあったので、ちょっとメモ。 php-fpmを再起動しようとしても下記のようなエラーが・・・

p …

no image

PHPのheroku(ヘロク)へのデプロイ

有名なPaasのサービスであるherokuをちょっといじったのでその時のメモなどを。 Contents1 アカウント開設2 Heroku | Cloud Application Platform3 デ …

no image

インメモリデータベース redis

インメモリデータベースのredis(レディース)について。 キャッシュとして以前はmemcachedを使っていましたが、いろいろ多機能ということでredisをちょっと触ってみようかと。 Content …

no image

jenkinsでのSSH鍵認証&herokuからのソース取得

jenkinsでGitからソースを取得するときに鍵認証をかけている場合はそれ用の設定が必要になります。 基本的な考え方ですが、userがjenkinsだったときに、ssh鍵認証やherokuでどのよう …

no image

Linuxでのパス

以前、composerを入れるときに、こちらの記事を書いたのですが、自分が使っているVPSではこの方法で入りませんでした。 調べるとみるとPATHが/usr/local/binではなく/usr/bin …