`
zqb666kkk
  • 浏览: 733442 次
  • 性别: Icon_minigender_1
  • 来自: 宁波
社区版块
存档分类
最新评论

javax.mail.AuthenticationFailedException异常一个让你想不到的原因

阅读更多
用多个邮件给多个邮件发邮件时遇到的问题以及解决

用spring封装的javamail
做邮件群发 涉及到负载均衡 比如 先用1@qq.com2@qq.com发1封邮件(这时候没报错)
再用3@qq.com给  4@qq.com发1封邮件(也没报错)
再用用zqqrt@163.com给yuu777@163.com发1封邮件(这时候就报错了:javax.mail.AuthenticationFailedException)
如果百度搜这个异常都是说用户名密码错误啊之类的
原因,但是用户名密码 smtp  端口我确定是没有问题的,如果 我单独用这个zqqrt@163.com发邮件也是没有问题的,这就奇怪了
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(username, password);
}

而且 经过调试 上面的 username, password自始自终都是第一次的帐号密码 后来的163的值根本没传过来
后来总算找到一个帖子http://luckykapok918.blog.163.com/blog/static/20586504320123184515391/

找到了原因

邮件验证的时候 Session.getDefaultInstance(props, authentic);
何谓getDefaultInstance?
从处理流程中可以看出,首先是从缓存中查找是否有properties存在
如果存在,则加载默认的properties
如果不存在才加载用户自己定义的properties,
所以当一个应用为每个用户独立创建properties的时候,还是应该调用getInstance,
除非你希望有一个默认的properties让用户使用

它会首先去内存和系统文件中去找properties,所以不管我在页面改几次数据或者方法参数里传多少次不同的邮件帐号如果有smtp不同的都是按照第一次的来,其实在后台中生成session时都和系统启动时的一 样,所以在MailUtil.sendTextMessage(mailSession,RptTaskMailConfig.Sender,
receiver,null,mail_subject,mail_content,"GB2312",null);时session里的sender和传入的sender不一致,因此出错
报javax.mail.AuthenticationFailedException


session.getdefaultinstance和getinstance的区别 (引自网络):

如果想要同时使用两个帐号发送javamail,比如使用1@a.com发送1#邮件,使用2@a.com发送2#邮件,这时候,你就需要同时创建两个java.mail.Session对象。但是如果你仍然使用Session.getDefaultInstance创建session对象的话,你会发现,第二个username:2@a.com创建的session永远都和第一个一样,这是为什么呢?因为,getDefaultInstance是真正单例模式,而且,里面的username和password属性是final型的,无法更改。所以,你会发现两封email都是由1@a.com发出来的。所以这个时候你要使用javax.mail.Session.getInstance()方法来创建session对象。


所以如果 发邮件一直 只用一个邮件发 是不会有问题的

但是你会随机选择不同邮件服务地址来给不同人发邮件
就要注意这个问题

2
1
分享到:
评论
13 楼 和尚啊和尚 2016-12-01  
唱歌给你昌哥听 写道
密码为在163邮箱设置上的客户端授权码,而不是你登陆邮箱时候的真实密码。

这个才是真正解决问题的人 许多人真的瞎逼逼  日了狗了
12 楼 唱歌给你昌哥听 2016-07-15  
密码为在163邮箱设置上的客户端授权码,而不是你登陆邮箱时候的真实密码。
11 楼 唱歌给你昌哥听 2016-07-15  
public static void main(String args[])  { 
        JavaMailSenderImpl senderImpl = new JavaMailSenderImpl(); 
        // 设定mail server 
        senderImpl.setHost("smtp.163.com"); 
        senderImpl.setPort(25);
        senderImpl.setProtocol("smtp");
        // 建立邮件消息 
        SimpleMailMessage mailMessage = new SimpleMailMessage(); 
        // 设置收件人,寄件人 用数组发送多个邮件 
        // String[] array = new String[] {"sun111@163.com","sun222@sohu.com"}; 
        // mailMessage.setTo(array); 
        mailMessage.setTo("xx@qq.com"); 
        mailMessage.setFrom("xxx@163.com"); 
        mailMessage.setSubject(" 测试简单文本邮件发送! "); 
        mailMessage.setText(" 测试我的简单邮件发送机制!! "); 
 
        senderImpl.setUsername("XX"); // 根据自己的情况,设置username 
        senderImpl.setPassword("xxxx"); // 密码为在163邮箱上的授权码
 
        Properties prop = new Properties(); 
        prop.put("mail.smtp.auth", "true"); // 将这个参数设为true,让服务器进行认证,认证用户名和密码是否正确 
        prop.put("mail.smtp.timeout", "25000"); 
        senderImpl.setJavaMailProperties(prop); 
        // 发送邮件 
        senderImpl.send(mailMessage); 
 
        System.out.println(" 邮件发送成功.. "); 
}
10 楼 唱歌给你昌哥听 2016-07-15  

9 楼 zifangsky 2016-04-05  
wangyuenihao 写道
求用qq邮箱发送 代码 谢谢 qq:1136213544

可以参考我的这篇文章:http://www.zifangsky.cn/203.html
8 楼 zqb666kkk 2014-06-30  
wangyuenihao 写道
求用qq邮箱发送 代码 谢谢 qq:1136213544

用javamail 很简单的
7 楼 wangyuenihao 2014-06-25  
求用qq邮箱发送 代码 谢谢 qq:1136213544
6 楼 日上之禾 2014-06-11  
[u][/u]
5 楼 日上之禾 2014-06-11  
引用
4 楼 日上之禾 2014-06-11  
3 楼 日上之禾 2014-06-11  
安徽
2 楼 日上之禾 2014-06-11  
[color=brown][/color]
安徽
1 楼 日上之禾 2014-06-11  
      

相关推荐

    javax.mail.AuthenticationFailedException异常

    javax.mail.AuthenticationFailedException异常处理。

    javax.mail-1.4.4.jar

    通过java扩展包javax.mail-1.4.4.jar实现邮件发送功能。 import javax.mail.Address; import javax.mail.BodyPart; import javax.mail.Message; import javax.mail.MessagingException; import javax.mail.Multipart...

    javax.mail-1.5.6-API文档-中文版.zip

    赠送jar包:javax.mail-1.5.6.jar; 赠送原API文档:javax.mail-1.5.6-javadoc.jar; 赠送源代码:javax.mail-1.5.6-sources.jar; 赠送Maven依赖信息文件:javax.mail-1.5.6.pom; 包含翻译后的API文档:javax.mail...

    javax.mail-1.6.2-API文档-中英对照版.zip

    赠送jar包:javax.mail-1.6.2.jar; 赠送原API文档:javax.mail-1.6.2-javadoc.jar; 赠送源代码:javax.mail-1.6.2-sources.jar; 赠送Maven依赖信息文件:javax.mail-1.6.2.pom; 包含翻译后的API文档:javax.mail...

    javax.mail-1.6.0.jar包及移入maven仓库语句

    在Java开发中,`javax.mail`库是一个非常重要的组件,主要用于处理电子邮件的发送与接收。这个库提供了丰富的API,使得开发者能够轻松地实现邮件服务的功能。`javax.mail-1.6.0.jar`是该库的一个特定版本,包含了...

    javax.mail.jar下载

    在Java编程环境中,`javax.mail.jar` 是一个非常重要的库,它提供了用于发送和接收电子邮件的API。这个库是JavaMail API的一部分,主要用于处理SMTP(简单邮件传输协议)、POP3(邮局协议版本3)和IMAP(因特网消息...

    javax.mail-1.5.6-API文档-中英对照版.zip

    赠送jar包:javax.mail-1.5.6.jar; 赠送原API文档:javax.mail-1.5.6-javadoc.jar; 赠送源代码:javax.mail-1.5.6-sources.jar; 赠送Maven依赖信息文件:javax.mail-1.5.6.pom; 包含翻译后的API文档:javax.mail...

    基于Maven的javax.mail发送邮件例子程序

    基于Maven的javax.mail发送邮件例子程序 pom.xml添加依赖jar: <groupId>javax.mail <artifactId>mail ${javamail.version} </dependency> <javamail.version>1.4.1</javamail.version> /* 功能:...

    javax.mail-1.6.2_javamailjar1.6.2_javamail-1.6.2_javax.mail_java

    `javax.mail-1.6.2_javamailjar1.6.2_javamail-1.6.2_javax.mail_java` 这个标题暗示了我们正在讨论的是 JavaMail 的 1.6.2 版本,这是一个稳定且广泛使用的版本。 JavaMail API 提供了一套标准的接口,用于与邮件...

    javax.mail.jar-Java发送邮件API

    javax.mail.jar-Java发送邮件API。Apache Email基于javax.mail做了一个开源项目,参见:http://commons.apache.org/proper/commons-email/

    javax.mail.1.4.7.jar

    标题中的"javax.mail.1.4.7.jar"指的是JavaMail的一个特定版本,即1.4.7,这是一个包含所有JavaMail核心类库的JAR文件,可以被开发者集成到他们的Java项目中。 JavaMail的核心组件主要包括以下几个部分: 1. **...

    javax.mail-api-1.6.2.jar

    通过错误描述我们发现java.lang.NoClassDefFoundError: javax/mail/MessagingException,主要说找不到这个类。通过查询发现是缺少javax.mail-api-1.6.2.jar和activation-1.1.1.jar包。在maven上下载即可

    javax.mail-1.5.2源码

    `javax.mail` 是Java平台上的一个标准API,用于处理电子邮件通信。这个API提供了一套全面的接口和类,使得开发者可以方便地实现邮件发送、接收、管理邮箱等操作。`javax.mail-1.5.2` 版本是这个库的一个特定发行版,...

    javax.persistence.jar

    Files contained in javax.persistence.jar: META-INF/MANIFEST.MF javax.persistence.Access.class javax.persistence.AccessType.class javax.persistence.AssociationOverride.class javax.persistence....

    javax.jms.jar

    Classes contained in javax.jms.jar: javax.transaction.xa.XAResource.class javax.jms.BytesMessage.class javax.jms.Message.class javax.jms.JMSException.class javax.jms.Destination.class javax.jms....

    javax.jms.jar下载

    javax.jms.BytesMessage.class javax.jms.Connection.class javax.jms.ConnectionConsumer.class javax.jms.ConnectionFactory.class javax.jms.ConnectionMetaData.class javax.jms.DeliveryMode.class javax.jms....

    javamail1.4.5和javax.mail-1.5.5.jar

    总的来说,`javamail1.4.5` 和 `javax.mail-1.5.5.jar` 提供了强大的邮件处理功能,让Java开发者能够轻松地集成邮件功能到他们的应用程序中。选择哪个版本取决于具体项目的需求,包括兼容性、性能和新特性需求。

    javax.servlet jar包---解决找不到javax.servlet.*等问题

    当你遇到“找不到javax.servlet.*”这样的错误时,通常是因为你的项目缺少了这个库,所以需要引入`javax.servlet.jar`来解决问题。 1. **Java Servlet简介** Java Servlet是Java平台上的一个标准,用于扩展服务器...

    javax.ejb.jar下载

    Files contained in javax.ejb.jar: META-INF/MANIFEST.MF javax.ejb.AccessLocalException.class javax.ejb.AccessTimeout.class javax.ejb.ActivationConfigProperty.class javax.ejb.AfterBegin.class javax....

    javax.mail.jar

    在Java编程领域,`javax.mail.jar`是一个重要的库文件,它包含了Java Mail API的所有类和接口,用于处理电子邮件的发送和接收。Java Mail API是Java平台上的标准API,它允许开发人员编写与邮件服务器进行交互的应用...

Global site tag (gtag.js) - Google Analytics