代码旅行

CentOS 7 上安装配置 postfix

最近被 Google 弄得贼闹心,加上邮件转发的需要,所以尝试用开源软件在 CentOS 7 上搭建了邮件服务。之前买过 exchange server,也用过 zimbra 都太臃肿,这次用 postfix 来搭建。

注意 这只是一个学习,非常不建议个人搭建邮局服务器,时间成本,维护成本等等非常不划算,邮局系统是非常复杂的。

准备条件

  • 2GB/2CPUs 的 vps

  • CentOS 7.5

    因为域名是 tourcoder.com,所以先将 hostname 改成 mail.tourcoder.com,执行命令 hostnamectl set-hostname mail.tourcoder.com

  • postfix

  • 域名 tourcoder.com

    提前做好解析(1)创建 name 为 mail 的 A 记录到本 VPS 的 IP(2)创建 name 为 @ 的 mx 记录到 mail.tourcoder.com,优先级为 10(3)设置 SPF,记录为 v=spf1 a mx 123.123.123.123 ~all,这里的 ip 地址是服务器的 ip 地址,可以去掉

概念

便于理解,这里我画了一张图

postfix

发件人通过 MUA (邮件用户代理,即我们常用的邮件客户端) 操作,让 MTA (邮件传输代理,即 postfix) 将邮件传输到 MDA (邮件投递代理,保存在某一个地方,比如数据库中),而收件人通过 MUA 访问 MDA 投递的位置收取邮件。

基本是这么一个原理,但实际产品要比这个复杂得多。

操作步骤

默认的情况下, CentOS 自带了 postfix,只需要进行配置,打开 postfix 的配置文件

vi /etc/postfix/main.cf

按照下面的内容进行配置

第 75 行(vi/vim 命令 :75)

myhostname = mail.tourcoder.com

第 83 行

mydomain = tourcoder.com

第 99 行

myorigin = $mydomain

第 116 行

inet_interfaces = all

第 119 行

inet_protocols = ipv4

取消第 165 行的注释,注释掉 164 行

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

第 264 行,这里的 123.123.123.123 表示当前服务器的 IP 地址,是为了授权其他网络通过本服务器发送邮件。

mynetworks = 127.0.0.0/8 123.123.123.123

第 419 行

home_mailbox = Maildir/

第 425 行

mail_spool_directory = /var/mail

main.cf 文件的配置就结束了,打开 /etc/postfix/master.cf 文件将 smtps 的注释取消

smtps inet  n -  y  -  - smtpd

最后重启 postfix

service postfix restart

这时 postfix 基本就配置完成了。

测试

为了方便,就直接在同台机器上进行测试,用 telnet,操作步骤如下

  • 连接 SMTP 服务器,命令 telnet 127.0.0.1 25

  • 连接成功后,输入命令 MAIL FROM:<[email protected]>,告诉服务器发件人的地址,回车

  • 输入命令 RCPT TO:<[email protected]>,告诉服务器收件人的地址,回车

  • 输入命令 DATA 回车

  • 输入命令 FROM:[email protected],回车

  • 输入命令 TO:[email protected],回车,这和上面一行结合解决 undisclosed recipients 的问题

  • 输入命令 Subject: test 回车

  • 输入命令 test body,回车

  • 输入命令 .,回车,注意这里就是一个命令点,表示内容结束,传输邮件

这时候会得到 250 2.0.0 Ok:queued as ADFSDAFLJ,这样的内容,表示邮件已经进入发送队列。此时你可以用命令 quit 退出关闭 telnet。

问题

有时候有些服务商会屏蔽 25 这个端口,比如我当前服务器使用的服务商就屏蔽了,可以通过其他的端口来发送邮件,比如 250,操作

  • 编辑 /etc/postfix/master.cf 文件,增加一行 smtp2 inet n - n - - smtpd

  • 编辑 /etc/services,增加 smtp2 2525/tcp mail2smtp2 2525/udp mail2

  • 防火墙增加该端口

  • 重启 service postfix restart

状态码

  • 220 服务就绪

  • 250 请求邮件动作正确,完成(HELO,MAIL FROM,RCPT TO,QUIT 指令执行成功会返回此信息)

  • 235 认证通过

  • 221 正在处理

  • 354 开始发送数据,结束以 .(DATA指令执行成功会返回此信息)

  • 500 语法错误,命令不能识别

  • 550 命令不能执行,邮箱无效

  • 552 中断处理:用户超出文件空间来自:

一些命令

  • 查看 postfix 的发送记录,vi /var/log/maillog

  • 查看发送队列中的邮件 postqueue -p 或者 mailq

  • 删除所有发送队列中的邮件 postsuper -d ALL

  • 删除所有发送队列中 deferred 的邮件 postsuper -d ALL deferred

MAIL QUEUES

  • incoming 收信箱

  • active 正在准备发送的邮件

  • defered 无法发送的邮件,等待重发

  • corrupt 无法读取或者损坏的邮件

  • hold 暂停的邮件,需要手工启动 DELIVERY STATUS REPORTS

  • bounce 每一位收件者的送信状态,记录为什么退信由 bounce(8) 管理

  • defer 每一位收件者的寄送状态,说明为什么延迟由 defer(8) 管理

  • trace 每一位收件者的寄送状态信息,说明被 Postfix 用 sendmail -vsendmail -bv 命令执行的状态由 trace(8) 管理

更多说明看 https://postfix.org

--- EOF ---

请注意:这里的内容都是原创,你可以免费阅读,但拒绝所有其他任何形式的转载,谢谢配合。如果你发现文章中有错误,请发邮件给我,非常感谢。

The Copyright of all posts & photos posted in tourcoder.com is belong to tourcoder.com. You can read them for free, but you may not reuse anything therein without my permission.

更多内容