前言
自己博客网站的需要,想弄一个用户注册发送验证码的基本邮件操作,原来的实现的方法使用的是client的形式来做的,但是感觉差强人意,不怎么好,所以,今天在自己的服务器上面搭建了自己的邮件发送服务
来看看我们以前如何发送验证码的过程:
@Slf4j @Service public class EmailServiceImpl implements EmailService { private static Properties p = new Properties(); static { p.setProperty("mail.smtp.host", "smtp.163.com"); p.setProperty("mail.smtp.port", "25"); p.setProperty("mail.smtp.socketFactory.port", "25"); p.setProperty("mail.smtp.auth", "true"); p.setProperty("mail.smtp.socketFactory.class", "SSL_FACTORY"); } @Override public void sendEmail(String subject, String receiveEmail, String content) throwsException { //使用JavaMail发送邮件的5个步骤 //1、创建session Session session = Session.getInstance(p, new Authenticator() { // 设置认证账户信息 @Override protected PasswordAuthentication getPasswordAuthentication() { return new PasswordAuthentication("zlgtop@163.com", "XXXX"); } }); //开启Session的debug模式,这样就可以查看到程序发送Email的运行状态 session.setDebug(true); System.out.println("创建邮件"); //4、创建邮件 Message message = createSimpleMail(session, subject, receiveEmail, content); Transport.send(message); //5、发送邮件 } /** */ private MimeMessage createSimpleMail(Session session, String subject, String receiveEmail, String content) throws Exception { //创建邮件对象 MimeMessage message = new MimeMessage(session); //指明邮件的发件人 message.setFrom(new InternetAddress("zlgtop@163.com")); //指明邮件的收件人,现在发件人和收件人是一样的,那就是自己给自己发 message.setRecipient(Message.RecipientType.TO, new InternetAddress(receiveEmail)); //邮件的标题 message.setSubject(subject); //邮件的文本内容 message.setContent(content, "text/html;charset=UTF-8"); //返回创建好的邮件对象 return message; } }
这样的发送时通过代码实现的,但是这样又一个弊端,发送慢,响应慢,不满足自己的性格,遂在网上查看其他人怎么操作的。在自己的服务其上面搭建了一个自己的发送服务,简单而且实用。遂自己也搭建一个。。。
正文
搭建步骤:
第一步:安装mailx
[root@iZ2zea515urn0slvtwbszvZ sbin]# yum install mailx 已加载插件:security 设置安装进程 base | 3.7 kB 00:00 epel | 5.3 kB 00:00 epel/primary_db | 6.1 MB 00:00 extras | 3.4 kB 00:00 extras/primary_db | 29 kB 00:00 updates | 3.4 kB 00:00 updates/primary_db | 4.2 MB 00:00 解决依赖关系 --> 执行事务检查 ---> Package mailx.x86_64 0:12.4-8.el6_6 will be 升级 ---> Package mailx.x86_64 0:12.4-10.el6_10 will be an update --> 完成依赖关系计算
第二步:配置环境
[root@iZ2zea515urn0slvtwbszvZ sbin]# sudo vim /etc/mail.rc
打开后,在最下面加入:
set from=zlgtop@163.com set smtp=smtps://smtp.163.com:465 #配置端口456,原来的是25 但是阿里云服务器25禁用了 set smtp-auth-user=zlgtop@163.com set smtp-auth-password=XXXX #自己的密码 set ssl-verify=ignore set nss-config-dir=/root/.certs #配置端口456 set smtp-auth=login #配置端口456
第三步:安装dos2unix
[root@iZ2zea515urn0slvtwbszvZ sbin]# yum install dos2unix 已加载插件:security 设置安装进程 解决依赖关系 --> 执行事务检查 ---> Package dos2unix.x86_64 0:3.1-37.el6 will be 安装 --> 完成依赖关系计算
第四步:配置端口456证书
[root@iZ2zea515urn0slvtwbszvZ sbin]# echo -n | openssl s_client -connect smtp.163.com:465 | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > ~/.certs/163.crt
加入证书:
[root@iZ2zea515urn0slvtwbszvZ sbin]# certutil -A -n "GeoTrust SSL CA" -t "C,," -d ~/.certs -i ~/.certs/163.crt [root@iZ2zea515urn0slvtwbszvZ sbin]# certutil -A -n "GeoTrust Global CA" -t "C,," -d ~/.certs -i ~/.certs/163.crt
测试一下吧:
[root@iZ2zea515urn0slvtwbszvZ sbin]# echo "邮件主题" |mail -s "邮件内容,这是测试邮件" zlgtop@163.com [root@iZ2zea515urn0slvtwbszvZ sbin]# Error in certificate: Peer's certificate issuer is not recognized.
成功了,是吧,但是出现了
Error in certificate: Peer's certificate issuer is not recognized.
解决方法:
[root@iZ2zea515urn0slvtwbszvZ sbin]# cd /root/.certs/ [root@iZ2zea515urn0slvtwbszvZ .certs]# ls 163.crt cert8.db key3.db secmod.db [root@iZ2zea515urn0slvtwbszvZ .certs]# certutil -A -n "GeoTrust SSL CA - G3" -t "Pu,Pu,Pu" -d ./ -i 163.crt Notice: Trust flag u is set automatically if the private key is present.
测试一下吧!!!!
[root@iZ2zea515urn0slvtwbszvZ .certs]# echo "邮件主题" |mail -s "邮件内容,这是测试邮件" zlgtop@163.com
完美运行!!!!!!