javax.mail.MessagingException: A3 NO EXAMINE Unsafe Login.

这里写自定义目录标题

问题描述

因公司业务需求,需要用程序访问163邮箱,读取并发送邮件;测试阶段用的是我本人的邮箱,该邮箱注册时间在10年以上,开发测试一切正常;
开发完成,在用正式邮箱(最近注册)进行最终测试时,程序报了异常:

javax.mail.MessagingException: A3 NO EXAMINE Unsafe Login. Please contact kefu@188.com for help;
  nested exception is:
	com.sun.mail.iap.CommandFailedException: A3 NO EXAMINE Unsafe Login. Please contact kefu@188.com for help
	at com.sun.mail.imap.IMAPFolder.open(IMAPFolder.java:1022)
	at com.sun.mail.imap.IMAPFolder.open(IMAPFolder.java:950)
	......
	at sun.reflect.GeneratedMethodAccessor19696.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
	at java.lang.reflect.Method.invoke(Unknown Source)
	at org.springframework.util.MethodInvoker.invoke(MethodInvoker.java:283)
	at 

解决方案

经过一番搜索,找到了可行的解决方案,在调用调用open之前,添加如下代码:

			Map<String, String> idMap = new HashMap<String, String>();
			idMap.put("name", "***");// 这里是一个姓名,可以随便写
			idMap.put("version", "7.26");
			idMap.put("os", "windows");
			idMap.put("os-version", "6.1");
			idMap.put("vendor", "***");// 随便写
			idMap.put("contact", "***");// 是一个邮箱
			IMAPStore imapStore = (IMAPStore) store;
			imapStore.id(idMap);

另外,我用的java.mail版本是“1.5.2”

官方给的解释是:

当您使用IMAP协议接收邮件时候,为了用户帐号信息安全,系统要求您的客户端表明相关“身份”信息才可以允许连接。

官方链接:imap连接提示Unsafe Login,被阻止的收信行为

不知道这个链接能存在多久,下面贴出网页内容:

imap连接提示Unsafe Login,被阻止的收信行为
当您使用IMAP协议接收邮件时候,为了用户帐号信息安全,系统要求您的客户端表明相关“身份”信息才可以允许连接。

否则将会返回如下报错:Unsafe Login. Please contact kefu@188.com for help
同时邮箱内将收到相关提醒邮件,如下图所示:
![在这里插入图片描述](https://img-blog.csdnimg.cn/ee63c80875e5454e818c8eee43c956be.png#pic_center)

常用客户端例如:Outlook,foxmail,邮箱大师不会出现该类问题。
如果您所使用的客户端因为该限制导致无法接收。请您联系软件开发人员更新相关源代码,在连接服务器时带上IMAP ID信息,相关JAVA示例代码如下:(其他语言或框架请联系对应开发者处理,网易仅提供JAVA语言示例代码。)
********************代码块区域开始********************
Properties props = new Properties(); 
props.setProperty("mail.store.protocol", "imap"); 
props.setProperty("mail.imap.host", "imap.163.com"); 
props.setProperty("mail.imap.port", "143"); 
HashMap IAM = new HashMap();
//带上IMAP ID信息,由key和value组成,例如name,version,vendor,support-email等。
IAM.put("name","myname");      
IAM.put("version","1.0.0");      
IAM.put("vendor","myclient");      
IAM.put("support-email","testmail@test.com");  
Session session = Session.getInstance(props); 
IMAPStore store = (IMAPStore) session.getStore("imap");
//下方替换对应帐号和授权码
store.connect("testmail@163.com", "password"); 
store.id(IAM);
********************代码块区域结束********************
相关规范链接请参考:
https://www.ietf.org/rfc/rfc2971.txt
https://javaee.github.io/javamail/docs/api/index.html?com/sun/mail/imap/IMAPStore.html
(请使用JavaMail 1.5.1及更新的版本)
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值