我正在尝试设置 sendmail,以便最终由驻留在同一个服务器(Digital Ocean droplet)上的 Django/python 应用程序使用,但是,在我尝试让它在 python 中工作之前,我想在命令行上对其进行测试。
我使用本教程进行了设置:https://www.cloudbooklet.com/how-to-install-and-setup-sendmail-on-ubuntu/,但是如果该链接消失,以下是我迄今为止运行的设置命令:
sudo apt update
sudo apt upgrade
sudo apt install sendmail
sudo vim /etc/hosts
(added my domain 'prosaurus' to the 127.0.0.1 line after localhost
sudo mkdir /etc/mail/authinfo
udo chmod -R 700 /etc/mail/authinfo
cd /etc/mail/authinfo
sudo vim smtp-auth
(added: AuthInfo: "U:root" "I:email-address" "P:password") with my info
sudo makemap hash smtp-auth < smtp-auth
cd /etc/mail
sudo vim sendmail.mc
Added all of this:
define(`SMART_HOST',`[smtp.prosaurus.com]')dnl
define(`RELAY_MAILER_ARGS', `TCP $h 587')dnl
define(`ESMTP_MAILER_ARGS', `TCP $h 587')dnl
define(`confAUTH_OPTIONS', `A p')dnl
TRUST_AUTH_MECH(`EXTERNAL DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
define(`confAUTH_MECHANISMS', `EXTERNAL GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
FEATURE(`authinfo',`hash -o /etc/mail/authinfo/smtp-auth.db')dnl
cd /etc/mail
make
sudo /etc/init.d/sendmail restart
注意:由于我没有使用 PHP,因此当教程讲到 PHP 部分时,我就停止了。我接下来做的是尝试在命令行中使用以下命令来使用 sendmail:
echo "Subject: sendmail test" | sendmail -v [email protected]
我得到的答复是这样的:
WARNING: local host name (ubuntu-myserverinfo) is not qualified; see cf/README: WHO AM I?
[email protected]... Connecting to [127.0.0.1] via relay...
220 ubuntu-myserverinfo ESMTP Sendmail 8.15.2/8.15.2/Debian-22ubuntu3; Tue, 27 Sep 2022 21:37:07 GMT; (No UCE/UBE) logging access from: localhost(OK)-localhost [127.0.0.1]
>>> EHLO ubuntu-myserverinfo
250-ubuntu-myserverinfo Hello localhost [127.0.0.1], pleased to meet you
250-ENHANCEDSTATUSCODES
250-PIPELINING
250-EXPN
250-VERB
250-8BITMIME
250-SIZE
250-DSN
250-ETRN
250-AUTH DIGEST-MD5 CRAM-MD5
250-DELIVERBY
250 HELP
>>> VERB
250 2.0.0 Verbose mode
>>> MAIL From:<myuser@ubuntu-myserver> SIZE=23 AUTH=myuser@ubuntu-myserver
250 2.1.0 <myuser@ubuntu-myserver>... Sender ok
>>> RCPT To:<[email protected]>
>>> DATA
250 2.1.5 <[email protected]>... Recipient ok
354 Enter mail, end with "." on a line by itself
>>> .
050 <[email protected]>... Connecting to smtp.prosaurus.com. port 587 via relay...
050 <[email protected]>... Deferred: Connection refused by smtp.prosaurus.com.
250 2.0.0 28RLb7KM022677 Message accepted for delivery
[email protected]... Sent (28RLb7KM022677 Message accepted for delivery)
Closing connection to [127.0.0.1]
>>> QUIT
221 2.0.0 ubuntu-myserver closing connection
注意:个人信息已从消息中删除
知道我错过了什么吗?
附录...
我想我可能没有完全理解发送电子邮件所涉及的内容。这是试图解释我的情况。
我只有一台服务器。这台服务器上有我的 Python 代码。这台服务器是我网站的目的地。所有 DNS 记录都指向这台服务器
我已按照列出的教程和命令在此服务器上安装了 sendmail。我没有使用任何其他电子邮件服务器。我的目标是将单个服务器设置为我的电子邮件服务器。
我自己配置了 sendmail。它指向 smtp.mysite.com。这对我来说似乎很奇怪,服务器必须自己联系自己才能发送电子邮件。似乎典型的设置实际上涉及多台服务器,而我把它们都放在同一台机器上的做法是错误的。
我没有在这台机器上安装邮件服务器(除了 sendmail 之外)。也许这就是缺少的东西?
答案1
您的本地 sendmail 已配置为使用智能主机。
配置智能主机拒绝来自本地 sendmail 的 TCP-SMTP 连接。
>>> VERB
[…]
050 <[email protected]>... Connecting to smtp.prosaurus.com. port 587 via relay...
050 <[email protected]>... Deferred: Connection refused by smtp.prosaurus.com.
进行最终测试:尝试使用telnet
程序从您的主机获取 SMTP 问候消息。
telnet smtp.prosaurus.com 587
您可以在智能主机上 ctelnet SMTP (25) 或 SMTPS (465) 吗?
[传统 telnet 不会在 SMTPS (465) 端口上获取 SMTP 问候语,因为它不支持加密]