0

私は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で同じことをしましたが、うまくいきました。多分私は何かを逃したのですか?

前もって感謝します!:)

4

2 に答える 2

1

さて、元のメッセージの内容を調べたところ、次のことに気付きました。

Content-Type: application/octet-stream; name=screen.png

そこで、コードに 3 行目を追加しました。

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

正確に1つの部分でマルチパートメッセージを作成していて、その1つの部分はテキスト部分ではなく、画像部分です。これはMIME仕様によれば完全に合法ですが、「異常」であり、おそらくFacebookの電子メールはそのようなメッセージを処理する準備ができていません。

PHPで同じことをしたとき、同じ構造のメッセージを作成しましたか?

マルチパートメッセージを作成しないでください。代わりに、メッセージ自体のコンテンツとして画像を設定するだけです。

また、最初の部分がプレーンテキストで、2番目の部分が画像であるマルチパートメッセージを作成してみてください。

于 2012-07-10T18:21:38.170 に答える