Outlook 研究所


Outlook から本文が QUIT または RSET のみのメールが送信される現象について

Filed under: トラブルシュート — outlooklab @ 12:00 PM




  1. Outlook が SMTP サーバーに対してメールを送信するために DATA コマンドを送信します。
  2. SMTP サーバーが 354 応答を返し、メールヘッダーと本文を受信する状態に移行します。
  3. Outlook が何らかの問題によりメールヘッダーや本文の生成に失敗、送信処理を中断します。
    この時、QUIT または RSET コマンドをサーバーに送信し、SMTP セッションを終了します。
  4. SMTP サーバーが Outlook から送信された QUIT や RSET をメッセージ本文と誤認し、送信します。

Outlook がメールヘッダーや本文の生成に失敗する原因の一つには、開封確認通知の破損があり、2012 年 12 月の修正プログラムにおいて修正が行われています。

そして、根本的な問題は QUIT や RSET をメッセージ本文として誤認するサーバー側にあるとも考えられます。

SMTP の規約を定めている RFC5321 では、メール本文の送信コマンドである DATA コマンドについて以下の通り定義されています。  DATA (DATA) 

   The receiver normally sends a 354 response to DATA, and then treats
   the lines (strings ending in <CRLF> sequences, as described in
   Section 2.3.7) following the command as mail data from the sender.
   This command causes the mail data to be appended to the mail data
   buffer.  The mail data may contain any of the 128 ASCII character
   codes, although experience has indicated that use of control
   characters other than SP, HT, CR, and LF may cause problems and
   SHOULD be avoided when possible.

   The mail data are terminated by a line containing only a period, that
   is, the character sequence "<CRLF>.<CRLF>", where the first <CRLF> is
   actually the terminator of the previous line (see Section 4.5.2).
   This is the end of mail data indication.  The first <CRLF> of this
   terminating sequence is also the <CRLF> that ends the final line of
   the data (message text) or, if there was no mail data, ends the DATA
   command itself (the "no mail data" case does not conform to this
   specification since it would require that neither the trace header
   fields required by this specification nor the message header section
   required by RFC 5322 [4] be transmitted).  An extra <CRLF> MUST NOT
   be added, as that would cause an empty line to be added to the
   message.  The only exception to this rule would arise if the message
   body were passed to the originating SMTP-sender with a final "line"
   that did not end in <CRLF>; in that case, the originating SMTP system
   MUST either reject the message as invalid or add <CRLF> in order to
   have the receiving SMTP server recognize the "end of data" condition.

   The custom of accepting lines ending only in <LF>, as a concession to
   non-conforming behavior on the part of some UNIX systems, has proven
   to cause more interoperability problems than it solves, and SMTP
   server systems MUST NOT do this, even in the name of improved
   robustness.  In particular, the sequence "<LF>.<LF>" (bare line 
   feeds, without carriage returns) MUST NOT be treated as equivalent to
   <CRLF>.<CRLF> as the end of mail data indication.

   Receipt of the end of mail data indication requires the server to
   process the stored mail transaction information.  This processing
   consumes the information in the reverse-path buffer, the forward-path
   buffer, and the mail data buffer, and on the completion of this
   command these buffers are cleared.  If the processing is successful,
   the receiver MUST send an OK reply.  If the processing fails, the
   receiver MUST send a failure reply.  The SMTP model does not allow
   for partial failures at this point: either the message is accepted by
   the server for delivery and a positive response is returned or it is
   not accepted and a failure reply is returned.  In sending a positive
   "250 OK" completion reply to the end of data indication, the receiver
   takes full responsibility for the message (see Section 6.1).  Errors
   that are diagnosed subsequently MUST be reported in a mail message,
   as discussed in Section 4.4.

ポイントとなるのは "<CRLF>.<CRLF>" というのがメールデータの終端を意味するということと、サーバーがメールの送信処理を行うためにはこの終端文字列が必要になるということです。
つまり、以下のようなメールデータを Outlook が送信しているのであれば、Outlook の問題といえます。


しかし、Outlook が QUIT の後に終端文字列を送信していないにもかかわらず、これを本文としてメール送信しているサーバーがあるなら、そのサーバーの実装に問題がある可能性が高いということです。
私が確認した限りでは、Outlook は送信処理が何らかの理由で中断した場合、QUIT コマンドや RSET コマンドを送ることはあっても、その後に "<CRLF>.<CRLF>" を送ることはありませんでした。そのため、おそらくサーバーの実装に問題がある場合に、QUIT のみのメールが送信されるという現象が発生すると考えられます。


  1. コマンド プロンプトを起動します。
  2. 以下のコマンドを実行します。 (OS によっては TELNET コマンドを追加コンポーネントとしてインストールする必要があります。)
    TELNET SMTPサーバー名 25
  3. サーバーと接続されたら、以下の通りコマンドを実行します。

    HELO test
    MAIL FROM: <>
    RCPT TO: <メールアドレス>

  4. コマンド プロンプトを閉じます。

これで、RCPT TO: で指定したメールアドレスに QUIT のみのメールが送信された場合は、そのサーバーの実装に問題があると考えられますので、サーバーのサポートにご相談ください。

コメントする »


RSS feed for comments on this post. TrackBack URI



WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中

WordPress.com Blog.