搭建自己的发送邮件服务器

简介: 搭建自己的发送邮件服务器

前言


自己博客网站的需要,想弄一个用户注册发送验证码的基本邮件操作,原来的实现的方法使用的是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

1.jpg


第三步:安装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

4.jpg

加入证书:

[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.

3.jpg成功了,是吧,但是出现了

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

2.jpg

完美运行!!!!!!

相关文章
|
28天前
|
数据安全/隐私保护 Python
Django调用MTP服务器给指定邮箱发送邮件
Django调用MTP服务器给指定邮箱发送邮件
|
2月前
|
监控 前端开发
Zabbix使用外部邮箱服务器发送邮件报警
Zabbix使用外部邮箱服务器发送邮件报警
|
2月前
|
小程序 前端开发 JavaScript
node使用nodemailer在本地可以正常发送邮件,放服务器后无法发送报错
node使用nodemailer在本地可以正常发送邮件,放服务器后无法发送报错
|
7月前
|
Linux
如何在centos7服务器上使用qq发送邮件
如何在centos7服务器上使用qq发送邮件
71 0
|
8月前
|
网络安全 数据安全/隐私保护
用smtp发送邮件,语法错误,无法识别命令。 服务器响应为:Authentication is re
用smtp发送邮件,语法错误,无法识别命令。 服务器响应为:Authentication is re
125 0
|
9月前
|
域名解析 网络协议 网络安全
当您的域名解析的邮件服务器无法发送邮件时,可以检查以下几个方面
当您的域名解析的邮件服务器无法发送邮件时,可以检查以下几个方面
292 1
|
9月前
|
域名解析 网络协议 网络安全
域名解析的邮件服务器无法发送邮件时
域名解析的邮件服务器无法发送邮件时
74 1
|
9月前
|
域名解析 网络协议 网络安全
DNS中我们域名解析的邮件服务器现在不能发送邮件了,能不能看下解析这边有没有问题?
DNS中我们域名解析的邮件服务器现在不能发送邮件了,能不能看下解析这边有没有问题?
99 1
|
10月前
|
Java Linux 网络安全
Linux CentOS7搭建邮件服务器并用Foxmail和Java代码发送邮件(下)
Linux CentOS7搭建邮件服务器并用Foxmail和Java代码发送邮件(下)
372 0
|
10月前
|
域名解析 Java Linux
Linux CentOS7搭建邮件服务器并用Foxmail和Java代码发送邮件(上)
Linux CentOS7搭建邮件服务器并用Foxmail和Java代码发送邮件(上)
514 0