telnetで宛先サーバの最大受信サイズを調べる

添付ファイルを含む電子メールを送信した時に、サイズが大きすぎて宛先サーバから エラーで戻ってくる(バウンス)ことがあります。 特に業務で必要なファイルを送信する時には、予めどのくらいの大きさまでのメールが 送信できるのか分かっている方が合理的かもしれません。 この文書ではtelnetコマンドを使って宛先サーバが受信できる最大サイズを調べる方法を説明します。


初出: bouncehammer.jp/ja/email-topics/how-much-the-max-size-of-email

MX

[dig] 宛先メールサーバのホスト名を調べる

例えばhoge@example.jpからuser@example.com に送信するとします。 まずはdigコマンドかnslookupコマンドを使って、 user@example.jpのメールを受けとるメールサーバのホスト名を調べる必要があります。

dig

$ dig MX example.com
...
;; ANSWER SECTION:
example.com. 3600 IN MX 10 mx.example.com.
...
                

IN MXという文字が書いてある行を探してください。 コマンドの実行結果からexample.comのメールサーバは mx.example.comである 事が分かりました。


nslookup

digコマンドがない場合はnslookupを使うとよいでしょう。 メールサーバのホスト名はmail exchanger =に続く文字列として表示されます。

$ nslookup -q=MX example.com
...
Non-authoritative answer:
example.com mail exchanger = 10 mx.example.com.
...
                

[telnet] 宛先メールサーバに接続する

user@example.jpのメールサーバはmx.example.jp と分かったので、ターミナルまたはコマンドプロンプトからtelnetコマンドを使って接続します。

接続元の環境によっては OP25 (Outbound Port 25 Blocking) によって接続できない 場合がありますのでご注意下さい。

$ telnet mx.example.com 25
Trying 192.0.2.1...
Connected to mx.example.com.
Escape character is '^]'.
220 Sendmail ESMTP 8.14.4/8.14.4; Sun, 12 Dec 2010 23:44:43 -0800
EHLO [192.0.2.2] ←自分のIPアドレスを名乗る
250-libsisimai.org Hello [192.0.2.1], pleased to meet you
250-ENHANCEDSTATUSCODES
250-PIPELINING
250-8BITMIME
250-SIZE 33554432
250-DSN
250-ETRN
250-AUTH LOGIN PLAIN CRAM-MD5 DIGEST-MD5
250-DELIVERBY
250 HELP
QUIT
                

宛先メールサーバに接続してEHLOコマンドを発行した応答に含まれる SIZEに続く数値が、そのサーバが受け取れるメールの最大サイズです。 上記の応答では約32MBということがわかります。

宛先メールサーバによっては、応答内容にSIZEが入っていないものもあります。 その場合は実際にメールを送ってみるしか確認のしようがありませんのでご注意下さい。

サイズを超過した場合の応答を確認する

相手先メールサーバは最大で32MBまでのメールを受けとるという事が、 EHLOコマンドの応答からわかりました。

では、32MB以上のメールを送信したら相手側メールサーバはどのような応答をするのか? これは実際に32MB以上の本文データを用意せずとも確認する方法があります。

$ telnet mx.example.com 25
Trying 192.0.2.1...
Connected to mx.example.com.
Escape character is '^]'.
220 Sendmail ESMTP 8.14.4/8.14.4; Sun, 12 Dec 2010 23:44:43 -0800
EHLO [192.0.2.2] ←自分のIPアドレスを名乗る
250-libsisimai.org Hello [192.0.2.1], pleased to meet you
250-ENHANCEDSTATUSCODES
250-PIPELINING
250-8BITMIME
250-SIZE 33554432
250-DSN
250-ETRN
250-AUTH LOGIN PLAIN CRAM-MD5 DIGEST-MD5
250-DELIVERBY
250 HELP
MAIL FROM: <hoge@example.jp> SIZE=34567890
552 5.2.3 Message size exceeds fixed maximum message size (33554432)
                

MAIL FROMコマンドの末尾に送信するメールのサイズをSIZE= に続けて入力すると、メールサイズが大きすぎるという応答が恒久エラー (500系のエラーコード)で返ってきました。このエラーでバウンスした場合、Sisimaimesgtoobig (メールが大きすぎる) というエラーとして検出します。

携帯電話やWebメールサーバの最大受信サイズ

日本国内の携帯電話や著名なWebメールサービスのメールサーバは、 どのくらいのサイズのメールを受け付けるのか、各SMTPサーバに接続して調べてみました。 ここではEHLOコマンドの応答で返ってきた数値を列挙しています。


2017年5月調べ

宛先ドメイン SIZE(EHLOの応答) 応答
@docomo.ne.jp 15,728,640 15MB
@ezweb.ne.jp 3,145,728 3MB
@softbank.ne.jp 20,971,520 20MB
@i.softbank.jp (iPhone) 4,310,016 4MB
@gmail.com 157,286,400 150MB
@yahoo.com 41,943,040 40MB
@yahoo.co.jp 41,943,040 40MB
@hotmail.com 36,909,875 35MB
@outlook.com 36,909,875 35MB
@me.com (iCloud) 28,311,552 27MB

@docomo.ne.jpも応答は15MBですが、サービスの公式情報によると5MBです。 詳細は確認していませんが、どちらもSMTPのDATAコマンド以降に送信された本文データの容量を測定し、 超過した場合はSMTPセッション中にエラーを返しているのかもしれません。