我对javamail有一个奇怪的问题。 当我尝试发送带有以字母'n'开头的主题的邮件时,邮件不会被发送。我正在连接到smtp邮件服务器。
Session session = Session.getInstance(properties);
try {
MimeMessage msg = new MimeMessage(session);
msg.setFrom(new InternetAddress(sender));
msg.addRecipients(Message.RecipientType.TO, mail_list_addresses);
//These work!
msg.setSubject(MimeUtility.encodeText("Pode Has Fallen Down", "utf-8", "B"));
msg.setSubject(MimeUtility.encodeText("Fallen Down It Has", "utf-8", "B"));
msg.setSubject(MimeUtility.encodeText("It Has Fallen Down", "utf-8", "B"));
//These doesn't work
msg.setSubject(MimeUtility.encodeText("Node Has Fallen Down", "utf-8", "B"));
msg.setSubject(MimeUtility.encodeText("node Has Fallen Down", "utf-8", "B"));
msg.setSubject(MimeUtility.encodeText("N", "utf-8", "B"));
msg.setText(standard_msg + mqttMessage + standard_msg_end);
SMTPTransport t = (SMTPTransport) session.getTransport("smtp");
t.connect();
t.sendMessage(msg, msg.getAllRecipients());
t.close();
} catch (MessagingException mex) {
mex.printStackTrace();
}catch (Exception e){
e.printStackTrace();
}
这些是我的SMTP设置
sender = "sender@test.com";
host = "server.adress.com";
properties = System.getProperties();
properties.setProperty("mail.smtp.host", host);
properties.setProperty("mail.smtp.port", "25");
properties.setProperty("mail.smtp.auth", "false");
properties.put("mail.smtp.ssl.enable", "false");
properties.setProperty("mail.smtp.starttls.enable", "false");
properties.setProperty("mail.debug", "true");
properties.setProperty("mail.smtp.quitwait", "true");
为什么会这样?
或者仅仅是因为我的邮件服务器不接受以字母'n'开头的主题?我尝试过不同的编码,只使用setSubject(“whatever”)而没有任何结果。
修改
邮件已发送但已到达垃圾邮件文件夹(已隐藏,因此我没有注意到它们)。
答案 0 :(得分:0)
公共类MimeUtility *这是一个提供各种MIME相关功能的实用程序类。*
根据RFC 2047,有一组方法可以对MIME标头进行编码和解码。请注意,通常情况下,这些方法不需要 使用 setSubject 和setRecipients等方法; JavaMail会 使用这些“更高级别”时自动编码和解码数据 方法的
我不确定完全发生了什么,但它可能是某种“双重编码”的副作用。尝试删除对MimeUtility.encodeText()