Javamail接收用pop3协议接收邮件的时候,我们可以通过创建一个Authenication类来保存用户验证信息
public class MyAuthenticator extends Authenticator {
private String strUser;
private String strPswd;
/**
* Initial the authentication parameters.
*
* @param username
* @param password
*/
public MyAuthenticator(String username, String password) {
this.strUser = username;
this.strPswd = password;
}
/**
* @return
*/
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(strUser, strPswd);
}
}
然后再session当中使用这个类的实例
Properties props = null;
Session session = null;
props = System.getProperties();
props.put("mail.pop3.host", host);
props.put("mail.pop3.auth", "true");
props.put("mail.pop3.port", port);
Authenticator auth = new MyAuthenticator(userName, password);
session = Session.getDefaultInstance(props, auth);
Store store = session.getStore("pop3");
store.connect();
...
这样我们就可以通过一个MyAuthenticator来保存用户的验证信息了。
当我们使用单个线程运行的时候,以上的代码或许会运行正确,但是在多线程的环境下,此段代码有可能引发AuthenticatioinFailedException
原因在于session和props不是一个独立的实例,在多线程的时候会互相影响,特别在读取不同的POP3服务器的时候
这个时候我们需要对第2段代码进行一些改动
Properties props = null;
Session session = null;
// props = System.getProperties();
props = new Properties();
props.put("mail.pop3.host", host);
props.put("mail.pop3.auth", "true");
props.put("mail.pop3.port", port);
Authenticator auth = new MyAuthenticator(userName, password);
// session = Session.getDefaultInstance(props, auth);
session = Session.getInstance(props, auth);
Store store = session.getStore("pop3");
store.connect();
...
new Properties()以及session.getInstance(props, auth)就会确保每一个线程之间的实例都是独立的,在多线程运行环境下保证资源不冲突,避免了AutherticationFailedException的发生。
(欢迎指正和补充)
分享到:
相关推荐
使用javamail捕获异常发送邮件的三个jar包(activation.jar、mail.jar、additionnal.jar)
javamail开发,带图形界面,邮件的发送,接收,带附件,html,邮件解析
javamail的jar包:javamail-1.6; javamail的jar包:javamail-1.6
javamail中文API文档 方法解释详细。
javamail.jar,javamail资源包
JavaMail邮件收发实例_JavaMail_API JavaMail邮件收发实例_JavaMail_API JavaMail邮件收发实例_JavaMail_API JavaMail邮件收发实例_JavaMail_API JavaMail邮件收发实例_JavaMail_API
包含JavaMail1.4.5、JAF1.1.1、JavaMail API文档英文版,以及JavaMailAPI中文详解
javaMail javaMail javaMail javaMail javaMail javaMail javaMail
JavaMail_API基本原理,JavaMail_API学习javaMail必备,
javaMail API 跟 jar包
javamail发送邮件实例 javamail 发送邮件 文本编辑器 kindeditor
内部还有开发javamail所需要的所有jar包 activation.jar mail.jar
JAVAMAIL开发JAVAMAIL开发
JavaMail,顾名思义,提供给开发者处理电子邮件相关的编程接口。它是Sun发布的用来处理email的API。它可以方便地执行一些常用的邮件传输。我们可以基于JavaMail开发出类似于Microsoft Outlook的应用程序。 虽然...
JavaMail JavaMail JavaMail JavaMail JavaMail JavaMail JavaMail
JavaMail API详解.txt JavaMail API详解.txt JavaMail API详解.txt JavaMail API详解.txt
javaMail示例javaMail示例javaMail示例javaMail示例javaMail示例javaMail示例,我自己做的,保证运行成功,里面jar包都有,只需导入即可,把邮箱设置一下就可以了。
内含JavaMail的两个jar压缩包jaf-1_1_1.zip和javamail1_4_7.zip
javamail源码;版本1.4.3 ;javamail源代码;javamail sources
javamail依赖的包.