我正在Processing中编写一个独立的应用程序,我需要通过JavaMail在FB页面时间轴上发布草图截图。 所以我写了这个:
void sendMail() {
String host="smtp.gmail.com";
Properties props=new Properties();
props.put("mail.transport.protocol", "smtp");
props.put("mail.smtp.host", host);
props.put("mail.smtp.port", "587");
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.starttls.enable","true");
Session session = Session.getDefaultInstance(props, new Auth());
try
{
MimeMessage message = new MimeMessage(session);
message.setFrom(new InternetAddress("xxxxx@gmail.com", "xxxxx"));
message.setRecipients(Message.RecipientType.TO, InternetAddress.parse("xxxxxxxxxx@m.facebook.com", false));
message.setSubject("ok");
BodyPart mbp = new MimeBodyPart();
DataSource fds = new FileDataSource(file);
mbp.setDataHandler(new DataHandler(fds));
mbp.setFileName("screen.png");
Multipart mp = new MimeMultipart();
mp.addBodyPart(mbp);
message.setContent(mp);
message.setSentDate(new Date());
Transport.send(message);
println("Mail sent!");
}
catch(Exception e)
{
println(e);
}
}
现在,当我将我的Gmail电子邮件作为收件人写下来时 - 方法完美无缺(我只收到主题和附加照片),但是当我使用我的FB页面电子邮件时 - 我的时间轴中只显示主题,没有照片
我以前用PHP做过同样的事情并且它有效。也许我错过了什么?
提前谢谢!:)
答案 0 :(得分:1)
好吧,我查看了原始邮件的内容并注意到了这一点:
Content-Type: application/octet-stream; name=screen.png
所以我在代码中添加了第三行:
MimeBodyPart mbp = new MimeBodyPart();
mbp.attachFile(new File(file));
mbp.setHeader("Content-Type", "image/png");
然后我得到了:
Content-Type: image/png
现在一切都很完美!:)
答案 1 :(得分:0)
您正在创建一个只有一个部分的多部分消息,而一部分不是文本部分,它是一个图像部分。虽然根据MIME规范,这是完全合法的,但它“不寻常”,也许Facebook电子邮件不准备处理这样的消息。
当您使用PHP执行相同操作时,是否创建了具有相同结构的消息?
尝试不创建多部分消息。相反,只需将图像设置为消息本身的内容即可。
此外,尝试创建一个多部分消息,第一部分是纯文本,第二部分是图像。