【问题标题】:JavaMail check message content gmail IMAPJavaMail 检查邮件内容 gmail IMAP
【发布时间】:2012-10-10 22:14:43
【问题描述】:

我正在尝试阅读我的消息,我可以让它打印标题,但发件人和内容显示很有趣。 这是我用来显示消息的代码:

   int j = message.length-1;
    for (int i=j;i>=0;i--) {
        System.out.println("Message " + (i + 1));
        System.out.println("From : " + message[i].getFrom());
        System.out.println("Subject : " + message[i].getSubject());
        try {
            System.out.println("Body: " + message[i].getContent());
        } catch (IOException ex) {
            System.out.println(ex);
        }
    }

输出如下:

 Message 1:
 From: [javax.mail.internet.InternetAddress;@175831e]
 Subject: Hello //This is correct
 Body: javax.mail.internet.MimeMultipart@15b5219

为什么不打印出 from 语句的实际电子邮件地址?为什么它不打印出实际的正文内容? (我只对纯文本感兴趣。)

完整代码:

import javax.mail.*;
import javax.mail.internet.*;
import javax.mail.search.*;
import java.util.*;
import com.sun.mail.imap.*;
import java.io.*;

public class MailClient {
public static void main(String[] args) {
    try {
    Properties props = new Properties();
    props.put("mail.store.protocol","imaps");

    Session session;

    session = Session.getDefaultInstance(props, null);
    Store store = session.getStore("imaps");
    store.connect("imap.gmail.com","email@gmail.com","password");

    IMAPFolder folder = (IMAPFolder) store.getFolder("inbox");
    folder.open(Folder.READ_ONLY);

    Flags seen = new Flags(Flags.Flag.SEEN);
    FlagTerm unseenFlagTerm = new FlagTerm(seen,false);
    Message message[] = folder.search(unseenFlagTerm); 


    int j = message.length-1;
    for (int i=j;i>=0;i--) {
        System.out.println("Message " + (i + 1));
        System.out.println("From : " + message[i].getFrom());
        System.out.println("Subject : " + message[i].getSubject());
        try {
            System.out.println("Body: " + message[i].getContent());
        } catch (IOException ex) {
            System.out.println(ex);
        }
    }    
    System.out.println(newMsg);

    folder.close(false);
    store.close();
    }
    catch (MessagingException e) {
        System.out.println("Error: " + e);
    }
}
}

谢谢!

【问题讨论】:

  • 因为getFrom 不返回字符串?从未使用过这个 API,它看起来像返回一个 InternetAddress(可能)有一些访问器来获取全名和电子邮件地址。

标签: java imap jakarta-mail


【解决方案1】:

对于纯文本和 html 消息:

String content= messages[i].getContent().toString();

对于多部分消息:

Multipart multipart = (Multipart) messages[i].getContent();

    for (int j = 0; j < multipart.getCount(); j++) {

        BodyPart bodyPart = multipart.getBodyPart(j);

        String disposition = bodyPart.getDisposition();

          if (disposition != null && (disposition.equalsIgnoreCase("ATTACHMENT"))) { // BodyPart.ATTACHMENT doesn't work for gmail
              System.out.println("Mail have some attachment");

              DataHandler handler = bodyPart.getDataHandler();
              System.out.println("file name : " + handler.getName());                                 
            }
          else { 
              System.out.println("Body: "+bodyPart.getContent());
              content= bodyPart.getContent().toString();
            }

【讨论】:

  • 这行代码总是返回null >> content= bodyPart.getContent().toString(); 可能是什么原因?我正在尝试检索电子邮件的正文。谢谢!
【解决方案2】:

JavaMail 常见问题解答告诉您如何access the main text body of a message

【讨论】:

    【解决方案3】:

    尝试使用下一个:

    message[i].writeTo(System.out);
    

    【讨论】:

      【解决方案4】:

      改一下

      message[i].getFrom()
      

      message[i].getFrom()[0].toString())
      

      【讨论】:

      • 身体怎么样?使用 message.getContent() 不会返回正文。
      猜你喜欢
      • 2011-07-19
      • 1970-01-01
      • 2011-03-14
      • 2012-03-05
      • 2015-04-23
      • 2016-07-03
      • 1970-01-01
      • 2014-02-12
      • 1970-01-01
      相关资源
      最近更新 更多