java mail 接收邮件,为什么 subject 为 null

I_am_a_java_CaiNiao 2015-06-24 09:57:45
如题,使用 java mail,读取邮箱收件箱的邮件,能读出正确的邮件数目来,也能读到 content,但 getSubject() 却返回 null,事实是邮件确实是有 subject 的,中英文都不行。还有 getFrom() 也是 null,代码如下,请指教,谢谢!


public class MailReceiverTest {

public static void main(String[] args) throws Exception {

String pop3Server = "mail.xxxxxx.com";
String protocol = "pop3";
String user = "xxx@xxxxxx.com";
String pwd = "xxxxxx";

Properties props = new Properties();
props.setProperty("mail.store.protocol", protocol);
props.setProperty("mail.pop3.host", pop3Server);

Session session = Session.getInstance(props);
session.setDebug(true);

Store store = session.getStore();
store.connect(pop3Server, user, pwd);

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

try {
Message [] messages = folder.getMessages();

// 此处 mailCounts 数量为 2,与我收件箱中一致,正确
int mailCounts = messages.length;
for(int i = 0; i < mailCounts; i++) {

String subject = messages[i].getSubject(); // subject 为 null,为何 ?
String from = (messages[i].getFrom()[0]).toString();

System.out.println("第 " + (i+1) + "封邮件的主题:" + subject);
System.out.println("第 " + (i+1) + "封邮件的发件人地址:" + from);
}
} finally {
folder.close(false);
store.close();
}
}
}
...全文
461 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
Java碎碎念 2015-06-24
  • 打赏
  • 举报
回复
刚执行了代码,可以取到主题,楼主换个邮箱服务器试试。
  • 打赏
  • 举报
回复
引用 1 楼 baohuan_love 的回复:
再好好看看代码,是不是主题没有设置上啊
这是收邮件啊,需要设置主题吗?不明白
  • 打赏
  • 举报
回复
再好好看看代码,是不是主题没有设置上啊
  • 打赏
  • 举报
回复
找到原因了,我项目中还用到了 axis2,axis2的 jar 包与 javamail 有冲突,把 axis2 的jar 包全去掉就正常了。 不过现在问题是我确实需要 axis2,不行就分两个项目了,唉。。。
  • 打赏
  • 举报
回复
以下是调试日志:

Loading javamail.default.providers from jar:file:/C:/Users/tianxiang/.m2/repository/javax/mail/mail/1.4.7/mail-1.4.7.jar!/META-INF/javamail.default.providers
DEBUG: loading new provider protocol=imap, className=com.sun.mail.imap.IMAPStore, vendor=Oracle, version=null
DEBUG: loading new provider protocol=imaps, className=com.sun.mail.imap.IMAPSSLStore, vendor=Oracle, version=null
DEBUG: loading new provider protocol=smtp, className=com.sun.mail.smtp.SMTPTransport, vendor=Oracle, version=null
DEBUG: loading new provider protocol=smtps, className=com.sun.mail.smtp.SMTPSSLTransport, vendor=Oracle, version=null
DEBUG: loading new provider protocol=pop3, className=com.sun.mail.pop3.POP3Store, vendor=Oracle, version=null
DEBUG: loading new provider protocol=pop3s, className=com.sun.mail.pop3.POP3SSLStore, vendor=Oracle, version=null
DEBUG: getProvider() returning provider protocol=pop3; type=javax.mail.Provider$Type@a54f742; class=com.sun.mail.pop3.POP3Store; vendor=Oracle
DEBUG POP3: mail.pop3.rsetbeforequit: false
DEBUG POP3: mail.pop3.disabletop: false
DEBUG POP3: mail.pop3.forgettopheaders: false
DEBUG POP3: mail.pop3.cachewriteto: false
DEBUG POP3: mail.pop3.filecache.enable: false
DEBUG POP3: mail.pop3.keepmessagecontent: false
DEBUG POP3: mail.pop3.starttls.enable: false
DEBUG POP3: mail.pop3.starttls.required: false
DEBUG POP3: mail.pop3.apop.enable: false
DEBUG POP3: mail.pop3.disablecapa: false
DEBUG POP3: connecting to host "mail.sinotrans-mingzhou.com", port 110, isSSL false
+OK sinotrans-mingzhou.com POP3 MDaemon 14.0.3 ready <MDAEMON-F201506241428.AA2816603MD4765@sinotrans-mingzhou.com>
CAPA
+OK Capability list follows
TOP
USER
UIDL
.
DEBUG POP3: authentication command trace suppressed
DEBUG POP3: authentication command succeeded
STAT
+OK 0 0
QUIT
+OK stx@sinotrans-mingzhou.com sinotrans-mingzhou.com POP3 Server signing off (mailbox empty)

  • 打赏
  • 举报
回复
引用 5 楼 benpao412 的回复:
JavaMail version 1.4.7
换了好几个邮箱,都是老问题。 获取的其他属性(From, To, Date...)也都是null,除了 getContent 是有内容的。
Java碎碎念 2015-06-24
  • 打赏
  • 举报
回复
JavaMail version 1.4.7
  • 打赏
  • 举报
回复
引用 3 楼 benpao412 的回复:
刚执行了代码,可以取到主题,楼主换个邮箱服务器试试。
我换了 qq 邮箱,还是不行。你用的 jar 包是什么版本的?我的是: <dependency> <groupId>javax.mail</groupId> <artifactId>mail</artifactId> <version>1.4.7</version> </dependency>
/* 复杂邮件程序完整Java源码,支持添加附件,图片,HTML格式文本,支持远程WebService调用*/ package com.hx.mail; import java.io.File; import java.util.Map; import javax.mail.Message.RecipientType; /** * MailServices 邮件接收发送接口定义类 * * @author 380595305@qq.com * Date 2010-05-11 * @version 1.0 */ public interface HexiangMailService { /** * sendMail 发送邮件函数 * * @param sender 是String类型,邮件发送者信息 * @param password 是String类型,邮件发送者密码 * @param addressee 是String类型,邮件接收者信息 * @param subject 是String类型,传入邮件主题 * @param text 是String类型,传入邮件消息 */ void sendMail(String sender,String password,String addressee,String subject,String text) throws Exception; /** * sendMail 发送邮件函数 * * @param sender 是String类型,邮件发送者信息 * @param password 是String类型,邮件发送者密码 * @param addressee 是String类型,邮件接收者信息 * @param subject 是String类型,传入邮件主题 * @param text 是String类型,传入邮件消息 * @param enclosures Map 邮件附件 * @param copyToSends Map 邮件抄送信息 */ void sendMail(String sender,String password,String addressee,String subject,String text,Map enclosures,Map copyToSends) throws Exception; /** * sendMail 发送邮件函数 * * @param sender 是String类型,邮件发送者信息 * @param password 是String类型,邮件发送者密码 * @param subject 是String类型,传入邮件主题 * @param imgs 是File[]类型,邮件正文中附件的图片信息 * @param htmlContent 是String类型,传入邮件消息正文 * @param enclosures Map 邮件附件 * @param copyToSends Map 邮件抄送信息 */ void sendMail(String sender,String password,String subject,File[] imgs,String htmlContent,Map enclosures,Map copyToSends) throws Exception; } package com.hx.mail; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; import java.io.UnsupportedEncodingException; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Proper
package com.hx.mail; import java.util.HashMap; import java.util.Map; import java.util.Properties; import javax.mail.Authenticator; import javax.mail.Message; import javax.mail.Session; import javax.mail.PasswordAuthentication; import javax.mail.Transport; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeMessage; /** * MailServices 邮件接收发送接口实现类 * * @author 380595305@qq.com * Date 2010-05-11 * @version 1.0 */ public class KumMailServicesImpl implements KumMailServices { /** MailboxType 邮箱类型 */ private static Map MailboxTypes = null; /** host 邮箱服务器类型 */ private String host = null; /** sender 邮件发送者 */ private String sender = null; /** addressee 邮件接收者 */ private String addressee = null; /** subject 邮件主题 */ private String subject = null; /** text 邮件消息 */ private String text = null; public static void init(){ MailboxTypes = new HashMap(); MailboxTypes.put("163","smtp.163.com"); MailboxTypes.put("139","smtp.139.com"); MailboxTypes.put("126","smtp.126.com"); MailboxTypes.put("qq", "smtp.qq.com"); MailboxTypes.put("live","smtp.live.cn"); MailboxTypes.put("msn","smtp.msn.com"); MailboxTypes.put("kum", "mail.kum.net.cn"); MailboxTypes.put("hotmail","smtp.hotmail.cn"); } /** * initialization 实例化类成员变量 */ private void initialization(String sender,String addressee,String subject,String text){ this.sender = sender; this.addressee = addressee; this.subject = subject; this.text = text; this.host = getHost(sender); //System.out.println("sender->"+this.sender+" | addressee->"+this.addressee+" | subject->"+this.subject+" | text->"+this.text+" | host->"+this.host); } /** * getHost 获取目标邮箱服务器类型 * * @param sender 是String类型,传入邮件发送者邮箱地址信息 * @return String 返回目标邮箱服务器类型 */ private String getHost(String sender){ String _host,_host_ = null; _host = sender.substring(sender.indexOf("@")+1,sender.indexOf(".")); if(MailboxTypes==null){ init(); } _host_ = MailboxTypes.get(_host); // System.out.println(_host+" <--> "+_host_); if(_host_==null){ //MailboxTypes.put(_host,"smtp."+_host+".com"); MailboxTypes.put(_host,"smtp."+sender.substring(sender.indexOf("@")+1,sender.length())); } return MailboxTypes.get(_host); } public void sendMail(String sender, String password, String addressee, String subject, String text) throws Exception { initialization(sender,addressee,subject,text); Properties props = System.getProperties(); { props.put("mail.smtp.host",this.host); props.put("mail.smtp.auth","true"); } ValidateAuther auther = new ValidateAuther(this.sender,password); Session session = Session.getDefaultInstance(props,auther); MimeMessage msg = new MimeMessage(session); InternetAddress fromAddr = new InternetAddress(this.sender); // 发送者邮箱地址 InternetAddress toAddr = new InternetAddress(this.addressee); // 接收者邮箱地址 msg.setFrom(fromAddr); msg.addRecipient(Message.RecipientType.TO, toAddr); /** * Message.RecipientType.TO -- 接收者 * Message.RecipientType.CC -- 抄送 * Message.RecipientType.BCC --秘密抄送者 */ msg.setSubject(this.subject); // 邮件主题 msg.setText(this.text); // 邮件信息 Transport.send(msg); // 发送邮件 } } /** * ValidateAuther 邮件验证类,验证邮件发送者信息 */ class ValidateAuther extends Authenticator { /** 邮件发送者 */ private String sender; /** 邮件接受者 */ private String password; /** * ValidateAuther 验证邮件发送者信息 * * @param userName 是String类型,传入邮件发送者账户 * @param password 是String类型,传入邮件发送者账户密码 */ public ValidateAuther(String sender, String password) { this.sender = sender; this.password = password; } /** * getPasswordAuthentication 验证邮件发送者账户信息的函数 * * @param userName 邮件发送者账户信息 * @param password 邮件发送者账户密码 * @return PasswordAuthentication 返回邮件发送者账户验证信息 */ @Override protected PasswordAuthentication getPasswordAuthentication() { return new PasswordAuthentication(sender, password); } }

67,550

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧