轻量级传出SMTP服务器


46

您将什么用作轻型SMTP仅用于外发电子邮件?

我正在运行一个应用程序,该应用程序会在事件偶尔发生时通过SMTP发送电子邮件,并且我不需要功能齐全的电子邮件服务器。

编辑:我很乐意使用诸如postfix之类的东西(并这样做),如果那是最好的选择。我以为可能有些简单得多的东西用完了。


我认为坚持使用exim和postfix之类的东西是完全合理的。如果您正在做简单的事情,它们并不难配置。
Faheem Mitha

您对“轻量级”的定义是什么?您期望这些消息有多大?“一段时间”多久一次?
Mike B

Answers:


22

最小的,仅中继的邮件传输代理(MTA或“邮件服务器”)有多种选择,其他答案中也提到了其中一些:

为了使这两种方法都能正常工作,您需要在某处拥有完整的MTA,以便进一步中继您的消息(称为“邮件中心”),强烈建议您控制此邮件中心。否则,Bad Things™可能会发生。


esmtp不再被维护。
Nikola Kotur 2013年

1
nullmailer有一个严重的SMTP合规性问题:当给定SMTP永久错误时,它将无限重试。如果您支付带宽/过境这可以花费你真正的金钱bugs.debian.org/cgi-bin/bugreport.cgi?bug=329192
TELENT

@telent:在这种情况下,您不应使用nullmailer。

谢谢!疑难解答 .com / linux / nullmailer上的配置指南指出了nullmailer的一个安全问题:它在命令行上公开了密码,或者至少是用来这样做的。其他对话指出,与nullmailer相比,mstmp使得如何使邮件入队更加不清楚。
nealmcb

11

恕我直言,最简单的方法是使用后缀。您可以使用以下命令将其配置为轻型出站继电器:

postconf -e relayhost=other.mailserver.com
postconf -e myorigin=my.domainname.com

只要中指定的SMTP服务器relayhost不需要身份验证,即可让您中继或成为收件人地址的有效目的地,那么它将起作用。

myorigin参数将是默认域名。因此,如果您将邮件发送到foo,它将发送到foo@my.domainname.com。用户栏发送的邮件将来自bar@my.domainname.com。

如果您确实需要进行身份验证并想要支持TLS,请同时运行以下命令:

postconf -e smtp_tls_security_level=may
postconf -e smtp_sasl_auth_enable=yes
postconf -e smtp_sasl_password_maps=pcre:/etc/postfix/sasl_password_maps

然后在/etc/postfix/sasl_password_maps拥有此内容:

/./ username:password

所有邮件将使用指定的用户名和密码发送到您的中继主机。


尝试了这些设置,我得到一个错误:“错误:不支持的字典类型:pcre”
valent15年

1
安装pcre和/或postfix-pcre,然后重试。
bahamat 2015年

我弄清楚了,与此同时,也有两个软件包丢失了,第一个是您所说的postfix-pcre,但另一个是奇怪的-libsasl2-modules。我不知道如何安装libsasl2和libsasl2-modules-db,但缺少libsasl2-modules ...现在终于一切正常。您能否将此重要信息添加到答案中?
2015年

1
对于tls,我还使用了:relayhost=other.mailserver.com:465then smtp_tls_wrappermode=yes和,smtp_tls_security_level=encrypt但它试图将本地用户用作auth。我必须以某种方式重写身份验证用户。
tudor

“只要在Relayhost中指定的SMTP服务器不需要身份验证”->可以,但是如今这种情况很少见。您的建议是正确的,但基本上无关紧要!
FarO

9

假设您需要一个可以从外壳运行的程序,例如sendmail(8),也许MSMTP可以满足您的需求?它可以连接到远程SMTP服务器,并像stendmail一样以stdin的形式提交邮件。


我为此使用MSMTP,效果很好,并且配置非常简单。
dsp 2010年

我很高兴您推荐了这个。我一直在寻找类似的东西已经有一段时间了。sendmail的配置完全无法满足我的需求。
ixtmixilix


2

您可能会发现适合您需要的sSMTP。阅读有关它的文章及其限制。

坦白说,我不会太在意安装postfix或exim,即使它仅用于发送电子邮件也是如此。


1
+1 ssmtp中,-1在sendmail在使用一个完整的MTA,这是推荐不必要的注释以及方式更难做正确的。错误配置和维护的邮件服务器使我们的邮件管理员一生难堪。

@hop:我在两个方面都不同意。sendmail太糟糕了。另外,例如exim是Debian的默认设置,并且使用起来非常简单。postfix也可能如此,但我从未使用过。
Faheem Mitha


1

从技术上讲,您不需要主机上的电子邮件服务器,您需要(可能已经拥有)的是可以连接到公司SMTP服务器(可以在您可以连接到的任何位置)的smtp客户端(或MUA) )

根据应用程序(及其编写的编程语言)的不同,您的应用程序可以通过多种不同方式连接到网络上的“ the” SMTP服务器。

通常,使用PHP或Python,应用程序中都会有一个配置文件,用于指定“ SMTP”服务器(可以位于主机上或网络中的其他位置。)如果网络上已经有邮件服务器,则只需指向配置到该服务器。

如果没有其他选项,则应用程序可以将电子邮件生成为标准输出,您可以使用以下方式进行处理:

listoftargets =“ me@example.com jab@example.com”回显“测试内容” | 邮件-s“测试主题” $ listoftargets

在某些系统上,已经有一个仅用于发送的最小邮件服务器。

山姆


我在云中有一堆服务器,我真的希望每个服务器都拥有自己的传出SMTP服务器,而不是依赖于任何外部服务器。这样,如果我的远程SMTP服务器已关闭,则不会影响所有服务器。
FlappySocks's

1)如果让PHP或Python做smtp部分,则必须完成MTA可以处理的所有工作(排队,错误处理)。2)最后,您与开始时说的相矛盾

一些Linux应用程序被设置为期望mailsendmail命名为可执行文件。系统通知。这就是重点吗?除此之外,没有任何限制。
Craig Hicks
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.