一、创建域名邮箱
QQ和网易都可以申请免费的域名邮箱。我在QQ邮箱里申请的。如下图,进入你的QQ邮箱,点击设置==》账户,在里面找到“域名邮箱部分”,点击“管理域名邮箱”。
会让你创建域名邮箱,按照提示做即可。我的域名是在百度云申请的,下图是我在百度云的邮箱域名解析:
二、java发送邮件
java发送邮件的代码网上多的是,我就不说了。只说一下我遇到的问题。
首先因为使用QQ的邮箱服务器发送邮件(域名邮箱解析到了QQ邮件服务器),所以mail.smtp.host要配置为smtp.qq.com。
另外,我遇到了一个异常530 Error: A secure connection is requiered(such as ssl),这是因为QQ邮箱服务器强制要求使用安全方式发送(例如SSL)。所以还要配置mail.smtp.starttls.enable为true。
第三个问题是QQ邮箱在客户端登录或使用时,不是使用邮箱密码,而是使用“授权码”。什么是授权码以及如何生成,请见QQ邮箱的帮助中心,这里给出链接:http://service.mail.qq.com/cgi-bin/help?subtype=1&&id=28&&no=1001256
所以在发送邮件时使用的密码并不是邮箱密码,而是这个所谓的授权码。
温馨提醒:为了你的帐户安全,更改QQ密码以及独立密码会触发授权码过期,需要重新获取新的授权码登录。
三、自定义发件人昵称
既然是使用域名邮箱,当然希望别人收到的邮件显示你的团队或企业的名称,而不是默认显示邮箱用户名。我的域名邮箱是admin@remotejob.cn,但我不希望用户收到邮件时显示admin,这是谁啊,谁知道呢!我希望显示我的网站名称“七星远程”。所以请看下面代码实现:
// 设置发信人
//message.setFrom(new InternetAddress(authenticator.getUserName())); //我不想显示默认昵称,我要显示个性昵称,所以注释掉这个。
//设置自定义发件人昵称
String nickName = "";
try {
nickName = javax.mail.internet.MimeUtility.encodeText("七星远程"); //解决中文乱码问题
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
message.setFrom(new InternetAddress(nickName + " <admin@remotejob.cn>")); //使用我自定义的昵称。
四、异步方式发送邮件
同步方式发送邮件,程序需要等待邮件发送结果,通常需要几秒钟时间,用户体验不好。所以我改用异步方式发送邮件,即启用一个新的线程去发送。一般都是使用线程池。
线程池怎么用就不用说了吧,可以自己写,也可以使用spring集成的,都比较简单。