Linux中用postfix搭建邮件服务器实战详解

createh53周前 (12-15)技术教程16

写在前面:自建邮件服务器发出的邮件有很大概率会被各大邮件服务商列入垃圾邮件箱中,我在搭建过程中发现在设置了dkim spf 等操作后,国内邮件基本可以正常发到收件箱,但 google 邮箱貌似还是会进入垃圾箱,有大佬知道怎么解决的可以探讨一下。

postfix是Wietse Venema在IBM的GPL协议之下开发的MTA(邮件传输代理)软件。Postfix试图更快、更容易管理、更安全,同时还与sendmail保持足够的兼容性,因此它是免费的。postfix的产生是为了替代传统的sendmail。相较于sendmail,postfix在速度,性能和稳定性上都更胜一筹。现在主流邮件服务都在采用postfix. 当需要一个轻量级的的邮件服务器时,postfix也是一种选择。

常见的邮件服务器软件:

sendmail:性能好,设置复杂,适合老手

qmail:体积小260+k ,模块化。需要做二次开发,适合对邮件性能有要求的

postfix:前身是sendmail,postfix原本是sendmail里面的一个模块,红帽6默认安装好postfix

zmailer:近几年才出来的邮件

coremail:国内做的最好的商业平台,运行在linux上

---------------------

Linux搭建SMTP发送邮件服务器

1.关掉sendmail相关的所有服务,最好是直接卸载sendmail.

# service sendmail stop

# chkconfig sendmail off

# rpm -qa | grep sendmail | xargs rpm -e

2.安装postfix.

查看是否安装

# rpm -qa | grep postifx

没有安装的话,可以手动安装。

# yum -y install postfix

检查mail

# rpm -qa | grep mail

如果没安装就运行该命令

# yum -y install mailx

3.安装完成后,修改配置文件:/etc/postfix/main.cfg

修改postfix配置文件文件位置:/etc/postfix/main.cf

修改以下参数,将xxx.com换成你的域名,如果参数前面有#注释,记得去掉

myhostname = mail.xxx.com

mydomain = xxx.com

myorigin = $mydomain

inet_interfaces = all

inet_protocols = ipv4

mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain

home_mailbox = Maildir/

4.修改完成后重启postifx:

# service postfix restart

---------------------

myhostname = sample.test.com  ← 设置系统的主机名

mydomain = test.com  ← 设置域名(我们将让此处设置将成为E-mail地址“@”后面的部分)

myorigin = $mydomain  ← 将发信地址“@”后面的部分设置为域名(非系统主机名)

inet_interfaces = all  ← 接受来自所有网络的请求

inet_protocols = ipv4 ← ipv4要用小写的,注释里大写的是错的

mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain  ← 指定发给本地邮件的域名

home_mailbox = Maildir/  ← 指定用户邮箱目录

邮箱投递方式有两种:

一种是Mailbox方式,即同一个用户的所有邮件内容存储为单个文件,通常保存在/var/spool/mail/目录下文件名与用户名相同(Postfix默认使用);

第二种是Maildir方式,即使用目录结构来存储用户的邮件内容每一个用户使用一个文件夹,每封邮件都作为一个独立的文件存放。Maildir方式的存取速度和效率要好一些对于管理邮件内容页更加方便。

5.设置域名DNS

在邮件发送过程中,需要把邮件地址的domain地址转化成IP地址,再去发送给对应的收件人。(DNS中的A记录和MX记录)

如何添加DNS server?

#vim /etc/resolv.conf

添加如下行:

nameserver 8.8.8.8

nameserver 8.8.4.4

上面用的8.8.8.8/8.8.4.4是Google Free DNS server,当然还有很多免费的DNS server)

有些安装后自动就添加了上面的DNS配置了,不需要再添加了

6.测试一下邮件是否能够发送成功:

发送邮件到QQ或163邮箱测试效果

echo "content" | mail -s "title" xxx@163.com163

邮箱发送人显示的"root@xxx.com 注意:前面有个双引号不是单纯root

echo "content" | mail -s "title" xxx@foxmail.com

在foxmail邮箱里面收到的是:发件人:root <root@xxx.com>

注意:该配置只能是发送邮件,并不能接收邮件。

要用java调用shell命令发送邮件请看本人另外一篇博客:

Java执行shell脚本并返回结果两种方法的完整代码 - 流风,飘然的风 - 博客园https://www.cnblogs.com/zdz8207/p/java-linux-shell.html

-------------

7.查看log,确认邮件发送状态:Postfix邮件的log位置是:/var/log/maillog发送成功的话,会返回250和OK,也可以去自己的邮件客户端查收。mailq :会列出当前在postfix发送队列中的所有邮件postsuper -d ALL:删除当前等待发送队列的所有邮件,包括发送失败的退信

查看进程:

# ps -ef | grep postfix

root 6104 1 0 01:45 ? 00:00:00 /usr/libexec/postfix/master -w

postfix 6106 6104 0 01:45 ? 00:00:00 qmgr -l -t unix -u

postfix 7946 6104 0 03:25 ? 00:00:00 pickup -l -t unix -u

root 8007 5166 0 03:27 pts/0 00:00:00 grep --color=auto postfix

============

CentOS中禁止掉邮件服务postfix:

查看状态

# service postfix status

systemctl status postfix

systemctl is-enabled postfix

禁止掉邮件服务postfix:

sudo systemctl stop postfix

sudo systemctl disable postfix

在操作之前和之后,可以查看状态:

systemctl status postfix

systemctl is-enabled postfix

================================

# systemctl is-enabled postfix

enabled

[root@alternative-unicorn-2 ~]# sudo systemctl stop postfix

[root@alternative-unicorn-2 ~]# sudo systemctl disable postfix

Removed symlink /etc/systemd/system/multi-user.target.wants/postfix.service.

[root@alternative-unicorn-2 ~]# systemctl is-enabled postfix

disabled

[root@alternative-unicorn-2 ~]# systemctl status postfix

● postfix.service - Postfix Mail Transport AgentLoaded: loaded

(/usr/lib/systemd/system/postfix.service; disabled; vendor preset: disabled)Active: inactive (dead)

相关文章

邮件协议以及java实现邮件功能

前言公司项目要求,需要在某个时间点向全公司未填报工时的员工推送提醒邮件。借着这个机会在这边给大家分享一下邮件的一些协议以及如何通过java实现发送代码协议介绍Smtp协议:邮件服务器之间传递消息所使用...

实战!SpringBoot整合Vue3完美实现发送邮件的功能!

1.效果演示2.思维导图3.前言本篇文章主要讲解 Springboot 整合 Vue3 实现校验 qq 邮箱验证码之后重置用户密码的功能。开发功能之前我们先梳理一下主要逻辑:1.我们要想让系统给其他用...

Java之数组数据操作之电子邮件地址判断

java源代码:/***<p>Title:数组数据操作之电子邮件地址判断</p>*<p>Description:演示一维数组和多维数组的初始化和基本操作</p...

使用这个jar包,不到10分钟便可接入短信及邮件发送功能!

最近在给我的AI工具(https://ai.quanyouhulian.com/)新增个**短信及邮箱登录功能,按传统方式,一般是在后端引入各短信服务商SDK-jar包,以及短信邮件的maven包(j...

spring boot集成spring-boot-starter-mail邮件功能

前情提要以目前IT系统功能来看,邮件功能是非常重要的一个功能。例如:找回密码、邮箱验证,邮件动态码、忘记密码,邮件营销等,都需要用到邮件功能。结合当下最流行的spring boot微服务,推出了spr...

Java二十周年特别策划--谈谈我与Java的那些年、这些事

Java作为当今最流行的编程技术之一,它的出现不仅给软件产业带来了深远影响,也改变了许多人的人生轨迹。得益于其技术平台的通用性、高效性、平台移植性和安全性,许多企业纷纷选用Java作为技术支撑,获得了...