凌峰创科服务平台

如何配置sendmail SMTP服务器?

核心概念:sendmail 与 SMTP 的关系

要明白 sendmail 和 SMTP 是两个不同但又紧密相关的东西。

如何配置sendmail SMTP服务器?-图1
(图片来源网络,侵删)
  • SMTP (Simple Mail Transfer Protocol)协议,它是一套规则,定义了邮件服务器之间如何发送和转发电子邮件,你可以把它比作邮件系统的“交通规则”或“官方语言”,所有标准的邮件传输都遵循 SMTP 协议。

  • sendmail邮件传输代理,它是一个实现了 SMTP 协议的软件程序,你可以把它比作一个“邮局”或“邮件卡车司机”,它的职责是:

    1. 接收本地用户或应用程序(如 mail 命令、PHP 脚本)发来的邮件。
    2. 根据 SMTP 协议,将这些邮件发送到正确的目标邮件服务器。
    3. 接收来自其他邮件服务器的邮件,并分发给本地用户。

简单总结: sendmail执行者,而 SMTP 是它需要遵守的语言和规则,当你配置 sendmail 时,你实际上是在配置一个使用 SMTP 协议来收发邮件的软件。


sendmail 的工作流程

一个典型的邮件发送流程如下:

如何配置sendmail SMTP服务器?-图2
(图片来源网络,侵删)
  1. 用户/应用:你使用 mail user@example.com 命令,或者你的网站(如 WordPress)需要发送一封注册邮件。
  2. sendmail 程序:这个请求会调用本地的 sendmail 程序。
  3. 本地处理sendmail 首先检查 user@example.com 是不是本地服务器的用户,如果是,就直接把邮件投递到用户的邮箱(/var/spool/mail/username)。
  4. 远程发送:如果收件人不在本地,sendmail 就会启动SMTP 客户端功能。
    • 它会查询 example.com 域名的 MX (Mail Exchange) 记录,找到 example.com 的邮件服务器地址(mail.example.com)。
    • sendmail 作为客户端,通过 SMTP 协议连接到 mail.example.comSMTP 服务器(端口 25)
    • 双方进行 SMTP 对话,sendmail 说:“你好,我想发一封邮件”,然后把邮件内容传递过去。
  5. 对方服务器接收mail.example.comSMTP 服务器(可能也是由 sendmail 或其他 MTA 如 Postfix 运行)收到邮件后,会将其存入队列,最终分发给 user@example.com 的邮箱。

如何配置 sendmail 的 SMTP 服务器行为?

通常我们说的“配置 sendmail 的 SMTP 服务器”,指的是配置它作为邮件服务器,接收来自外部的邮件,并配置它如何发送邮件(中继)。

A. 查看 sendmail 版本和配置文件

在配置之前,先确认你的系统上安装了 sendmail 并查看其配置文件。

# 检查 sendmail 是否安装并运行
sendmail -d0.1 -bv < /dev/null  # 查看版本信息
systemctl status sendmail        # 查看服务状态 (CentOS/RHEL 7+)
ps aux | grep sendmail          # 查看进程
# 主要配置文件
/etc/mail/sendmail.cf           # 核心配置文件 (语法复杂)
/etc/mail/sendmail.mc           # 宏配置文件 (语法简单,推荐修改这个)

现代系统通常使用 sendmail.mc 文件,因为它更易读,修改后需要重新生成 sendmail.cf

B. 核心配置项:sendmail.mc

  1. 定义本地主机名和域名 这是最基本的配置,确保邮件有正确的发件人域名。

    如何配置sendmail SMTP服务器?-图3
    (图片来源网络,侵删)
    define(`confDOMAIN_NAME', `yourdomain.com')dnl
    define(`confDELIVERY_MODE', `interactive')dnl
  2. 配置本地网络,允许中继 这是最重要的一步,决定了哪些机器可以通过你的 sendmail 服务器发送邮件。

    默认配置可能只允许本机(localhost0.0.1)发送邮件,如果你希望局域网内的其他机器也能通过它发送邮件,需要修改 access 文件。

    • 使用 access 文件(推荐) sendmail 会读取 /etc/mail/access 文件来决定是否允许中继。

      编辑 /etc/mail/access

      # 允许来自 192.168.1.0/24 网段的所有机器发送邮件
      192.168.1.               RELAY
      # 允许特定 IP
      10.0.0.50                RELAY
      # 允许特定域名
      myfriendlyhost.com        RELAY
      # 拒绝来自某个 IP
      192.168.2.               REJECT

      修改后,需要重新生成数据库:

      makemap hash /etc/mail/access.db < /etc/mail/access
    • sendmail.mc 中使用 RELAY 规则sendmail.mc 中,你可以直接使用 FEATURE 宏来定义允许中继的网络。

      # 允许 192.168.1.0/24 网段进行邮件中继
      FEATURE(`relay_entire_domain')dnl
  3. 配置智能主机 如果你的服务器不直接将邮件发送到最终目的地,而是通过另一个更可靠的邮件服务器(如你购买的云服务器或企业邮箱提供商的 SMTP 服务器)来发送,你需要配置一个“智能主机”。

    这通常用于家庭服务器或 VPS,因为它们的 IP 可能被列入邮件黑名单。

    sendmail.mc 中添加:

    # 将所有邮件都通过 smtp.your-isp.com 发送
    define(`SMART_HOST', `smtp.your-isp.com')dnl

    如果你的智能主机需要认证,还需要配置认证信息,这会更复杂一些,通常需要用到 authinfo 文件和 FEATURE 宏。

  4. 配置 SSL/TLS 加密 为了安全,应该让 sendmail 在发送邮件时使用加密连接。

    sendmail.mc 中启用:

    # 监听 465 端口 (SMTPS)
    DAEMON_OPTIONS(`Port=smtps, Name=MTA, M=a')dnl
    # 或监听 587 端口 (Submission)
    DAEMON_OPTIONS(`Port=submission, Name=MSA, M=s')dnl
    # 启用 STARTTLS
    define(`confAUTH_OPTIONS', `A p y')dnl
    TRUST_AUTH_MECH(`EXTERNAL LOGIN PLAIN')dnl
    define(`confAUTH_MECHANISMS', `EXTERNAL GSSAPI LOGIN PLAIN')dnl

C. 应用配置更改

修改完 sendmail.mc 后,必须重新生成 sendmail.cf 并重启服务。

# 1. 从 .mc 文件生成 .cf 文件
# 在基于 Red Hat 的系统上
m4 /etc/mail/sendmail.mc > /etc/mail/sendmail.cf
# 在基于 Debian/Ubuntu 的系统上
make -C /etc/mail
# 2. 重启 sendmail 服务
systemctl restart sendmail
# 3. 重新生成 aliases 数据库(如果修改了 /etc/aliases)
newaliases

现代替代品:Postfix

尽管 sendmail 非常经典且功能强大,但它的配置文件语法 (sendmail.cf) 以晦涩难懂而闻名,大多数现代 Linux 发行版(如 Ubuntu, Debian, CentOS)在安装时默认会选择 Postfix 作为 MTA。

Postfix 的优势:

  • 配置简单:使用易读的文本文件(如 main.cf)。
  • 性能高:设计更现代化,资源占用更低。
  • 安全性好:架构设计更注重安全。

如果你需要配置一个邮件服务器,并且没有特殊原因必须使用 sendmail,强烈推荐使用 Postfix。


常见问题排查

  • 问题:邮件发送失败,错误信息 "Relay access denied" 原因sendmail 拒绝为你的来源 IP 地址进行邮件中继。 解决:检查并修改 /etc/mail/access 文件,确保你的客户端 IP 被标记为 RELAY,然后重新生成 access.db

  • 问题:邮件被对方服务器退回,提示 "IP is in a black list" 原因:你的服务器 IP 地址被列入了某个垃圾邮件黑名单。 解决:配置智能主机,通过一个信誉良好的邮件服务器中继你的邮件,或者,联系黑名单提供商申请移除。

  • 问题:邮件发送很慢或超时 原因:可能是 DNS 解析问题,或目标邮件服务器响应慢。 解决:检查 DNS 配置,使用 dig yourdomain.com MX 查看域名解析是否正常。

特性 sendmail SMTP
本质 一个具体的软件程序 (MTA) 一套网络协议 (规则)
角色 邮件的发送者和接收者 邮件服务器之间沟通的语言
配置 复杂 (sendmail.cf, sendmail.mc) 协议本身是标准,但服务器配置各有不同
现状 经典,但配置困难,逐渐被 Postfix 替代 仍然是互联网邮件传输的基石

希望这份详细的解释能帮助你理解 sendmail 和 SMTP 服务器!

分享:
扫描分享到社交APP
上一篇
下一篇