Linux centos7下使用postfix/dovecot搭建自己的SMTP邮件服务器


前言

在我们日常开发中,有些项目可能有发送邮件需求,我们日常用的各个个人邮箱也能开启SMTP服务,但是发送数量和内容有诸多限制。本文将使用Postfix+Dovecot在自己的服务器上来搭建一个SMTP服务,虽然也有某些限制,但是对一些小系统或者内部系统来说已经足够了,如果你也有这样的需求,请跟着步骤一步一步来。下面我们进入搭建环节,所需要的环境如下:

所需环境
操作系统centos7.0+服务器一台
域名一个
服务器需开通25端口

一、安装Postfix

yum -y install postfix

安装完成替换系统自带的sendmail:

yum remove sendmail

修改MTA(默认邮件传输代理):

alternatives --config mta

如下图所示:
在这里插入图片描述
选择1然后按回车。

检查是否已经设置成功了:

alternatives --display mta

如下图所示,表示安装成功:
在这里插入图片描述

二、安装Dovecot

yum -y install dovecot

三、配置Postfix

vim /etc/postfix/main.cf

1.设置hostname、mydomain、myorigin

如下图所示:
在这里插入图片描述
这里我用的域名为:code-long.com,请根据自己的域名进行替换

2.设置inet_interfaces、inet_protocols

如下图所示:
在这里插入图片描述

3.设置SMTP认证

在文件末尾追加如下配置:

# SMTP认证
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_sasl_auth_enable = yes
smtpd_sasl_security_options = noanonymous
smtpd_sasl_local_domain = $myhostname
smtpd_recipient_restrictions = permit_mynetworks,permit_auth_destination,permit_sasl_authenticated,reject

至此Postfix配置完成,保存退出:

:wq

四、配置Dovecot

1.设置dovecot.conf

vim /etc/dovecot/dovecot.conf

如下图所示:
在这里插入图片描述

2.设置10-auth.conf

vim /etc/dovecot/conf.d/10-auth.conf

修改:disable_plaintext_auth、auth_mechanisms,如下图所示:
在这里插入图片描述
在这里插入图片描述

3.设置10-master.conf

vim /etc/dovecot/conf.d/10-master.conf

修改postfix认证:

unix_listener /var/spool/postfix/private/auth {
    mode = 0666
    user = postfix
    group = postfix
}

如下图所示:
在这里插入图片描述
至此,dovecot配置完成

五、启动Postfix、Dovecot

启动postfix

service postfix start

启动dovecot

service dovecot start

如果没有异常提示说明启动成功了。查看状态,如图所示:
在这里插入图片描述

六、配置域名

前面我们已经搭建好了SMTP服务,但是要使用需要用到域名,因为我们在postfix配置里面加入了域名,域名大家可以去各大云市场购买,我这里使用了Cloudflare的域名。

1.解析A记录

在postfix的配置里面我们设置了一个:

myhostname = mail.code-long.com

这里我们需要解析一个子域名为mail的A记录,并将记录值执行服务器的IP,这个IP需要公网IP,域名解析过程如下图所示:
在这里插入图片描述

1.解析MX记录

另外我们还需要解析一个MX记录,主机记录为空,记录值需要指向我们上面的A记录子域名:mail.code-long.com,优先级为:10。如下图:

在这里插入图片描述
至此域名解析也完成,如果你使用的是其他平台的域名,解析过程大同小异。

七、测试邮箱

1.设置用户

使用postfix/dovecot提供的服务,他们的用户使用的是Linux的系统用户和密码,比如我可以使用root用户和密码来作为邮箱的管理员,但这样会有诸多的安全问题。所以这里我们创建一个新的系统用户专门来作为邮箱管理员。
创建用户:

useradd mail_admin

设置密码:

passwd mail_admin

输入密码后,创建成功,这里为了安全起见,我们进制这个用户使用ssh远程登录:

usermod -s /sbin/nologin mail_admin

2.在项目中应用(Java)

这里我们使用springboot的邮件模块来测试刚才我们搭建的SMTP服务来发送邮件:
在pom.xml中添加如下:

<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-mail</artifactId>
</dependency>

添加如下配置:

mail.from=mail_admin@code-long.com
spring.mail.host=mail.code-long.com
spring.mail.port=25
spring.mail.username=mail_admin
spring.mail.password=AMXtRByuFNn4
spring.mail.properties.mail.smtp.auth=true
spring.mail.properties.mail.smtp.starttls.enable=false
spring.mail.properties.mail.smtp.starttls.required=false
spring.mail.properties.mail.smtp.ssl.enable=false

发送邮件关键代码:

    @Resource
    private JavaMailSender mailSender;
    @Resource
    private Environment env;

    @RequestMapping("/send")
    public Object sendMail(@RequestParam String to, @RequestParam String content){
        String from = env.getProperty("mail.from");
        String mail_nick="系统名称";
        String subject="这是一个测试邮件";
        try {
            MimeMessage mimeMessage = mailSender.createMimeMessage();
            MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(mimeMessage, true, "UTF-8");
            mimeMessageHelper.setTo(to);
            String nick = MimeUtility.encodeText(mail_nick);
            mimeMessageHelper.setFrom(new InternetAddress(nick + " <" + from + ">"));
            mimeMessageHelper.setSubject(subject);
            mimeMessageHelper.setText(content, true);
            mailSender.send(mimeMessage);
            return ResponseEntity.ok().body("true");
        } catch (Exception e) {
            log.error("发送邮件失败:",e);
            return ResponseEntity.badRequest().body(e.getMessage());
        }
    }

测试结果如下:
在这里插入图片描述
在这里插入图片描述
至此整个SMTP邮件服务我们就搭建完成,测试代码已放在最顶部。

后记(踩坑)

  1. 上面的我们只配置了postfix/dovecot的SMTP服务,也就是只能发送邮件,但大部分场景下,管理员邮箱是不需要接收邮件的,但如果要收邮件,需要配置dovecot的IMAP或者POP协议,大家可以自行研究。
  2. 如果你使用国内服务器来搭建,服务器的25端口需要你的域名和服务器备案才行,这是个坑
  3. 经过测试目前qq和163的邮箱能收到邮件,gmail收不到,其他邮箱有待测试。而且邮件基本上会归类到垃圾箱中,gmail因为其安全限制完全收不到,大家可以研究一下怎么处理,如果这个问题处理好了希望能给我回复一下。
  4. 如果邮件在垃圾箱中,可以设置一下这个用户为你的信任用户,这样后面的邮件就能正常归类了。
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

流年五十前

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值