使用telnet时MimeMessage为空?

时间:2016-05-06 13:39:54

标签: java javamail

我从输入流创建一个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?

1 个答案:

答案 0 :(得分:1)

您无法通过SMTP正确发送邮件。消息数据通常是一组键/值对,后跟换行符,后跟内容。您的消息说没有内容的原因是您的数据看起来像是所有标题。

您的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>
From: Test <test@test.com>
To: Burb <burb@burb.com>
Subject: My fantastic message

test1
test2
test3
.
250 Ok
quit
221 Bye