我正在使用Android 的 JavaMail 端口来发送电子邮件,而无需用户干预应用程序。而且我注意到某些电子邮件系统无法正确显示电子邮件正文。当我将电子邮件发送到 Gmail 时,正文显示正确,但是当我将其发送到公司电子邮件时(我不确定它使用的是什么,但它是来自电信的商业邮件),正文是空白的,而是有一个附件包含正文内容的文本文件 ATT00001.txt。
我不是邮件系统方面的专家,但从我用来设置电子邮件正文的代码来看,它似乎与您附加文件的方式非常相似,也许这就是为什么正文不被识别为正文的原因,但是作为附件。
以下代码片段是邮件的创建方式。身体和主题都是预先初始化的。
public synchronized void send() throws MessagingException {
MimeMessage message = new MimeMessage(session);
BodyPart bodyPart = new MimeBodyPart();
bodyPart.setText(body);
message.setSender(new InternetAddress(sender));
message.setSubject(subject);
//message.setDataHandler(handler);
multipart.addBodyPart(bodyPart);
message.setContent(multipart);
if (recipients.indexOf(',') > 0)
message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(recipients));
else
message.setRecipient(Message.RecipientType.TO, new InternetAddress(recipients));
Transport.send(message);
user = null;
password = null;
session = null;
}
如果有人知道如何解决这个问题,请帮助我!对我的应用程序来说,将 body 显示为 body 很重要。此外,如果有更好的无需用户干预的方式发送电子邮件,也请提出建议。
谢谢你的帮助。
编辑:
我尝试使用 .setText() 而不是 BodyPart
message.setText(body);
这根本没有显示来自 Gmail 的正文,并显示了来自公司邮件的一些奇怪的字符串
------=_Part_2_1079750440.1339556360521--
在测试这些时,我创建了一个电子邮件测试活动,它基本上通过单击按钮发送电子邮件。在尝试了一些东西之后,我把我的课程改回原来的样子(使用 BodyPart),然后它就起作用了!看起来附件是导致问题的原因,我认为我附加文件的方式不正确。
public void addAttachment(File file) throws MessagingException {
BodyPart messageBodyPart = new MimeBodyPart();
DataSource source = new FileDataSource(file);
messageBodyPart.setDataHandler(new DataHandler(source));
messageBodyPart.setFileName(file.getName());
multipart.addBodyPart(messageBodyPart);
}
这个 addAttachment() 函数在 send() 之前调用。
这有什么问题?
编辑:
万一其他人遇到同样的问题,这就是我修复它的方法。通过在添加附件之前设置正文解决了该问题。所以我没有在发送时设置正文,而是预先单独设置正文。
public void setBody(String body) throws MessagingException {
BodyPart bodyPart = new MimeBodyPart();
bodyPart.setText(body);
multipart.addBodyPart(bodyPart);
}
public synchronized void send() throws MessagingException {
MimeMessage message = new MimeMessage(session);
message.setSender(new InternetAddress(sender));
message.setSubject(subject);
message.setContent(multipart);
if (recipients.indexOf(',') > 0)
message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(recipients));
else
message.setRecipient(Message.RecipientType.TO, new InternetAddress(recipients));
Transport.send(message);
user = null;
password = null;
session = null;
}
所以当我调用函数时,我首先调用 setBody(),然后是 addAttachment(),然后是 send()。现在电子邮件的正文已按原样显示。