javamail接收邮件报错

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了javamail接收邮件报错相关的知识,希望对你有一定的参考价值。

代码如下:

Properties props = new Properties();

props.setProperty("mail.store.protocol", "imap");
props.setProperty("mail.imap.host", "imap.qq.com");
props.setProperty("mail.imap.port", "143");

// 创建Session实例对象
Session session = Session.getInstance(props);

// 创建IMAP协议的Store对象
Store store = session.getStore("imap");

// 连接邮件服务器
store.connect("12345676@qq.com", "123456");

// 获得收件箱
Folder folder = store.getFolder("INBOX");
// 以读写模式打开收件箱
folder.open(Folder.READ_WRITE);

// 获得收件箱的邮件列表
Message[] messages = folder.getMessages();

// 打印不同状态的邮件数量
System.out.println("收件箱中共" + messages.length + "封邮件!");
System.out.println("收件箱中共" + folder.getUnreadMessageCount() + "封未读邮件!");
System.out.println("收件箱中共" + folder.getNewMessageCount() + "封新邮件!");
System.out.println("收件箱中共" + folder.getDeletedMessageCount() + "封已删除邮件!");
执行 报错。。。。。
Exception in thread "main" javax.mail.AuthenticationFailedException: ??????????????????????¨??ssl?????ê?????÷???é??: http://service.mail.qq.com/cgi-bin/help?id=28
at com.sun.mail.imap.IMAPStore.protocolConnect(IMAPStore.java:474)
at javax.mail.Service.connect(Service.java:275)
at javax.mail.Service.connect(Service.java:156)
at javax.mail.Service.connect(Service.java:176)
at org.jhrcore.client.zhaopin.comm.IMAPReceiveMailTest.main(IMAPReceiveMailTest.java:55)
Java Result: 1

邮箱imap pop3服务都开启了

    使用pop3j协议尝试以下,看可能好使不

    这个报错是认证失败了,可能用户名密码出错。

    认证失败,还可能是连续的访问,被邮件服务器拒绝了,过一会在尝试。


QQ邮箱 POP3 和 SMTP 服务器地址设置如下:

POP3服务器(端口110)pop.qq.com
SMTP服务器(端口25)  smtp.qq.com

SMTP服务器需要身份验证。

如果是设置POP3和SMTP的SSL加密方式,则端口如下:
imap服务器(端口993)

POP3服务器(端口995)

SMTP服务器(端口465或587)。

参考技术A 出现这个问题,说明验证失败,对于QQ来说,properties的设置,要多写一个SSl认证,QQ邮件是用了SSl加密了,不验证,就会出现这样的报错提示

JavaMail入门第四篇 接收邮件

上一篇JavaMail入门第三篇 发送邮件中,我们学会了如何用JavaMail API提供的Transport类发送邮件,同样,JavaMail API中也提供了一些专门的类来对邮件的接收进行相关的操作,在介绍这些类之前,我们先来了解下邮件接收API的体系结构,JavaMail API中定义了一个java.mail.Store类,它用于执行邮件的接收任务,我们在程序中调用这个类中的方法可以获取邮箱中的各个邮件夹的信息。JavaMail使用Folder对象表示邮件夹,通过Folder对象的方法可以获取邮件夹中的所有邮件信息,而我们知道邮件的信息可以使用Message对象来表示,Message类中就包含了操作邮件的各种方法了,例如获取邮件的发送者,主题,正文内容,发送时间等,它们工作关系如下:

1、从Session对象中获得实现了某种邮件发送协议的Store对象;

2、登录邮箱,连接上POP3或者IMAP4服务器;

3、调用Store的getFolder方法,获取邮箱中的某个邮件夹的Folder对象;

4、调用Folder对象中的getMessage或getMessages方法,获取邮件夹中的某一封邮件或者是所有邮件,每一封的邮件以一个Message对象返回。

接下来我们用以上类来接收邮件

 1 import java.util.Properties;
 2 
 3 import javax.mail.Address;
 4 import javax.mail.Folder;
 5 import javax.mail.Message;
 6 import javax.mail.Session;
 7 import javax.mail.Store;
 8 
 9 class MailReceives {
10     public static void main(String[] args) throws Exception {
11         // 定义连接POP3服务器的属性信息
12         String pop3Server = "pop.qq.com";
13         String protocol = "pop3";
14         String username = "123456@qq.com";
15         String password = "****************"; // QQ邮箱的SMTP的授权码,什么是授权码,它又是如何设置?
16 
17         Properties props = new Properties();
18         props.setProperty("mail.transport.protocol", protocol); // 使用的协议(JavaMail规范要求)
19         props.setProperty("mail.smtp.host", pop3Server); // 发件人的邮箱的 SMTP服务器地址
20 
21         // 获取连接
22         Session session = Session.getDefaultInstance(props);
23         session.setDebug(false);
24 
25         // 获取Store对象
26         Store store = session.getStore(protocol);
27         store.connect(pop3Server, username, password); // POP3服务器的登陆认证
28 
29         // 通过POP3协议获得Store对象调用这个方法时,邮件夹名称只能指定为"INBOX"
30         Folder folder = store.getFolder("INBOX");// 获得用户的邮件帐户
31         folder.open(Folder.READ_WRITE); // 设置对邮件帐户的访问权限
32 
33         Message[] messages = folder.getMessages();// 得到邮箱帐户中的所有邮件
34 
35         for (Message message : messages) {
36             String subject = message.getSubject();// 获得邮件主题
37             Address from = (Address) message.getFrom()[0];// 获得发送者地址
38             System.out.println("邮件的主题为: " + subject + "\\t发件人地址为: " + from);
39             System.out.println("邮件的内容为:");
40             message.writeTo(System.out);// 输出邮件内容到控制台
41         }
42 
43         folder.close(false);// 关闭邮件夹对象
44         store.close(); // 关闭连接对象
45     }
46 }

控制台输出结果:

可以看到控制台输出的是邮件的原始内容,还未被解析,所以需要经过解析才能阅读,下一篇JavaMail入门第五篇 解析邮件将讲解如何解析邮件。

以上是关于javamail接收邮件报错的主要内容,如果未能解决你的问题,请参考以下文章

JavaMail入门第四篇 接收邮件

JavaMail入门第四篇 接收邮件

用javamail接收企业邮箱里的邮件信息的问题

邮件实现详解------JavaMail 发送(带图片和附件)和接收邮件

javaMail邮件接收解析内容及附件 及删除邮件

javamail接收邮件(zt)