我有一个需要发送外发邮件的 Web 应用程序。我不想直接连接到 SMTP 服务器(我使用的是 AuthSMTP),而是想设置一个本地邮件服务器。这是为了减少 Web 应用程序等待发送电子邮件的时间,并在 AuthSMTP 服务器关闭时自动存储和重试邮件。
哪种邮件服务器的设置和管理简单?它需要做的就是将所有邮件从本地主机转发到特定服务器。我还希望能够监控服务器,以查看某些邮件何时无法传递。
我对 Apache James 有一些经验,目前正在尝试 Postfix。
答案1
我当前的 Linux 网络服务器是基于 Debian 的,有一次我想让服务器能够发送邮件,所以我坚持使用默认exim4-daemon-light
包(http://packages.debian.org/lenny/exim4-daemon-light),这几乎不需要额外的配置。它保存日志,您应该能够使用标准工具解析这些日志,以便在初始 SMTP 连接级别监控失败的传递。要收到此后发生的错误的通知,您需要确保邮件带有有效的from
和reply-to
标头,以便接收邮件程序知道将退回邮件发送到何处(最后一点与您选择的 MTA 相同)。
答案2
如果你不想运行守护进程,而只想使用 sendmail 替换,请尝试 ssmtp [http://wiki.dreamhost.com/SSMTP
配置简单,无需运行守护进程。我不记得了,但它会将日志保存在某处,这样您就可以检查问题。
另一个选择是 nullmailer 或 putmail。
我认为该树可以作为 sendmail 的替代品,因此您可以将“/usr/lib/sendmail”更改为其中之一),或者您可以配置 apache/php 来使用它们。
答案3
我在尝试为包含联系表单的小型主页设置自己的邮件中继时偶然发现了这个问题。我花了几天时间尝试运行 Postfix,并想分享一个消息,即 Linux 上有一个更简单的解决方案(我在服务器上使用 Debian)。
哪种邮件服务器的设置和管理比较简单?
正如你提到的后缀,配置和调试起来相当烦人。我个人更喜欢开放SMTPD,它具有更简单易懂的配置,因此非常适合您的使用情况。
它需要做的就是将所有邮件从本地主机转发到特定的服务器。
此功能称为“邮件中继”,对于大多数想要将邮件中继到 Google 或类似的大型电子邮件提供商并传递给最终收件人的网络应用程序来说很常见。
我还希望能够监控服务器,以查看何时某些消息无法传递。
我建议您配置监控系统来监控邮件队列中的电子邮件数量。如果在 10 分钟的时间内该数量大于零,则很可能存在问题。对于 OpenSMTPD,其在 BASH 中的工作方式如下 - 您选择的监控系统很可能有一个 OpenSMTPD 插件。
root@webserver:~# smtpctl show queue | wc -l
0
我对 Apache James 有一些经验,目前正在尝试 Postfix。
我在 postfix 上花了太多时间,建议你不要使用它,除非你配置了一个有 500 个或更多用户的收发电子邮件帐户的复杂电子邮件服务器。
OpenSMTPD 可以用两个配置文件来实现这一点。在阅读了许多博客和论坛帖子后,IRC 上的一个好心人向我推荐了这篇优秀的博文,我可以复制粘贴所有内容,并在几分钟内开始运行我的邮件中继。您只需要以下配置文件并安装该包:
apt install opensmtpd
然后是配置,首先/etc/smtpd.conf
:
table relay_secrets file:/etc/smtpd/tables/relay_secrets
listen on lo port 25 mask-src hostname example.com
listen on socket mask-src
action "relay_monitoring" relay tls host smtp://[email protected]:587 auth
action "relay_booking" relay tls host smtp://[email protected]:587 auth
action "relay_password_reset" relay tls host smtp://[email protected]:587 auth
match from local mail-from "[email protected]" for any action "relay_booking"
match from local mail-from "[email protected]" for any action "relay_password_reset"
match from local mail-from "www-data" for any action "relay_monitoring"
match from local mail-from "root" for any action "relay_monitoring"
match from local mail-from "prometheus-alertmanager" for any action "relay_monitoring"
match from local mail-from "[email protected]" for any action "relay_monitoring"
match from any reject
# OR relay all other emails via monitoring (potentially dangerous)
#match from any for any action "relay_monitoring"
和/etc/smtpd/tables/auth_secrets
:
# SMTP account for booking confirmation emails
webapp_booking [email protected]:very-secure-password
# SMTP account for password reset emails
webapp_pw_reset [email protected]:super-secure-password
# SMTP account for all other emails
monitoring [email protected]:extremely-secret-password
就这些。超级容易理解。