UNIX:使用 SMTP 服务器发送邮件

2 email unix smtp bash

我想通过远程 SMTP 服务器发送电子邮件。如何才能做到这一点?我将从 bash shell 脚本发送电子邮件。

我正在使用 unix 机器。uname -a 返回:Linux linux 2.4.21 BrandZ fake linux i686 athlon i386 GNU/Linux

谢谢你。

Phi*_*lds 6

这里没有真正用于此的事实上的客户端,大多数人只是使用他们的 MTA(邮件传输代理)进行中继,然后使用 sendmail(1) 或 mail(1) 将邮件注入他们的 MTA 队列(直接或通过 SMTP端口 25)

大多数 Unix 机器都带有 MTA,通常是 Sendmaill、Postfix 或 Exim 之一。

后缀

在 postfix 中,您想在 /etc/postfix/main.cf(或设置 main.cf 配置文件的任何位置)中设置中继主机。

relayhost = my.mailrelay.com
Run Code Online (Sandbox Code Playgroud)

发邮件

对于 sendmail,该术语称为 SMART_HOST,您可以在 sendmail.mc 中定义它

define(`SMART_HOST',`my.mailrelay.com')
Run Code Online (Sandbox Code Playgroud)

进出口

在 Exim 中,更改配置的“路由器”部分并添加

smarthost:
  driver = domainlist
  transport = remote_smtp
  require_files = /etc/exim/smarthost
  route_list = "* my.mailrelay.com"
Run Code Online (Sandbox Code Playgroud)

邮箱

我从未见过 Qmail 安装在一台机器上(主要是因为 DJB 的许可条款),所以它可能不符合您的情况,但我们不妨在一个地方列出 4 大 MTA 中的最后一个。

echo ":my.mailrelay.com" > /var/qmail/control/smtproutes
Run Code Online (Sandbox Code Playgroud)

笔记*

有些人可能会说,使用脚本通过端口 25/487 将消息注入到远程 SMTP 服务器。这个解决方案是有缺陷的。SMTP 旨在使邮件服务器可以出于任何原因暂时拒绝邮件。所有 SMTP 服务器都有回退机制,以便消息将被重试和重试。现在您的脚本可以实现这一点,但随后您将走上重新发明轮子的道路。实际上,每个 Linux 系统都安装了 MTA,并且它们很容易安装在 Linux 和我遇到的所有其他 Unix 系统上。刚开始时配置它们可能会令人生畏,但电子邮件无处不在,如果您想管理类 Unix 机器,您需要了解这一点。

如果您正在中继的远程 SMTP 服务器只是允许您通过 IP 进行中继,那么上述内容就足够了。但是,您要中继的远程 SMTP 服务器可能需要您使用 SMTP 身份验证和/或 SSL/TLS 进行中继。在这种情况下,您需要配置 MTA 以提供这些详细信息。