【メール】メール送信時のSMTP(Simple Mail Transfer Protocol)プロトコルの解析&コマンドラインからのメール送付手順

今回はメール送信時の SMTP プロトコルの動作及びコマンドライン(openssl コマンド)からのメール送信手順について解説します。

パケットは WireShark で取得し、コマンドラインよりパケットを解析しています。

 

【Wireshark v2.6.2】インストール方法と使用方法

 

 

SMTP プロトコルとは

SMTP プロトコルとはコマンドに基づくテキスト指向のプロトコルです。

クライアントがコマンドを発行すると、メールサーバーがコマンドを処理して応答(レスポンス)を返します。

この対話がセッションが終了するまで続きます。

更に、各コマンドはシーケンシャルです。

つまり前のコマンドが完了しない限りは、次のコマンドが実行されません。

例えば、宛先メールサーバーからレスポンスが返ってこない前に宛先メールサーバーにデータを送信することはできません。

 

SMTP のコアコマンド

以下、SMTP のコアコマンドです。

 

※コアコマンドではありませんが、SMTP 拡張コマンドに「ehlo」コマンドがあります。

 

 

■SMTP コマンドの終了

SMTP コマンドは、「CR文字(キャリッジリターン)」「LF文字(ラインフィード)」の組み合わせ「CRLF(CR+LF、復帰改行)」で完了します。

コマンドとレスポンスの各行の長さは512文字を超えられません。

 

 

■SMTP コマンドには大文字・小文字の区別はない

SMTP コマンドには大文字・小文字の区別はないので、例えば telnet コマンドで直接メールサーバーにコマンドを送信する際も、大文字でも小文字でも問題はありません。

 

 

 

SMTP コマンド応答コード

応答コードは「3桁」になります。

1桁目、2桁目、3桁目でそれぞれ応答コードの意味を持っています。

 

■1桁目(最上位桁)

 

■2桁目

 

※3桁目にはほとんど意味はないようです。その時その時で0になるのか8になるのか決められるようで、ルールはありません。

 

SMTP コマンドの結果は、通常1桁目で判断します。

2桁目、3桁目はコードの意味を細かく知ることができますが、1桁目で成功や失敗を判断します。

例えば肯定完了状態を表す「250 OK」なら 2 で成功と判断できますが、「50」では判断できません。

 

 

 

SMTP プロトコルのセッション

SMTP プロトコルのセッションは以下のような流れで進みます。

  1. 宛先の決定
  2. 接続の確立
  3. セッションの初期化
  4. 必要なトランザクションを行うための対話
  5. セッションの切断

 

 

 

環境

 

宛先の決定

最初に DNS に問い合わせます。

1735 2018-12-21 15:12:07.292125 15.10.10.84 -> 8.8.8.8      DNS Standard query MX dest-example.co.jp

1736 2018-12-21 15:12:07.294150 15.10.10.84 -> 8.8.8.8      DNS Standard query MX dest-example.co.jp

1741 2018-12-21 15:12:07.300090 15.10.10.84 -> 8.8.8.8      DNS Standard query MX dest-example.co.jp

 

クライアントは、DNS サーバーに問い合わせを行い、メールアドレスの右側の部分の FQDN 用の MX(Mail Exchanger:メール交換機)の情報を要求します。

 

 

DNS サーバーより MX レコード(MX 10 mail2.provider.co.jp MX 10 mail1.provider.co.jp)が返ってきます。

更に返ってきた MX レコードより「mail2.provider.co.jp」を正引きし、レコード(A 2.2.2.2 A 1.1.1.1)が返ってきます。

1797 2018-12-21 15:12:07.381821      8.8.8.8 -> 15.10.10.84 DNS Standard query response MX 10 mail2.provider.co.jp MX 10 mail1.provider.co.jp 
1798 2018-12-21 15:12:07.381867 15.10.10.84 -> 8.8.8.8      DNS Standard query A mail2.provider.co.jp 
1799 2018-12-21 15:12:07.383242      8.8.8.8 -> 15.10.10.84 DNS Standard query response A 2.2.2.2 A 1.1.1.1

 

接続の確立

初めにクライアントは SMTP プロトコル(25/TCP)を利用して、メールサーバーと TCP 接続(シェイクハンド)を生成します。

1817 2018-12-21 15:12:07.430083 15.10.10.84 -> 1.1.1.1 TCP 60324 > 25 [SYN] Seq=0 Win=5840 Len=0 MSS=1460 TSV=549959836 TSER=0 WS=7 
1818 2018-12-21 15:12:07.432896 1.1.1.1 -> 15.10.10.84 TCP 25 > 60324 [SYN, ACK] Seq=0 Ack=1 Win=14480 Len=0 MSS=1460 TSV=2978547982 TSER=549959836 WS=7 
1819 2018-12-21 15:12:07.432916 15.10.10.84 -> 1.1.1.1 TCP 60324 > 25 [ACK] Seq=1 Ack=1 Win=5888 Len=0 TSV=549959839 TSER=2978547982

標準の SMTP ポートは「25/TCP」です。

セッションの開始は、クライアント - サーバー間の接続を確立するための一連の対話からなります。

SMTP 認証が必要な場合もあります。

(サブミッションポート 587/TCP、メール暗号化 465/TCP など)

 

 

セッションの初期化

宛先メールサーバーよりアクセスが来ます。

「220 real-mail-server.co.jp ESMTP Postfix」は宛先メールサーバーが準備完了していることを示しています。

「Postfix」とパッケージ名まで情報が返ってきているのでセキュリティ的には情報を与えすぎと見えますが、そこは各メールサーバーの運用者のポリシー次第になります。

それに対して HELO コマンドで送信元(ソース)のメールサーバーの FQDN(source-smtp-server.com)を返しています。

1823 2018-12-21 15:12:07.488672 1.1.1.1 -> 15.10.10.84 SMTP S: 220 real-mail-server.co.jp ESMTP Postfix

1824 2018-12-21 15:12:07.488686 15.10.10.84 -> 1.1.1.1 TCP 60324 > 25 [ACK] Seq=1 Ack=39 Win=5888 Len=0 TSV=549959895 TSER=2978548037

 

HELO コマンドはクライアントがサーバーに対して使用されます。

EHLO コマンドも HELO コマンドと基本的な機能は同じですが、SMTP の拡張機能を使用したいことをサーバーに伝えています。

 

もし宛先のメールサーバーで SMTP サービスを提供していない場合は、以下のようなメッセージを返すこともあります。

554   No  SMTP  service  available

 

 

■/var/log/maillog の場合

May 4 10:49:39 redhat7 postfix/smtp[6726]: > smtp.gmail.com[64.233.188.109]:587: EHLO xxxxxx.com

smtp.gmail.com より EHLO が送られています。

 

 

 

メールサーバー側が接続の挨拶として、応答コード「220」を返して来たら、それに対して クライアントは自分の身元を知らせるために HELO コマンドで自身(送信元、ソース)のメールサーバーの FQDN(source-smtp-server.com)を返しています。

1825 2018-12-21 15:12:07.488706 15.10.10.84 -> 1.1.1.1 SMTP C: HELO source-smtp-server.com

1829 2018-12-21 15:12:07.491036 1.1.1.1 -> 15.10.10.84 TCP 25 > 60324 [ACK] Seq=39 Ack=25 Win=14592 Len=0 TSV=2978548040 TSER=549959895 
1830 2018-12-21 15:12:07.491272 1.1.1.1 -> 15.10.10.84 SMTP S: 250 real-mail-server.co.jp

 

それに対してメールサーバーが「250」を返して来たら接続確立の対話は完了です。

 

 

必要なトランザクションを行うための対話

以下、メール送信における必要なトランザクションを行なうためのやり取りについて説明します。

 

■MAIL コマンド

相手メールサーバーに対して「MAIL FROM」を返しています。

1831 2018-12-21 15:12:07.491296 15.10.10.84 -> 1.1.1.1 SMTP C: MAIL FROM:<xxx_de9c@source-smtp-server.com>  

1835 2018-12-21 15:12:07.499924 1.1.1.1 -> 15.10.10.84 SMTP S: 250 2.1.0 Ok 

 

MAIL コマンドはエンベロープのメール送信者(メールを送る人)のアドレスを指定します。

MAIL FROM: <FromMailAccount@gmail.com>

 

<FromMailAccount@gmail.com> はメール配送の失敗が起こった時に配送失敗通知の受信者として使用されます。

MAIL コマンドが成功すると、メールサーバーはレスポンスコード 205 を返します。

これはセッションが次に進めることを表わしています。

 

 

 

 

 

■RCPT コマンド

宛先メールサーバーに対して「宛先メールアドレス(test-xxxx@dest-example.co.jp)」を通知しています。

1836 2018-12-21 15:12:07.499952 15.10.10.84 -> 1.1.1.1 SMTP C: RCPT TO:<test-xxxx@dest-example.co.jp>

1845 2018-12-21 15:12:07.541996 1.1.1.1 -> 15.10.10.84 TCP 25 > 60324 [ACK] Seq=77 Ack=127 Win=14592 Len=0 TSV=2978548091 TSER=549959906 
1885 2018-12-21 15:12:07.830471 1.1.1.1 -> 15.10.10.84 SMTP S: 250 2.1.5 Ok 

 

RCPT コマンドはメールの受信者を指定します。

RCPT コマンドは、1 回のトランザクションの中で複数回呼び出すことができます。

サーバーは、複数回のメール受信者をサポートするように要求されています。(メールサーバーの仕様により、100 回までなのか 2,000 回までなのか異なります。)

RCTP TO: <ToMailAccount@gmail.com>

 

 

 

■DATA コマンド

DATA コマンドは、メールのトランザクションにおいてクライアントが「メールメッセージ」を提供するために使用します。

宛先メールサーバーに対してデータを送信しています。

1886 2018-12-21 15:12:07.830502 15.10.10.84 -> 1.1.1.1 SMTP C: DATA 
1916 2018-12-21 15:12:08.034712 1.1.1.1 -> 15.10.10.84 SMTP S: 354 End data with . 
1917 2018-12-21 15:12:08.034807 15.10.10.84 -> 1.1.1.1 SMTP C: DATA fragment, 512 bytes 
1927 2018-12-21 15:12:08.077305 1.1.1.1 -> 15.10.10.84 TCP 25 > 60324 [ACK] Seq=128 Ack=645 Win=15616 Len=0 TSV=2978548626 TSER=549960441 
1928 2018-12-21 15:12:08.077319 15.10.10.84 -> 1.1.1.1 SMTP C: . 
1929 2018-12-21 15:12:08.079661 1.1.1.1 -> 15.10.10.84 TCP 25 > 60324 [ACK] Seq=128 Ack=759 Win=15616 Len=0 TSV=2978548628 TSER=549960483 
1931 2018-12-21 15:12:08.124272 1.1.1.1 -> 15.10.10.84 SMTP S: 250 2.0.0 Ok: queued as CA621840250 

 

 

以下のように「.(ピリオド)」だけの行はメッセージの終了に使用されます。

そのため、途中で「.」だけの行が入ると、そこでメール送信が終了してしまいます。

DATA
354 Go ahead 132sm13052793pfw.87 - gsmtp ← DATA コマンドを送信しサーバー側で問題がなければ「354」を返します。
Subject: テスト

テスト
test
.

 

DATA は 以下のように「SMTP」「ESMTP」で様々な制約が発生します。

 

 

サーバーはメッセージを受信したらクライアントにステータスのレスポンスコード「250 2.0.0 OK」を応答します。

 

 

■DATA コマンドでメールヘッダーを操作する

コマンドラインより以下のようなメールを送信します。

[ec2-user@redhat7 ~]$ openssl s_client -connect smtp.gmail.com:465 -crlf -ign_eof 
CONNECTED(00000003) 
depth=2 OU = GlobalSign Root CA - R2, O = GlobalSign, CN = GlobalSign 
verify return:1 
depth=1 C = US, O = Google Trust Services, CN = Google Internet Authority G3 
verify return:1 
depth=0 C = US, ST = California, L = Mountain View, O = Google LLC, CN = smtp.gmail.com 
verify return:1 
--- 
Certificate chain 
 0 s:/C=US/ST=California/L=Mountain View/O=Google LLC/CN=smtp.gmail.com 
   i:/C=US/O=Google Trust Services/CN=Google Internet Authority G3 
 1 s:/C=US/O=Google Trust Services/CN=Google Internet Authority G3 
   i:/OU=GlobalSign Root CA - R2/O=GlobalSign/CN=GlobalSign 
--- 
Server certificate 
-----BEGIN CERTIFICATE----- 
MIIEijCCA3KgAwIBAgIQVbHi53YGiMfw201KdqA4bzANBgkqhkiG9w0BAQsFADBU 

 

~ 省略 ~

e+CkrkjZUyUmzdNa6qk= 
-----END CERTIFICATE----- 
subject=/C=US/ST=California/L=Mountain View/O=Google LLC/CN=smtp.gmail.com 
issuer=/C=US/O=Google Trust Services/CN=Google Internet Authority G3 
--- 
No client certificate CA names sent 
Peer signing digest: SHA256 
Server Temp Key: ECDH, P-256, 256 bits 
--- 
SSL handshake has read 2994 bytes and written 415 bytes 
--- 
New, TLSv1/SSLv3, Cipher is ECDHE-RSA-AES128-GCM-SHA256 
Server public key is 2048 bit 
Secure Renegotiation IS supported 
Compression: NONE 
Expansion: NONE 
No ALPN negotiated 
SSL-Session: 
    Protocol  : TLSv1.2 
    Cipher    : ECDHE-RSA-AES128-GCM-SHA256 
    Session-ID: 40277F0A6B64A02318A831C168DE828E15814B1BFE759388457A87215257D982 
    Session-ID-ctx: 
    Master-Key: 857287EB7EA0DA3B8CD43240192190E0A32AD25D5C7FD1D458A6B4DA1794695442F0B609F6FA4675A1159B594F3E549F 
    Key-Arg   : None 
    Krb5 Principal: None 
    PSK identity: None 
    PSK identity hint: None 
    TLS session ticket lifetime hint: 100800 (seconds) 
    TLS session ticket: 
    0000 - 00 37 0f f3 39 e3 41 ed-86 c6 d1 24 4e 74 c1 7d   .7..9.A....$Nt.} 
    0010 - 88 b3 8e 2c f0 92 20 72-0f e5 03 2f 93 09 0e 7e   ...,.. r.../...~ 
    0020 - b7 14 9f 92 5a c8 5b 38-12 e4 07 87 fe 2b 87 48   ....Z.[8.....+.H 
    0030 - 5d 9f db 05 86 14 ba 6b-df d7 43 e2 bf 9c dc 44   ]......k..C....D 
    0040 - 9d 5d 95 63 a2 b0 c8 d2-fd 49 7c 13 ca 13 51 4f   .].c.....I|...QO 
    0050 - a7 08 94 f2 3e 2b 20 e2-57 7a 97 61 ac b8 e3 f1   ....>+ .Wz.a.... 
    0060 - da 91 ca ed 8e 98 c2 02-f7 61 af a3 22 9e 9a 7b   .........a.."..{ 
    0070 - ba 92 2d a8 c7 a6 26 e6-39 2a de cf fc 81 46 47   ..-...&.9*....FG 
    0080 - f2 33 47 c6 23 c7 29 a6-69 c9 54 60 97 e0 b8 b5   .3G.#.).i.T`.... 
    0090 - 1f 83 54 60 fe b0 0b fd-0b f5 db 72 f9 7a a0 7c   ..T`.......r.z.| 
    00a0 - 3a e0 74 a2 f0 67 09 5a-dd 3a 12 0e b9 56 11 2d   :.t..g.Z.:...V.- 
    00b0 - a0 0b 37 ff 21 f3 b4 6f-22 ee 9b 2c 8d 10 40 d2   ..7.!..o"..,..@. 
    00c0 - a3 7c 98 43 fa 40 0d 9d-7a 02 df 4f b5 ed 31 18   .|.C.@..z..O..1. 
    00d0 - eb d5 56 71 0d                                    ..Vq. 
 
    Start Time: 1557141558 
    Timeout   : 300 (sec) 
    Verify return code: 0 (ok) 
--- 
220 smtp.gmail.com ESMTP o10sm16545970pfh.168 - gsmtp 
EHLO test.com 
250-smtp.gmail.com at your service, [54.249.15.106] 
250-SIZE 35882577 
250-8BITMIME 
250-AUTH LOGIN PLAIN XOAUTH2 PLAIN-CLIENTTOKEN OAUTHBEARER XOAUTH 
250-ENHANCEDSTATUSCODES 
250-PIPELINING 
250-CHUNKING 
250 SMTPUTF8 
AUTH PLAIN AGFjdGl2ZXZpc0BnbWFpbC5jb20AMTE5MnNhc2FnYXdh 
235 2.7.0 Accepted 
MAIL FROM:<test@test.com> ← わざと存在しないメールアドレスを入力 
250 2.1.0 OK o10sm16545970pfh.168 - gsmtp 
RCPT TO:<ToMailAccount@gmail.com> ← 宛先メールアドレスを入力 
250 2.1.5 OK o10sm16545970pfh.168 - gsmtp 
DATA 
354  Go ahead o10sm16545970pfh.168 - gsmtp 
Date: 4 Oct 2019 09:00:01 -0900 ← わざと間違えた日時を入力  
From: FakeFromAddress@test.com ← わざと存在しないメールアドレスを入力  
To: FakeToAddress@test.com ← わざと存在しないメールアドレスを入力  
Subject:テスト 
Message-ID: <testid1234567890>
X-Mailer: TestMailer v1000  
テスト  
test  
送信  
----  
.  
250 2.0.0 OK  1557141859 o10sm16545970pfh.168 - gsmtp

 

 

■メールメッセージのヘッダー

Delivered-To: ToMailAccount@gmail.com 
Received: by 2002:a54:4d9d:0:0:0:0:0 with SMTP id y29csp765155oix; 
        Mon, 6 May 2019 04:24:20 -0700 (PDT) 
X-Received: by 2002:a63:cf01:: with SMTP id j1mr288813pgg.97.1557141860319; 
        Mon, 06 May 2019 04:24:20 -0700 (PDT) 
ARC-Seal: i=1; a=rsa-sha256; t=1557141860; cv=none; 
        d=google.com; s=arc-20160816; 
        b=EbfOGa5SBy/iN2A1Mo0jvK1mjHJHkIF2IRF0hnPWMm/dxwklU8kHq4D0cGAOHFrdTY 
         x4H2mjwW56pGYe6FnIzS2kpb84yztFbyoomLusN4iWnV1KrjbknFwbM5oHLNPr7ndBGy 
         5jv9sSarHk2A5ZtRmYII099IjzHL2IX5+B0GGQCYekGtfJ+Kkvw6NzffxzEXpylYxtwQ 
         DkUZa2qZIJYacSUdgmmMI5JVud0X4rvOzh7aK9ML/fPuq73rqZVwlWlLuPucIKuXWist 
         vhvOTwDfh7/atbp93wZoefS+MWgNqoVi5L53hpKcf43z+CYnPHahLbegxyWtNMzx9NBE 
         BVMA== 
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; 
        h=subject:to:from:date:message-id:dkim-signature; 
        bh=GD0OQS/BPKi84Dt0Pt7S3myHGfX7Vg29faUbRj10/EE=; 
        b=ekVBFt3uwRL0jSO6wkriTp7zbmS6W6mNoCjt3J7hFC0m9oPzXdLIrOXQwYx1CHNYSW 
         qqoRFFGlKff+3ndyb+KHJsSrRqpxjJMVvtmfAiDlrR+/jIaFTYEjhYAhqhL5CwbUCRR5 
         JN28zqF9B5gG0rZwEULWiCasSogHYqHAWjMY+X7/4ez8SEkkiyQ1QkQ/5jwSLQVzAtdj 
         RotgqS0BWoDE1K0FBhgAgqN7wxho/bk/HlblVQteJlEZA/sAOpfws8fTPMe52QqLSUdx 
         xYzhEXGntrTJB4Xd4g37ErdqLspPuJzLsJ2mBZnoDAveLHJR6tCqRZxFqFolEtiL88V8 
         eUgA== 
ARC-Authentication-Results: i=1; mx.google.com; 
       dkim=pass header.i=@gmail.com header.s=20161025 header.b=PPk7HRgk; 
       spf=pass (google.com: domain of activevis@gmail.com designates 209.85.220.41 as permitted sender) smtp.mailfrom=activevis@gmail.com; 
       dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com 
Return-Path: <activevis@gmail.com> 
Received: from mail-sor-f41.google.com (mail-sor-f41.google.com. [209.85.220.41]) 
        by mx.google.com with SMTPS id j2sor11566956pfb.5.2019.05.06.04.24.20 
        for <ToMailAccount@gmail.com
        (Google Transport Security); 
        Mon, 06 May 2019 04:24:20 -0700 (PDT) 
Received-SPF: pass (google.com: domain of FromMailAccount@gmail.com designates 209.85.220.41 as permitted sender) client-ip=209.85.220.41; ←  実際に送信したメールアドレス(送信元のメールアドレス)が表示されました。
Authentication-Results: mx.google.com; 
       dkim=pass header.i=@gmail.com header.s=20161025 header.b=PPk7HRgk; 
       spf=pass (google.com: domain of FromMailAccount@gmail.com designates 209.85.220.41 as permitted sender) smtp.mailfrom=FromMailAccount@gmail.com; ←  実際に送信したメールアドレス(送信元のメールアドレス)が表示されました。 
       dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com 
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; 
        d=gmail.com; s=20161025; 
        h=message-id:date:from:to:subject; 
        bh=GD0OQS/BPKi84Dt0Pt7S3myHGfX7Vg29faUbRj10/EE=; 
        b=PPk7HRgkczlI+Kjdr1WK9ue5tgpzPmPqQdQ13zdHfodsCZXTeEVs8dTzl4qLks2ppv 
         CQdONjhs3WbGGyn4unxQBEC7KvnyJmbx2Ho0xINAIDqc7d3RpD5/EfAZOnV1tV65oZTG 
         y9MIPIZzWsNRqeMFY7lAgCInxOV+m+bKe2Q5KGPojr8qJjdI9gUMvYVxUGukWQRczcD0 
         7blpsn32yxMjZNf9QjY6IzhgWdk8g02GAWi8TB7nRvDaebG7BGOgZtDheVItjgxYPN0k 
         vTcDFojTveJcxWDcL9aYxuoN5gYtPvdv2IMJTtBaWuTXNTtFCe++ShAVR7lAJGGhlPcS 
         la5Q== 
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; 
        d=1e100.net; s=20161025; 
        h=x-gm-message-state:message-id:date:from:to:subject; 
        bh=GD0OQS/BPKi84Dt0Pt7S3myHGfX7Vg29faUbRj10/EE=; 
        b=bXU114iK8Qu1Egoe9yMpkKN4qACTZt2sVXb0sB89L38bZlPl1WXSXOvTUhYXRKEaSf 
         clBR5/ed2ABY3o/UMEpwigbHFZ3pkqGtJrBoYGK3fyfnvkk/TYJ5cluVFEvCrIfuDOfC 
         6RykLurErpsAJkeZBlyA+cvpgj0FgxDPhG3jWZfQ6/vkFXTZWiwhuAt2wBHUJ7Boq2gd 
         Iom6ODcUhr9L9V4T85Oo1QQDQHAlJ0CQbM4SHGD001nklb4pk8os/A+GOQVPE6wLpiDl 
         KWZksEM2qoxeReoOlGr7sBm7ZDk+qsPPQSYodKCJpTHSm/bMNnQyuVU4v85WzV0ogVT5 
         kF8A== 
X-Gm-Message-State: APjAAAWzSOCUwmHpG+lpE888n6oI5LnztTeV1hKfsqvlG1giE6H7MHdy pRs+HY4z9f6957Fh9SaaT43mwEY3 
X-Google-Smtp-Source: APXvYqx7VPTaaJXytqF9g1Q17GGUvNF7FDg3mAoari50WnYs8KzYTLh3h5WzTwCqzsdyLyj5G36qhw== 
X-Received: by 2002:a62:160b:: with SMTP id 11mr31951994pfw.88.1557141859636; 
        Mon, 06 May 2019 04:24:19 -0700 (PDT)
Return-Path: <FromMailAccount@gmail.com> ←  実際に送信したメールアドレス(送信元のメールアドレス)が表示されました。  
Received: from test.com (xxxxx.com. [54.xxx.xxx.xxx])  ← 存在しない「MAIL FROM:<test@test.com>」のドメインが表示されていますが、実際はグローバル IP から逆引きされたドメインがここに表示されました。
        by smtp.gmail.com with ESMTPSA id o10sm16545970pfh.168.2019.05.06.04.20.48 
        for <ToMailAccount@gmail.com
        (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); 
        Mon, 06 May 2019 04:24:18 -0700 (PDT) 
Message-ID: <5cd01962.1c69fb81.ed048.e037@mx.google.com> 
X-Google-Original-Message-ID: <testid1234567890> 
Date: Mon, 06 May 2019 04:24:18 -0700 (PDT)
X-Google-Original-Date: 4 Oct 2019 09:00:01 -0900  ← わざと間違えた日時がここに表示されました。 
From: FromMailAccount@gmail.com 
X-Google-Original-From: FakeFromAddress@test.com ← 存在しないアドレスが表示されました。  
To: FakeToAddress@test.com ← 存在しないアドレスが表示されました。   
Subject: テスト 
X-Mailer: TestMailer v1000 
 
テスト 
test 
送信 
----

 

 

 

セッションの終了

データを送信したので SMTP レベルで終了処理をしています。

1932 2018-12-21 15:12:08.124307 15.10.10.84 -> 1.1.1.1 SMTP C: QUIT 
1933 2018-12-21 15:12:08.126596 1.1.1.1 -> 15.10.10.84 TCP 25 > 60324 [ACK] Seq=165 Ack=765 Win=15616 Len=0 TSV=2978548675 TSER=549960530 
1934 2018-12-21 15:12:08.126901 1.1.1.1 -> 15.10.10.84 SMTP S: 221 2.0.0 Bye 

 

 

 

最後に宛先メールサーバーと TCP レベルで終了処理をしています。

1935 2018-12-21 15:12:08.126911 1.1.1.1 -> 15.10.10.84 TCP 25 > 60324 [FIN, ACK] Seq=180 Ack=765 Win=15616 Len=0 TSV=2978548676 TSER=549960530 
1936 2018-12-21 15:12:08.126929 15.10.10.84 -> 1.1.1.1 TCP 60324 > 25 [FIN, ACK] Seq=765 Ack=181 Win=5888 Len=0 TSV=549960533 TSER=2978548676 
1937 2018-12-21 15:12:08.129256 1.1.1.1 -> 15.10.10.84 TCP 25 > 60324 [ACK] Seq=181 Ack=766 Win=15616 Len=0 TSV=2978548678 TSER=549960533

 

 

 

コマンドラインから Gmail の SMTP サーバー(smtp.gmail.com)を経由してメールを送信する場合

telnet コマンドでも openssl コマンドでも動作確認をすることができます。

※実際にメールを送信する動作確認手順の場合は、openssl コマンドを使用する必要があります。

 

openssl s_client コマンドで確認する方法

openssl コマンドで動作確認する場合です。

 

■TCP/465番ポートへの接続の場合

[ec2-user@redhat7 ~]$ openssl s_client -connect smtp.gmail.com:465 
CONNECTED(00000003) ← CONNECTED(00000003) になっていることを確認します。 
depth=2 OU = GlobalSign Root CA - R2, O = GlobalSign, CN = GlobalSign 
verify return:1 
depth=1 C = US, O = Google Trust Services, CN = Google Internet Authority G3 
verify return:1 
depth=0 C = US, ST = California, L = Mountain View, O = Google LLC, CN = smtp.gmail.com 
verify return:1 
--- 
Certificate chain 
 0 s:/C=US/ST=California/L=Mountain View/O=Google LLC/CN=smtp.gmail.com 
   i:/C=US/O=Google Trust Services/CN=Google Internet Authority G3 
 1 s:/C=US/O=Google Trust Services/CN=Google Internet Authority G3 
   i:/OU=GlobalSign Root CA - R2/O=GlobalSign/CN=GlobalSign 
--- 
Server certificate 
-----BEGIN CERTIFICATE----- 
MIIEijCCA3KgAwIBAgIQVbHi53YGiMfw201KdqA4bzANBgkqhkiG9w0BAQsFADBU 

 

~ 省略 ~

e+CkrkjZUyUmzdNa6qk= 
-----END CERTIFICATE----- 
subject=/C=US/ST=California/L=Mountain View/O=Google LLC/CN=smtp.gmail.com 
issuer=/C=US/O=Google Trust Services/CN=Google Internet Authority G3 
--- 
No client certificate CA names sent 
Peer signing digest: SHA256 
Server Temp Key: ECDH, P-256, 256 bits 
--- 
SSL handshake has read 2994 bytes and written 415 bytes 
--- 
New, TLSv1/SSLv3, Cipher is ECDHE-RSA-AES128-GCM-SHA256 
Server public key is 2048 bit 
Secure Renegotiation IS supported 
Compression: NONE 
Expansion: NONE 
No ALPN negotiated 
SSL-Session: 
    Protocol  : TLSv1.2 
    Cipher    : ECDHE-RSA-AES128-GCM-SHA256 
    Session-ID: 1B6E1776701F3E7A401C8951C43E838F886D11B83CBBE4E0F6AC21895AA36A38 
    Session-ID-ctx: 
    Master-Key: 104B56D1B72636E4323DCCBD35625DD671E134D45594D21E22D3EF335E80B3AA6B943906854CA163944D650E526DAC49 
    Key-Arg   : None 
    Krb5 Principal: None 
    PSK identity: None 
    PSK identity hint: None 
    TLS session ticket lifetime hint: 100800 (seconds) 
    TLS session ticket: 
    0000 - 00 37 0f f3 39 e3 41 ed-86 c6 d1 24 4e 74 c1 7d   .7..9.A....$Nt.} 
    0010 - 72 89 7b 59 47 90 ab 8c-aa cf 10 3a d1 0c c8 fc   r.{YG......:.... 
    0020 - cb 10 04 ae 34 a7 7e 09-b6 2e 78 4e 38 cf 7e 26   ....4.~...xN8.~& 
    0030 - 74 6c 0b 9b 39 52 01 21-86 d7 1b f0 0b 81 0d d1   tl..9R.!........ 
    0040 - c7 4f 8a d0 1b 4e 82 ac-3c 40 b6 1b 03 95 e2 5e   .O...N..<@.....^ 
    0050 - fa 4e 71 b3 81 84 82 d8-5d 0b e8 a5 ee 16 59 47   .Nq.....].....YG 
    0060 - 2a 41 cd 42 68 6f ff ab-e1 d6 91 f9 87 07 a0 26   *A.Bho.........& 
    0070 - 14 ea cd 98 16 4e 43 6e-e0 bb 9a a6 95 49 f8 a7   .....NCn.....I.. 
    0080 - 23 81 43 72 04 73 aa b6-d2 6e 53 b1 7c 04 f4 bb   #.Cr.s...nS.|... 
    0090 - 72 43 4c 33 6d 51 a5 74-4e b0 c0 5f 30 2e 30 29   rCL3mQ.tN.._0.0) 
    00a0 - 4e 74 54 6f dc c2 b6 cf-fe ff 68 bd 4d 28 6a 0f   NtTo......h.M(j. 
    00b0 - 2a fa f8 5c 3a d2 6b 44-0b 6f 15 44 21 59 04 b1   *..\:.kD.o.D!Y.. 
    00c0 - 7f ea cf 5c 68 73 2f ad-34 56 8f 07 63 f6 89 fb   ...\hs/.4V..c... 
    00d0 - 21 24 be 5e 4f                                    !$.^O 
 
    Start Time: 1557128151 
    Timeout   : 300 (sec) 
    Verify return code: 0 (ok) 
--- 
220 smtp.gmail.com ESMTP n18sm20389806pfi.48 - gsmtp

 

※CONNECTED(00000003) になっていることを確認します。

 

 

 

■TCP/587番ポートへの接続の場合

[ec2-user@redhat7 ~]$ openssl s_client -connect smtp.gmail.com:587 
CONNECTED(00000003) ← CONNECTED(00000003) になっていることを確認します。
140227128567696:error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol:s23_clnt.c:794: 
--- 
no peer certificate available 
--- 
No client certificate CA names sent 
--- 
SSL handshake has read 7 bytes and written 289 bytes 
--- 
New, (NONE), Cipher is (NONE) 
Secure Renegotiation IS NOT supported 
Compression: NONE 
Expansion: NONE 
No ALPN negotiated 
SSL-Session: 
    Protocol  : TLSv1.2 
    Cipher    : 0000 
    Session-ID: 
    Session-ID-ctx: 
    Master-Key: 
    Key-Arg   : None 
    Krb5 Principal: None 
    PSK identity: None 
    PSK identity hint: None 
    Start Time: 1557128266 
    Timeout   : 300 (sec) 
    Verify return code: 0 (ok) 
--- 
[ec2-user@redhat7 ~]$

 

※CONNECTED(00000003) になっていることを確認します。

 

 

 

telnet で Gmail の smtp サーバー(smtp.gmail.com)の TCP/587 にアクセスする場合

telnet コマンドは「STARTTLS」をサポートしていないため、以下のように「FConnection closed by foreign host. 」のメッセージが出力されます。

[ec2-user@redhat7 ~]$ telnet smtp.gmail.com 587 ← telnet コマンドで 587 に接続します。 
Trying 74.125.23.109...  
Connected to smtp.gmail.com. 
Escape character is '^]'. 
220 smtp.gmail.com ESMTP i27sm10305113pfk.162 - gsmtp 
EHLO smtp.gmail.com 
250-smtp.gmail.com at your service, [54.249.15.106] 
250-SIZE 35882577 
250-8BITMIME 
250-STARTTLS 
250-ENHANCEDSTATUSCODES 
250-PIPELINING 
250-CHUNKING 
250 SMTPUTF8 
STARTTLS 
220 2.0.0 Ready to start TLS 
EHLO smtp.gmail.com 
FConnection closed by foreign host. 
[ec2-user@redhat7 ~]$

 

 

 

openssl コマンドで Gmail 経由(smtp.gmail.com 経由)でメールを送信する手順

実際にメールを送信する動作確認手順の場合は、telnet コマンドではなく openssl コマンドを使用する必要があります。

 

■最初にアカウントとパスワードをエンコードする

[ec2-user@redhat7 ~]$ perl -MMIME::Base64 -e 'print encode_base64("\000FromMailAccont\@gmail.com\000Password01234")'
AGFjdGl2ZXZpc0BnbWFpbC5jb20AMTE5MnNhc2FnYXdh
[ec2-user@redhat7 ~]$

 

 

 

■openssl コマンドでメールを送信する手順

[ec2-user@redhat7 ~]$ openssl s_client -connect smtp.gmail.com:465 -crlf -ign_eof 
CONNECTED(00000003) 
depth=2 OU = GlobalSign Root CA - R2, O = GlobalSign, CN = GlobalSign 
verify return:1 
depth=1 C = US, O = Google Trust Services, CN = Google Internet Authority G3 
verify return:1 
depth=0 C = US, ST = California, L = Mountain View, O = Google LLC, CN = smtp.gmail.com 
verify return:1 
--- 
Certificate chain 
 0 s:/C=US/ST=California/L=Mountain View/O=Google LLC/CN=smtp.gmail.com 
   i:/C=US/O=Google Trust Services/CN=Google Internet Authority G3 
 1 s:/C=US/O=Google Trust Services/CN=Google Internet Authority G3 
   i:/OU=GlobalSign Root CA - R2/O=GlobalSign/CN=GlobalSign 
--- 
Server certificate 
-----BEGIN CERTIFICATE----- 
MIIEijCCA3KgAwIBAgIQVbHi53YGiMfw201KdqA4bzANBgkqhkiG9w0BAQsFADBU 

 

~ 省略 ~

e+CkrkjZUyUmzdNa6qk= 
-----END CERTIFICATE----- 
subject=/C=US/ST=California/L=Mountain View/O=Google LLC/CN=smtp.gmail.com 
issuer=/C=US/O=Google Trust Services/CN=Google Internet Authority G3 
--- 
No client certificate CA names sent 
Peer signing digest: SHA256 
Server Temp Key: ECDH, P-256, 256 bits 
--- 
SSL handshake has read 2994 bytes and written 415 bytes 
--- 
New, TLSv1/SSLv3, Cipher is ECDHE-RSA-AES128-GCM-SHA256 
Server public key is 2048 bit 
Secure Renegotiation IS supported 
Compression: NONE 
Expansion: NONE 
No ALPN negotiated 
SSL-Session: 
    Protocol  : TLSv1.2 
    Cipher    : ECDHE-RSA-AES128-GCM-SHA256 
    Session-ID: E05197CD860F5FB30E767F3F351DEFA66A55EC4AAE4D4A69B58D2937B7B31F2D 
    Session-ID-ctx: 
    Master-Key: BE97FC399B48D88723F1A17BC3BE4B1677252B4151038EDB9AA564F26493A9529EFFBEFAE0BE61EB946191B352AF75E1 
    Key-Arg   : None 
    Krb5 Principal: None 
    PSK identity: None 
    PSK identity hint: None 
    TLS session ticket lifetime hint: 100800 (seconds) 
    TLS session ticket: 
    0000 - 00 37 0f f3 39 e3 41 ed-86 c6 d1 24 4e 74 c1 7d   .7..9.A....$Nt.} 
    0010 - 44 75 99 3e a2 8a ec 6a-e6 bc 0d 84 50 aa ae a0   Du.>...j....P... 
    0020 - ae 56 f9 d7 c2 a8 ff fa-09 7e bd 51 4e 03 4d 7f   .V.......~.QN.M. 
    0030 - e7 27 62 38 ae 17 ad c4-9e d5 16 ad e1 30 f8 ca   .'b8.........0.. 
    0040 - 43 9f 70 7a c0 37 34 28-c4 2a ed 64 39 b7 4a 10   C.pz.74(.*.d9.J. 
    0050 - c7 6c 24 e7 28 4a e6 1e-49 42 75 43 6f 9c 69 f4   .l$.(J..IBuCo.i. 
    0060 - fd a1 07 ee b5 e3 32 6e-f9 00 4e f0 01 aa 42 ca   ......2n..N...B. 
    0070 - 26 66 0f 36 94 94 ad d5-0a 57 e1 cc 88 66 f1 5d   &f.6.....W...f.] 
    0080 - 14 a2 f4 32 62 2b 65 ef-0c 6c 92 8a 36 a1 5a 82   ...2b+e..l..6.Z. 
    0090 - 84 27 e6 d7 9e 54 72 46-c3 8e 6b 1b 95 a6 88 a5   .'...TrF..k..... 
    00a0 - f3 5d fb f0 ff bf c9 96-67 8a fe a9 82 5f 11 e2   .]......g...._.. 
    00b0 - 0d 1d 2e 50 9a cd 8e 93-b0 64 d3 b5 03 7f bb da   ...P.....d...... 
    00c0 - 4b 25 dd ef 92 ab ef ba-59 7a e5 a5 37 20 f9 75   K%......Yz..7 .u 
    00d0 - 3b 7e 79 35 8f                                    ;~y5. 
 
    Start Time: 1557129846 
    Timeout   : 300 (sec) 
    Verify return code: 0 (ok) 
--- 
220 smtp.gmail.com ESMTP 132sm13052793pfw.87 - gsmtp 
EHLO localhost ← 入力します。 
250-smtp.gmail.com at your service, [54.249.15.106] 
250-SIZE 35882577 
250-8BITMIME 
250-AUTH LOGIN PLAIN XOAUTH2 PLAIN-CLIENTTOKEN OAUTHBEARER XOAUTH 
250-ENHANCEDSTATUSCODES 
250-PIPELINING 
250-CHUNKING 
250 SMTPUTF8 
AUTH PLAIN AGFjdGl2ZXZpc0BnbWFpbC5jb20AMTE5MnNhc2FnYXdh ← 入力します。  
235 2.7.0 Accepted 
MAIL FROM: <FromMailAccount@gmail.com> ← 送信元メールアドレスを入力します。  
250 2.1.0 OK 132sm13052793pfw.87 - gsmtp 
rcpt to: <ToMailAccount@gmail.com> ← 送信先メールアドレスを入力します。  
250 2.1.5 OK 132sm13052793pfw.87 - gsmtp 
DATA ← 入力します。  
354  Go ahead 132sm13052793pfw.87 - gsmtp 
Subject: テスト ← メールの件名を入力します。  
 
テスト ← 本文を入力します。  
test ← 本文を入力します。  
. ← メール本番が完了したらピリオド「.」を入力します。  
250 2.0.0 OK  1557129949 132sm13052793pfw.87 - gsmtp 
451 4.4.2 Timeout - closing connection. 132sm13052793pfw.87 - gsmtp 
read:errno=0 
[ec2-user@redhat7 ~]$

 

 

 

■メールメッセージのソース

上記のコマンドを実行した結果、受信したメールのソースを以下に記載します。

Delivered-To: ToMailAccount@gmail.com 
Received: by 2002:a54:4d9d:0:0:0:0:0 with SMTP id y29csp609924oix; 
        Mon, 6 May 2019 01:05:50 -0700 (PDT) 
X-Received: by 2002:a17:902:7d8a:: with SMTP id a10mr30442821plm.167.1557129949955; 
        Mon, 06 May 2019 01:05:49 -0700 (PDT) 
ARC-Seal: i=1; a=rsa-sha256; t=1557129949; cv=none; 
        d=google.com; s=arc-20160816; 
        b=uGRXW+yQqCtzS+IucmjlpiQ6JbP2hPnxYWQl0zg5GHumMGLmXp97MivgYYebfRYZwt 
         N+fwcpOFM+xZmvX+M3qDxGqdaXnHFjEK8U3qCm3pKzxw+oeVsT0/BUsKb1iAg7XjpATs 
         DDm/8fiBEbaIaZ4ICdRDBe8wic73+Yx4Vk9e0W7g82izSK87B2y5a5hBAPs8xBsJs4Mn 
         E7Zx7tSudWekP+lcpzZXDTvTzSgDPTgNAKQMXo0V00HeSmnDa3cUnfwHGZZ8v6C2qRvl 
         PjhLsQoD9LwPfgyQBhKI2cHSwCY32dex9uyYtjWzAnmErY6fUtz7kSAajOfSCZ4IH0B2 
         VgYA== 
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; 
        h=subject:from:date:message-id:dkim-signature; 
        bh=Wj5cfXTWjGZ4RSHV6u361EkZqdCmvkcOUft/cQl22Dg=; 
        b=gZRXrWkX7IoSXGglhzId30hpZ928tgsOsVqXA8lejPPv6fJQvy5atrpx9d3qB/QoCr 
         sHY35U4bqoKBGTV/hmNj359J1Hsa7vR1Y4qostta6pQoBHF1Ma+8foYcwmeWFu9TWb84 
         ZiBMexNKZrI029JJ2n8wL1LgqXo+qOOqvA5c4aHuK542Aq6L4x0N4TJ4U+W5DAwDrg7Z 
         6V362Tmg6vA4k/jMyVUtUeBbm1XGgMcEVf1FWO2IcJHM+ANjF0UMkqPn5ac3/s329twT 
         HcrMXJ9Eqz4ctA/OUsEcoUYb3GC3+8Iqzq/0SmKCRZhTwGbw960aAre9Nc9ZaIV+hs4W 
         ytLQ== 
ARC-Authentication-Results: i=1; mx.google.com; 
       dkim=pass header.i=@gmail.com header.s=20161025 header.b=KfUe1IgG; 
       spf=pass (google.com: domain of FromMailAccount@gmail.com designates 209.85.220.41 as permitted sender) smtp.mailfrom=FromMailAccount@gmail.com; 
       dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com 
Return-Path: <FromMailAccount@gmail.com
Received: from mail-sor-f41.google.com (mail-sor-f41.google.com. [209.85.220.41]) 
        by mx.google.com with SMTPS id x6sor9952465pgp.20.2019.05.06.01.05.49 
        for <FromMailAccount@gmail.com
        (Google Transport Security); 
        Mon, 06 May 2019 01:05:49 -0700 (PDT) 
Received-SPF: pass (google.com: domain of FromMailAccount@gmail.com designates 209.85.220.41 as permitted sender) client-ip=209.85.220.41; 
Authentication-Results: mx.google.com; 
       dkim=pass header.i=@gmail.com header.s=20161025 header.b=KfUe1IgG; 
       spf=pass (google.com: domain of FromMailAccount@gmail.com designates 209.85.220.41 as permitted sender) smtp.mailfrom=FromMailAccount@gmail.com; 
       dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com 
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; 
        d=gmail.com; s=20161025; 
        h=message-id:date:from:subject; 
        bh=Wj5cfXTWjGZ4RSHV6u361EkZqdCmvkcOUft/cQl22Dg=; 
        b=KfUe1IgG9m5+3GIVn/e9LLLLUGasccqtLMbAdjSyetN/sCjw8Dorg12VgRXCT1BrZ8 
         KFTQ4JR5Z6ki1ibb95YAKkgOONkuNGiC4XKdToM0Ot7mDNsLMpRWNY5G+gDb/dtj/oYZ 
         r7DHzSxO5B9BMluaIQzmM0iMWb+m5abi59IVA1E1vqCVPDDDpYeX8sCudZWdh/ru8EMr 
         5wtYVuntkBdtAITFqzkgoQGQio5cqwxMnitS0Oi/Ly52qjZ5/muwempGIhH3BYkqPiC6 
         t64xmm5Z6AmBf/OHpraPeGZKOvBluEDfm6aGn7PZbhm/WUSaj+wFUh5YRUEgwtkS7kem 
         MMFg== 
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; 
        d=1e100.net; s=20161025; 
        h=x-gm-message-state:message-id:date:from:subject; 
        bh=Wj5cfXTWjGZ4RSHV6u361EkZqdCmvkcOUft/cQl22Dg=; 
        b=Wtxvx3tEPRMHqxRJ9p4mlTFmmOJNOI9vHXGi3F+zd3f9fXZXLfHrpll4UHEVk8fxGM 
         vrfZFgEyDETBIkUwG0MZEb3KciX8BTfq31sHTM5EZGQ4foDeO68Py+oqw22gkY6j4Sv5 
         cDZLMaPAVErSFUcHWbcwfphPbqLQvPBoLEsIYuxzi5cKR2ddVgWYzDfqyKFdjfPnPAZe 
         uHHcvEbEXYEXUQwQCjXW8WeLPRi96SIsfUabuqaeglIDLizB8VhtvbxBtvDTZ5P00fOf 
         rzHNvYDoTFWZut/gH+JDyw2TEMwSnuO0KPwreFBOMm5gZRErICmJu8mofVHOZcADNQH3 
         RyUA== 
X-Gm-Message-State: APjAAAUr0FzxWTnoMMJtzDXECDclXd+KTmRhbObYfu7QHpaj1jPTzM3Z JSH5QjzB3xAu5TKRqBfLSU8Q4dQJ 
X-Google-Smtp-Source: APXvYqwqluvWqnzfC7pz6DyF8oMct3nHbub9yThqE5HzjohTixpa8wxmiyAPCdzqjXKhvBK/w+a0zQ== 
X-Received: by 2002:a63:3e47:: with SMTP id l68mr30202382pga.85.1557129949114; 
        Mon, 06 May 2019 01:05:49 -0700 (PDT) 
Return-Path: <FromMailAccount@gmail.com> 
Received: from localhost (xxxxxxxxxx.com. [54.xxx.xxx.xxx]) ← 「localhost」は、「EH

LO localhost」コマンドを実行した結果、表示されたホスト名です。ここを詐称しても、グローバル IP から逆引きされたドメイン名(FQDN 名)が表示されます。 
        by smtp.gmail.com with ESMTPSA id 132sm13052793pfw.87.2019.05.06.01.04.57 
        for <ToMailAccount@gmail.com
        (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); 
        Mon, 06 May 2019 01:05:48 -0700 (PDT) 
Message-ID: <5ccfeadc.1c69fb81.629e8.7507@mx.google.com> 
Date: Mon, 06 May 2019 01:05:48 -0700 (PDT) 
From: FromMailAccount@gmail.com 
Subject: テスト 
 
テスト 
test

 

 

 

 

参考サイト

Gmail経由で簡単なSMTPコマンドを使用してメールを送信するには?

 

 

参照図書

合計約530ページと大書ですが、中身は充実しています。

メールサーバー周りを開発するエンジニアにとっては必須の技術書です。

電子メールプロトコル詳説―インターネット電子メールアーキテクチャからIETF標準プロトコル群の詳細

 

 

 

 

Posted by 100%レンタルサーバーを使いこなすサイト管理人

コメントを残す

メールアドレスが公開されることはありません。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください