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.cnThis is a test.
.

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

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

$ systemctl status sendmail
● sendmail.service - Sendmail Mail Transport AgentLoaded: loaded (/usr/lib/systemd/system/sendmail.service; disabled; vendor preset: disabled)Active: active (running) since Wed 2022-10-26 08:03:45 CST; 6s agoProcess: 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.8MCGroup: /system.slice/sendmail.service└─16745 sendmail: accepting connections10月 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/

sendmail 使用外部 smtp 服务发送邮件相关推荐

  1. Nagios监控之9:利用sendmail使用第三方SMTP服务发送邮件报警

    使用Centos系统自带的sendmail服务作为客户端,使用第三方SMTP服务发送邮件报警. 此功能是在nagios服务正常安装运行的基础上实现的;因此要先安装好基本的nagios运行环境,这个可以 ...

  2. wordpress配置SMTP服务发送邮件

    使用SMTP服务发送邮件,需要使用一个插件:http://wordpress.org/extend/plugins/wp-mail-smtp/ 下载完成以后解压到plugin目录,然后在插件中启用这个 ...

  3. Scala通过office365的SMTP服务发送邮件

    问题描述 最近项目中需要用到office365发送mirror邮件,并且必须要用scala代码解决 以下是scala发送邮件的代码 所用到jar的pom是 <dependency>< ...

  4. Python 使用第三方 SMTP 服务发送邮件(qq邮箱)

    原文链接:http://www.runoob.com/python/python-email.html Python SMTP发送邮件 SMTP(Simple Mail Transfer Protoc ...

  5. 通过126邮箱SMTP服务发送邮件到指定邮箱

    测试环境清单:smtplib函数库 Python3.7 Windows10 程序源码 import smtplib from email.header import Header from email ...

  6. [计算机网络] C++模拟telnet登陆SMTP服务发送邮件过程

    在百度文库中的<使用telnet协议收发邮件>,我们可以很清楚地看到如何通过telnet来进行发送邮件,下面是一些需要用到的命令,通过以下命令可以很容易实现邮件发送功能.为了更好地理解其中 ...

  7. java 163邮件发送 ssl协议失败_163邮箱开启SMTP服务发送邮件出现535错误的解决方法...

    摘要: 用老的163邮箱可以直接设置SMTP发送邮件,使用新注册的却不行!折腾了几个小时后终于找到了方法,然后destoon就可以成功的发送邮件了..... 好久没有写关于destoon网站管理系统的 ...

  8. C#使用QQ邮箱SMTP服务发送邮件

    开启邮箱的SMTP服务 进入QQ邮箱->设置->账户->开启POP3/SMTP服务,通过发短信开通后会获取一个授权码,记得保存授权码,在程序中要使用 邮件发送代码 /// <s ...

  9. Windows下登录smtp服务发送邮件

    首先要把登陆邮箱的用户名和密码用base64_encode加密 可以用这个网站在线加密http://tool.chinaz.com/Tools/base64.aspx 然后开始 telent smtp ...

最新文章

  1. 137% YOLOv3加速、10倍搜索性能提升!百度飞桨推出模型压缩神器
  2. Eclipse删除文件的恢复(转)
  3. mysql8.0.15调优_Mysql 8.0 参数调优
  4. 普林斯顿公开课 算法2-2:选择排序
  5. Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)
  6. 计算机应用基础考试试题,2017计算机应用基础考试试题及答案
  7. keil教程之创建基础软件工程
  8. 汽车启动/停止系统电源方案
  9. 短信营销 (php示例)
  10. 智方8000系汽车配件进销存管理系统 襄樊石开软件公司
  11. 输入的产品无法再此计算机,一键重装系统时遇到“安装程序无法将Windows配置为在此计算机的硬件上运行”...
  12. “猫”和路由器是一个东西吗?
  13. 基于Python实现可以进制转换和计算阶乘的科学计算器
  14. ap mt7260a 华硕_华硕(ASUS)路由器AP模式设置_华硕路由器当无线AP设置-192路由网
  15. __attribute__((section(”XXXX“)))的编译属性---section
  16. Java数据结构之无向图
  17. 基于DYDX闪电贷在Cofix和Uniswap之间套利
  18. 来自:www.hoopchina.com 作者:儿童节 《雄心一万丈》
  19. User: root is not allowed to impersonate anonymous (state=08S01,code=0)
  20. Python 逻辑运算

热门文章

  1. 二叉树 php,PHP数据结构与算法:二叉树
  2. linux打开开发者权限,在UOS系统中关闭开发者模式和在UOS个人版中打开开发者模式...
  3. 查看mysql数据库引擎
  4. 解决报错 PHP TP5框架 .env 文件产生问题如:Fatal error: Uncaught think\exception\ErrorException: in....
  5. C++ thread用法总结(整理)
  6. 这个世界只有一种病,那就是贫穷!
  7. Logback 日志打印格式思考
  8. DELPHI 三层显示error loading midas.dll
  9. Quartus16怎么修改IP核
  10. 基于仿真的优化 matlab ansys,桁架结构优化的MATLAB和ANSYS联合仿真