当前位置: 首页 > 工具软件 > Sendmail > 使用案例 >

sendmail 使用外部 smtp 服务发送邮件

牧熙云
2023-12-01

linux上,想要让 sendmail使用外部 smtp服务发送邮件,需要完成以下两件事情:

  • 生成 authinfo文件,用于存储登录外部 smtp服务器的用户信息
  • 配置 sendmail.mc文件

1. 生成 authinfo
进入 /etc/mail目录,创建 /etc/mail/authinfo文件,并添加如下内容:

AuthInfo:smtp.domain.cn "U:USERNAME" "P:PASSWORD" "M:PLAIN"

创建 hash map文件

$ makemap hash authinfo < authinfo

执行完上述命令后,可以看到在 /etc/mail目录下生成了一个名为 authinfo.db的二进制文件,后面会将其路径配置在 sendmail.mc文件中。

2. 配置 sendmail.mc文件
还是在 /etc/mail目录下,打开 sendmail.mc文件,进行如下修改:

2.1 取消下面这一行的注释,并配置你自己的外部 smtp服务器地址:
"dnl define(`SMART_HOST', `smtp.your.provider')dnl"
如下所示:

define(`SMART_HOST', `smtp.domain.cn')dnl

在上述配置行下面添加如下几行内容:

define(`RELAY_MAILER_ARGS', `TCP $h 587')dnl
define(`ESMTP_MAILER_ARGS', `TCP $h 587')dnl
FEATURE(`authinfo', `hash -o /etc/mail/authinfo.db')dnl

注意: 上面指定的 smtp端口是 587,如果与实际情况不符,应进行更改,比如,改为 25或其他。

2.2 取消下面这几行的注释:

define(`confAUTH_OPTIONS', `A p')dnl
TRUST_AUTH_MECH(`EXTERNAL DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
define(`confAUTH_MECHANISMS', `EXTERNAL GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl

2.3 安装 sendmail-cf工具,用于重新生成配置文件

$ yum install -y sendmail-cf

2.4 重新生成配置文件

$ /etc/mail/make

2.5 重启 sendmail服务

$ systemctl restart sendmail

3 邮件发送示例

$ sendmail -f"user@domain.cn" -t
Subject: Hello
From: user@domain.cn
To: person@xxx.cn

This is a test.
.

上面指定了 -f参数,我认为是有必要的,因为从 sendmail的运行日志来看,如果不指定的话,可能会出现外部 smtp服务器无响应的情况。

若在执行上述命令发送邮件时出现卡住的感觉,则需查看 sendmail运行日志来确认问题,如下所示:

$ systemctl status sendmail
● sendmail.service - Sendmail Mail Transport Agent
   Loaded: loaded (/usr/lib/systemd/system/sendmail.service; disabled; vendor preset: disabled)
   Active: active (running) since Wed 2022-10-26 08:03:45 CST; 6s ago
  Process: 16736 ExecStart=/usr/sbin/sendmail -bd $SENDMAIL_OPTS $SENDMAIL_OPTARG (code=exited, status=0/SUCCESS)
  Process: 16731 ExecStartPre=/etc/mail/make aliases (code=exited, status=0/SUCCESS)
  Process: 16728 ExecStartPre=/etc/mail/make (code=exited, status=0/SUCCESS)
 Main PID: 16745 (sendmail)
    Tasks: 1 (limit: 832684)
   Memory: 8.8M
   CGroup: /system.slice/sendmail.service
           └─16745 sendmail: accepting connections

10月 26 08:02:45 CentOS-8 systemd[1]: Starting Sendmail Mail Transport Agent...
10月 26 08:02:45 CentOS-8 sendmail[16736]: My unqualified host name (CentOS-8) unknown; sleeping for retry
10月 26 08:03:45 CentOS-8 sendmail[16736]: unable to qualify my own domain name (CentOS-8) -- using short name
...

从上述日志中可以发现,sendmail有报错信息,即:

10月 26 08:02:45 CentOS-8 sendmail[16736]: My unqualified host name (CentOS-8) unknown; sleeping for retry
10月 26 08:03:45 CentOS-8 sendmail[16736]: unable to qualify my own domain name (CentOS-8) -- using short name

该问题的解决方法是在 /etc/hosts文件中加入主机名 'CentOS-8'的解析配置项,即:

127.0.0.1		localhost.localdomain localhost CentOS-8

参考资料

  1. https://community.webcore.cloud/tutorials/how_to_configure_sendmail_to_use_an_smtp_relay/
  2. https://help.thorntech.com/docs/sftp-gateway-classic/routing-sendmail-through-external-smtp-relay/
 类似资料: