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

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

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

谢谢。

实际上这里没有事实上的客户端,大多数人只是简单地使用他们的MTA(邮件传输代理)来中继,然后使用sendmail(1)或邮件(1)将邮件注入他们的MTA的队列(直接或通过SMTP港口25)

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

后缀

在postfix中,你想在/etc/postfix/main.cf中设置你的relayhost(或者你的main.cfconfiguration文件已经设置)。

relayhost = my.mailrelay.com 

发送邮件

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

 define(`SMART_HOST',`my.mailrelay.com') 

进出口

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

 smarthost: driver = domainlist transport = remote_smtp require_files = /etc/exim/smarthost route_list = "* my.mailrelay.com" 

Qmail的

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

 echo ":my.mailrelay.com" > /var/qmail/control/smtproutes 

笔记*

有些人可能会说,使用脚本通过端口25/487将消息注入到远程SMTP服务器。 这个解决scheme是有缺陷的。 SMTP旨在使邮件服务器可以暂时拒绝邮件,无论出于何种原因。 所有SMTP服务器都有回退机制,以便重试和重试消息。 现在你的脚本可以实现这一点,但是你正在重新发明车轮的路线。 实际上,每个Linux系统都安装了MTA,而且在我遇到的Linux和其他所有的Unix系统上安装它们都是微不足道的。 configuration它们可能会让你感到害怕,但是如果你想要pipe理类似Unix的机器,那么你需要学习如何使用电子邮件。

如果您正在中继的远程SMTP服务器仅允许您通过IP进行中继,则上述内容应足够。 但是,您希望中​​继的远程SMTP服务器可能需要使用SMTP身份validation和/或SSL / TLS才能进行中继。 在这种情况下,您需要configuration您的MTA以提供这些详细信息。

如果你只想从你的系统发送邮件,你不想收到你自己的MTA的邮件,或者需要任何特殊的configuration,你可以安装一个最小的MTA,如sSMTP,nbsmtp或nullmailer。

这些接口提供了与sendmail兼容的接口( /sbin/sendmail/usr/sbin/sendmail ), mailmailxnail (或任何其他CLI邮件客户端)将使用它们发送邮件。

首先,您可以使用mailx命令(请参阅man mailx),该命令可以从命令行发送邮件。

为了这个工作,你还需要一个本地的SMTP服务器安装,作为一个外部的中继。