使用域名邮箱发送邮件

时间:2022-09-24 13:19:34

一、创建域名邮箱

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集成的,都比较简单。