使用 telnet 时 MimeMessage 为空?

MimeMessage empty when using telnet?

我从输入流创建了一个 javamail MimeMessage:

MimeMessage message = new MimeMessage(session, data);
Object content = message.getContent();
log.debug("content: "+content);

当我使用 thunderbird 发送电子邮件时,内容对象包含电子邮件文本。

但是当我使用 telnet 发送电子邮件时,内容对象是空的。

220 192.168.2.3 ESMTP SubEthaSMTP 3.1.7
mail from:test@test.com
250 Ok
rcpt to:burb@burb.com
250 Ok
data
354 End data with <CR><LF>.<CR><LF>
test1
test2
test3
.
250 Ok
quit
221 Bye


Connection to host lost.

不过我可以通过手动读取输入流来获取内容:

public String convertStreamToString(InputStream is) {
    BufferedReader reader = new BufferedReader(new InputStreamReader(is));
    StringBuilder sb = new StringBuilder();

    String line = null;
    try {
        while ((line = reader.readLine()) != null) {
            sb.append(line + "\n");
        }
    } catch (IOException e) {
        e.printStackTrace();
    }
    return sb.toString();
}

是否可以检测何时使用 MimeMessage 以及何时使用 convertStreamToString?

您没有通过 SMTP 正确发送邮件。消息数据通常是一组 key/value 对,后跟一个换行符,然后是内容。您的消息说没有内容的原因是您的数据似乎全部 headers.

您的 telnet session 应该如下所示:

220 192.168.2.3 ESMTP SubEthaSMTP 3.1.7
mail from:test@test.com
250 Ok
rcpt to:burb@burb.com
250 Ok
data
354 End data with <CR><LF>.<CR><LF>
From: Test <test@test.com>
To: Burb <burb@burb.com>
Subject: My fantastic message

test1
test2
test3
.
250 Ok
quit
221 Bye