我从输入流创建一个 javamail MimeMessage:
MimeMessage message = new MimeMessage(session, data);
Object content = message.getContent();
log.debug("content: "+content);
当我使用雷鸟发送电子邮件时,内容对象包含电子邮件文本。
但是当我使用 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 正确发送邮件。消息数据通常是一组键/值对,后跟换行符,然后是内容。您的消息显示没有内容的原因是您的数据似乎都是标题。
您的 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
关于java - 使用 telnet 时 MimeMessage 为空?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37073905/