1

次のメールがあります。

Subject = Hello!
Body = Bla bla bla bla.
Recipients = "carlos@mail.com", "mike@mail.com"

RFC822 に従ってそのフィールドを解析したいのですが、見つかりません。

何が必要ですか?

すべてのフィールド (件名、本文、受信者) -> フォーマッター (Java および/または目的-c) -> RC822 による文字列

私が試したことは?

問題は、それらがセッション指向であり、資格情報やホストを持っていないことです。

アップデート

このようなものが必要ですが、代わりに次のmessage.writeTo(...)ようなものが必要ですString dataRFC822 = message.getRFC822String();

// Recipient's email ID needs to be mentioned.
      String to = "destinationemail@gmail.com";

      // Sender's email ID needs to be mentioned
      String from = "fromemail@gmail.com";

      // Get the Session object. Which I have not and I don't want it.
      Session session = Session.getInstance(props,
         new javax.mail.Authenticator() {
            protected PasswordAuthentication getPasswordAuthentication() {
               return new PasswordAuthentication(username, password);
            }
         });

      try {
         // Create a default MimeMessage object.
         Message message = new MimeMessage(session);

         // Set From: header field of the header.
         message.setFrom(new InternetAddress(from));

         // Set To: header field of the header.
         message.setRecipients(Message.RecipientType.TO,
            InternetAddress.parse(to));

         // Set Subject: header field
         message.setSubject("Testing Subject");

         // Create the message part
         BodyPart messageBodyPart = new MimeBodyPart();

         // Now set the actual message
         messageBodyPart.setText("This is message body");

         // Create a multipar message
         Multipart multipart = new MimeMultipart();

         // Set text message part
         multipart.addBodyPart(messageBodyPart);

         // Part two is attachment
         messageBodyPart = new MimeBodyPart();
         String filename = "/home/manisha/file.txt";
         DataSource source = new FileDataSource(filename);
         messageBodyPart.setDataHandler(new DataHandler(source));
         messageBodyPart.setFileName(filename);
         multipart.addBodyPart(messageBodyPart);

         // Send the complete message parts
         message.setContent(multipart);

         //instead write it on a stream i I want get back the string formated according to rfc822
         message.writeTo(...);


      } catch (MessagingException e) {
         throw new RuntimeException(e);
      }
4

3 に答える 3

1

ファイルを添付しない場合、またはマルチパート MIME メッセージがどうしても必要な場合は、手動で RFC822 互換の文字列を手動で作成できます。

String makeRfc822email(String from, String to, String subject, String message) {
  StringBuilder builder = new StringBuilder();
  builder.append("From: ");
  builder.append(from);
  builder.append("\n");

  builder.append("To: ");
  builder.append(to);
  builder.append("\n");

  builder.append("Subject: ");
  builder.append(subject);
  builder.append("\n\n");  // Blank line before message.

  builder.append(message);

  return builder.toString();
}
于 2016-12-12T10:56:05.057 に答える
0

配列への書き込みByteArrayOutputStreamの実装である which を使用できます。this のインスタンスを作成してメソッドに渡し、そこから を呼び出してメッセージの表現を取得できます。OutputStreambytewriteTo(OutputStream)toStringByteArrayOutputStreamString

ByteArrayOutputStream out = new ByteArrayOutputStream();
message.writeto(out);
String s = out.toString();
于 2016-12-11T00:36:10.007 に答える