今回はメール送信時の SMTP プロトコルの動作及びコマンドライン(openssl コマンド)からのメール送信手順について解説します。
パケットは WireShark で取得し、コマンドラインよりパケットを解析しています。
【Wireshark v2.6.2】インストール方法と使用方法
SMTP プロトコルとは
SMTP プロトコルとはコマンドに基づくテキスト指向のプロトコルです。
クライアントがコマンドを発行すると、メールサーバーがコマンドを処理して応答(レスポンス)を返します。
この対話がセッションが終了するまで続きます。
更に、各コマンドはシーケンシャルです。
つまり前のコマンドが完了しない限りは、次のコマンドが実行されません。
例えば、宛先メールサーバーからレスポンスが返ってこない前に宛先メールサーバーにデータを送信することはできません。
SMTP のコアコマンド
以下、SMTP のコアコマンドです。
help ← SMTP コマンドのヘルプを表示します。
helo ← クライアントからメールサーバーへの挨拶をします。
mail ← メールメッセージの送信者(送信元)を示します。
rcpt ← メールメッセージの受信者(宛先)を示します。
data ← メールメッセージを送ります。
rset ← セッション状態をリセットします。
quit ← セッションを終了させます。
※コアコマンドではありませんが、SMTP 拡張コマンドに「ehlo」コマンドがあります。
■SMTP コマンドの終了
SMTP コマンドは、「CR文字(キャリッジリターン)」 と「LF文字(ラインフィード)」 の組み合わせ「CRLF(CR+LF、復帰改行)」 で完了します。
コマンドとレスポンスの各行の長さは512文字を超えられません。
■SMTP コマンドには大文字・小文字の区別はない
SMTP コマンドには大文字・小文字の区別はないので、例えば telnet コマンドで直接メールサーバーにコマンドを送信する際も、大文字でも小文字でも問題はありません。
SMTP コマンド応答コード
応答コードは「3桁」になります。
1桁目、2桁目、3桁目でそれぞれ応答コードの意味を持っています。
■1桁目(最上位桁)
1 ← 肯定予備応答
2 ← 肯定完了状態
3 ← 肯定中間応答
4 ← 過渡的否定応答
5 ← 永続的失敗
■2桁目
0 ← 文法
1 ← 追加情報を要求する返答
2 ← 通信チャネル
5 ← メールシステム
※3桁目にはほとんど意味はないようです。その時その時で0になるのか8になるのか決められるようで、ルールはありません。
SMTP コマンドの結果は、通常1桁目で判断します。
2桁目、3桁目はコードの意味を細かく知ることができますが、1桁目で成功や失敗を判断します。
例えば肯定完了状態を表す「250 OK」なら 2 で成功と判断できますが、「50」では判断できません。
SMTP プロトコルのセッション
SMTP プロトコルのセッションは以下のような流れで進みます。
宛先の決定
接続の確立
セッションの初期化
必要なトランザクションを行うための対話
セッションの切断
環境
DNS サーバーの IP アドレス:8.8.8.8
メールサーバーのグローバルIP:15.10.10.84
メールの宛先ドメイン:dest-example.co.jp
宛先ドメインのメールサーバーのグローバルIP:1.1.1.1 2.2.2.2
宛先ドメインのメールサーバーの FQDN:real-mail-server.co.jp
宛先メールアドレス:test-xxxx@dest-example.co.jp
宛先の決定
最初に 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」 で様々な制約が発生します。
SMTP ← 7 ビットの ASCII コードのみ転送
ESMTP ← 8 ビット転送(8 bit-MIME 転送)が可能、バイナリ転送が可能
サーバーはメッセージを受信したらクライアントにステータスのレスポンスコード「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標準プロトコル群の詳細
第1章 概観:ィンターネットにおける電子メールについての非常におおまかな概観と紹介。
第2章 メールメッセージ:電子メールメッセージの構造についての詳細な説明。
第3章 メール配送:SMTPプロトコルと様々な拡張機構についての説明および、SMTPを電子メールの配送に使う方法についての説明。
第4章 MIME: MIMEおよび、MIMEを使って構造化データや非テキストデータを電子メールメッセージに力プセル化する方法についての説明。
第5章 pop: POPプロトコルとその使用法、様々な拡張機構についての説明。
第6章 IMAP: IMAPプロトコルとその使用法、主な拡張機構についての説明。
第7章 フィルタリング:電子メールフィルタが動作する様子や、フィルタを使ってできる様々な仕事についての説明。
第8章 メーリングリスト処理:メーリングリスト処理アプリケーションについて。およびメーリングリスト機能を実行するために操作が必要な電子メールヘッダについての詳しい説明。
第9章 セキュリティ:電子メールのセキュリティに関する様々な点についての説明。認証、電子署名、暗号化、匿名性について扱っている。
付録A フォルダ形式の例:主なフォルダ形式についての説明。様々な設計の特徴に由来する性能の差に重点を蹴いている。
付録B UNIXフオルダの口ック:UNIXにおけるフォルダロックに関する様々な話題の説明。
付録C プログラム言語:一般的なプログラム言語と、各言語の特徴のうち電子メールに関して興昧深い部分についての概説。
付録D IMSP: IMSPプロトコルの簡単な概略。
付録E ACAP: ACAPプロトコルの概略。
付録F LDAP: LDAPプロトコルの簡単な概略。
コメント