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