我想通过远程 SMTP 服务器发送电子邮件。该怎么做?我将从 bash shell 脚本发送电子邮件。
我正在使用 unix 机器。uname -a 返回:Linux linux 2.4.21 BrandZ fake linux i686 athlon i386 GNU/Linux
谢谢。
答案1
这里实际上没有事实上的客户端,大多数人只是使用他们的 MTA(邮件传输代理)进行中继,然后使用 sendmail(1) 或 mail(1) 将邮件注入他们的 MTA 队列(直接或通过 SMTP 端口 25)
大多数 Unix 机器都带有 MTA,通常是 Sendmaill、Postfix 或 Exim 之一。
后缀
在 postfix 中,您需要在 /etc/postfix/main.cf(或设置 main.cf 配置文件的任何位置)中设置您的中继主机。
relayhost = my.mailrelay.com
发送邮件
对于 sendmail,该术语称为 SMART_HOST,您可以在 sendmail.mc 中定义它
define(`SMART_HOST',`my.mailrelay.com')
进出口
在 Exim 中,更改配置的“路由器”部分并添加
smarthost:
driver = domainlist
transport = remote_smtp
require_files = /etc/exim/smarthost
route_list = "* my.mailrelay.com"
邮件系统
我从未见过 Qmail 安装在机器上(主要是因为 DJB 的许可条款)所以它可能不适合你的情况,但我们不妨在一个地方列出四大 MTA 中的最后一个。
echo ":my.mailrelay.com" > /var/qmail/control/smtproutes
笔记*
有些人可能会说,使用脚本通过端口 25/487 将消息注入远程 SMTP 服务器。这种解决方案是有缺陷的。SMTP 的设计使得邮件服务器可以暂时拒绝任何原因的邮件。所有 SMTP 服务器都具有后备机制,因此可以反复重试发送消息。现在您的脚本可以实现这一点,但这样您就走上了重新发明轮子的道路。实际上,每个 Linux 系统都安装了 MTA,而且在 Linux 和我遇到的所有其他 Unix 系统上安装它们都很简单。刚开始时,配置它们可能会令人生畏,但电子邮件无处不在,如果您想管理类 Unix 机器,您需要学习这一点。
如果您要中继的远程 SMTP 服务器仅允许您通过 IP 进行中继,则上述内容应该足够了。但是,您要中继的远程 SMTP 服务器可能会要求您使用 SMTP 身份验证和/或 SSL/TLS 进行中继。在这种情况下,您需要配置 MTA 以提供这些详细信息。
答案2
如果您只想从您的系统发送邮件,而不想用自己的 MTA 接收邮件,或者需要任何特殊的配置,那么您不妨安装一个最小的 MTA,如 sSMTP、nbsmtp 或 nullmailer。
它们带有与 sendmail 兼容的接口(/sbin/sendmail
或/usr/sbin/sendmail
),并将由mail
、mailx
或nail
(或任何其他 CLI 邮件客户端)使用来发送邮件。
答案3
首先,您可以使用 mailx 命令(参见 man mailx),它可以从命令行发送邮件。
为了使其正常工作,您还需要安装一个本地 SMTP 服务器,作为外部 SMTP 服务器的中继。