通过电子邮件更新状态图片。 (JavaMail的)

时间:2012-07-10 11:18:52

标签: java email javamail processing facebook-timeline

我正在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做过同样的事情并且它有效。也许我错过了什么?

提前谢谢!:)

2 个答案:

答案 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执行相同操作时,是否创建了具有相同结构的消息?

尝试不创建多部分消息。相反,只需将图像设置为消息本身的内容即可。

此外,尝试创建一个多部分消息,第一部分是纯文本,第二部分是图像。