人们会认为这是一件非常简单的事情,但显然它不是——或者我只是真的很不擅长。
背景:我有一个小型家庭服务器,用于托管任务管理器 (TaskWarrior)、我的网站、我的 IRC 弹跳器等。我尽量保证该服务器的安全。此外,我还希望保持其良好的维护。
我认为从该服务器接收一些定期/事件触发的电子邮件以检测可能的安全漏洞、服务故障和其他问题会很好。实际实施并不重要,我要么只向自己发送定期维护脚本的输出,要么从日志文件中 grep 一些关键字。
问题是我只能向我的地址发送电子邮件。我尝试了以下方法:
- 我需要一个 SMTP 服务器来发送电子邮件,所以我想我应该只使用我的电子邮件服务提供商(mailbox.org)。结果如下:
$ openssl s_client -connect smtp.mailbox.org:465
[...]
---
220 smtp2.mailbox.org ESMTP Postfix
HELO myhostname
250 smtp2.mailbox.org
MAIL FROM: me@myhostname
250 2.1.0 Ok
RCPT TO: [email protected]
554 5.7.1 <my-ip:30920>: Client host rejected: Access denied
我不确定这是否与必须在服务器上进行身份验证有关。我smtp.gmail.com
也尝试过,但我在那里得到了530-5.5.1 Authentication Required
答复MAIL FROM
。不过,无论如何我还是宁愿避免使用 Google。
假设失败是由于必须进行身份验证,那么我将面临另一个问题:当然,我可以直接告诉我的 MTA(比如说
dma
或msmtp
)我的 mailbox.org 帐户的密码,但这听起来不是一个好主意。我在设置安全性方面经验不足,无法确保我的服务器不会轻易被黑客入侵。我知道一旦获得 root 访问权限,我就完了,但我仍可以通过不将明文密码散布在服务器各处来减轻损害(我不知道)。通常,我会使用 对其进行 GPG 加密password-store
。也许我应该运行自己的 SMTP 服务器?但是我不能使用我的域名来做这件事,因为我已经用我自己域名的电子邮件设置了 mailbox.org,所以我的 MX DNS 记录指向他们的服务器。我真的不想为此再买一个域名……
摘要 & TL;DR
有没有办法从我的服务器直接向 mailbox.org 提供的我自己的地址发送电子邮件,而无需
- 在我的服务器上运行和维护一个复杂的 SMTP 服务器
- 是否必须在服务器上公开我的密码等敏感信息才能登录提供商的 SMTP 服务器?
答案1
如果你仅有的想要向您的 mailbox.org 帐户发送电子邮件;您可以设置您的邮件客户端,将邮件直接发送到 mailbox.org 的 MX 服务器。这样,您只能向@mailbox.org
帐户发送电子邮件,而不能向互联网的其余部分发送电子邮件。这是因为具有“MX”角色的 SMTP 服务器不允许发送除其自身目的地以外的邮件(或者至少它们不应该允许 :) )。
用作mx1.mailbox.org
SMTP 服务器,在端口 25 上,未经身份验证。
例如:
mtak@dc4:~$ telnet mx1.mailbox.org 25
Trying 2001:67c:2050:104:0:1:25:1...
Connected to mx1.mailbox.org.
Escape character is '^]'.
220 mx1.mailbox.org ESMTP Postfix
HELO dc4.mtak.nl
250 mx1.mailbox.org
MAIL FROM: [email protected]
250 2.1.0 Ok
RCPT TO: [email protected]
250 2.1.5 Ok
DATA
354 End data with <CR><LF>.<CR><LF>
Subject: Test email
This is a test email
.
250 2.0.0 Ok: queued as EBEE94F466
quit
221 2.0.0 Bye
Connection closed by foreign host.
答案2
回答有关使用 Gmail 发送电子邮件不起作用的部分,因为我遇到了同样的问题:
要使用 google 的 smtp 发送电子邮件,您必须启用名为“不太安全的应用程序”的设置,否则它将无法工作,可在以下位置找到:google 帐户、安全、不太安全的应用程序。之后,您可以使用您最喜欢的邮件命令(mail、sendmail、sendemail、ssmtp ..),只需记住为该命令打开 tls 选项即可。
从安全角度来看,专门为此目的创建一个地址就好了。
如果这还不够好,您可以为您的单一用途的 gmail 帐户启用双因素身份验证,然后生成一个应用程序密码(也在帐户、安全性中)并将其存储在您的服务器上并用它代替密码(您不能使用您的密码发送启用了 2FA 的电子邮件,您必须使用应用程序密码)。
sendemail 命令示例:
cat body.txt | sendemail -f "[email protected]" -u "subject" -t "[email protected]" -s "smtp.gmail.com:587" -o tls=yes -xu "[email protected]" -xp "Account Password or App password if 2FA is enabled"