0

我正在处理中编写一个独立的应用程序,我需要通过 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 做过同样的事情,它工作。也许我错过了什么?

先感谢您!:)

4

2 回答 2

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

现在一切正常!:)

于 2012-07-12T11:49:03.380 回答
0

您正在创建仅包含一个部分的多部分消息,并且该部分不是文本部分,而是图像部分。虽然根据 MIME 规范这是完全合法的,但它是“不寻常的”,也许 Facebook 电子邮件不准备处理这样的消息。

当您使用 PHP 做同样的事情时,您是否创建了具有相同结构的消息?

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

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

于 2012-07-10T18:21:38.170 回答