Digital Ocean、SendGrid、Netlify - 注册管理员账户邮件未收到

我使用 Digital Ocean(托管)、SendGrid(SMTP)和 Netlify(域名、DNS)来搭建我的博客公开论坛。

我已经配置好域名和 DNS 部分,并成功访问了注册页面。

但是邮件从未发送到开发者邮箱。

我在 nano containers/app.yml 中尝试了以下配置:

DISCOURSE_HOSTNAME: ‘discourse.myblog.com
DISCOURSE_DEVELOPER_EMAILS: ‘adminEmail@gmail.com’

DISCOURSE_SMTP_ADDRESS: smtp.sendgrid.net
DISCOURSE_SMTP_PORT: 2525
DISCOURSE_SMTP_USER_NAME: {myusername}
DISCOURSE_SMTP_PASSWORD: XX.xxxx.xxxxxxxxx
DISCOURSE_SMTP_ENABLE_START_TLS: true           # (可选,默认为 true)

DISCOURSE_SMTP_ADDRESS: smtp.sendgrid.net
DISCOURSE_SMTP_PORT: 587
DISCOURSE_SMTP_USER_NAME: {myusername}
DISCOURSE_SMTP_PASSWORD: XX.xxxx.xxxxxxxxx
DISCOURSE_SMTP_ENABLE_START_TLS: true           # (可选,默认为 true)

DISCOURSE_SMTP_ADDRESS: smtp.sendgrid.net
DISCOURSE_SMTP_PORT: 587
DISCOURSE_SMTP_USER_NAME: apiKey
DISCOURSE_SMTP_PASSWORD: XX.xxxx.xxxxxxxxx
DISCOURSE_SMTP_ENABLE_START_TLS: true           # (可选,默认为 true)

DISCOURSE_SMTP_ADDRESS: smtp.sendgrid.net
DISCOURSE_SMTP_PORT: 25
DISCOURSE_SMTP_USER_NAME: {myusername}
DISCOURSE_SMTP_PASSWORD: XX.xxxx.xxxxxxxxx
DISCOURSE_SMTP_ENABLE_START_TLS: false           # (可选,默认为 true)

DISCOURSE_SMTP_ADDRESS: smtp.sendgrid.net
DISCOURSE_SMTP_PORT: 25
DISCOURSE_SMTP_USER_NAME: {myusername}
DISCOURSE_SMTP_PASSWORD: XX.xxxx.xxxxxxxxx
DISCOURSE_SMTP_ENABLE_START_TLS: false           # (可选,默认为 true)
DISCOURSE_SMTP_OPENSSL_VERIFY_MODE: none

当我运行 ./discourse-doctor 并测试发送邮件时,收到以下错误:
535 认证失败:用户名或密码错误

看起来您正在将 SendGrid 的 API 密钥用作用户名?

我尝试了 apiKey 以及我的用户名(admin 和 teammate),但仍然无法正常运行。

据我所知,如果你想使用 API 密钥,需要使用用户名 ‘apikey’ 以及对应的密码。我看不出是否有区分大小写的说明,但稳妥起见还是注意一下。 你可能需要联系 DigitalOcean 支持团队,他们已知会阻止新账户向第三方服务发起的出站 SMTP 连接。你能从主机上通过 telnet 连接该端口吗?

如果不能,请使用端口 2525。你无需等待工单。我默认直接使用端口 2525,没有任何缺点。

我也试过 2525……

我也刚试过使用 apikey,但无法工作……

是的,我按照这篇教程(https://sendgrid.com/docs/for-developers/sending-email/getting-started-smtp/)尝试通过 telnet 连接,并成功连接了。

@Stephen 好主意,我会联系 DigitalOcean 来阻止出站 SMTP。

[quote=“erickimme, 帖子:8, 主题:144962”]
好主意,我会联系 DigitalOcean 来阻止出站 SMTP。[/quote]

这没有必要,因为:

[quote=“erickimme, 帖子:7, 主题:144962”]
并且已成功连接。[/quote]

测试邮件是否出现在您的 SendGrid 日志中?

要了解如何操作,您可以咨询 SendGrid 的相关人员。

好的,我会获取日志!

我认为端口可能处于“已过滤”状态存在问题

端口     状态       服务
25/tcp   已过滤    smtp
587/tcp  已过滤    submission
2525/tcp 已过滤    ms-v-worlds

以下是来自 Digital Ocean 的消息:
请检查是否已在防火墙中开放 25 端口。您可以使用以下命令进行检查:nmap -p 25,465,587 “您的 Droplet IP 地址”

示例 nmap 命令:

nmap -p 25,465,587 142.93.189.227

正在启动 Nmap 7.70 ( [https://nmap.org](https://nmap.org/) ),时间:2019-10-08 11:10 IST
Nmap 扫描报告:[unms.adastratechnology.com](http://unms.adastratechnology.com/) (142.93.189.227)
主机已上线(延迟 0.56 秒)。
端口 状态       服务
25/tcp 关闭      smtp
465/tcp 关闭     smtps
587/tcp 关闭     submission

以下是来自 Digital Ocean 的消息:

这将让您了解 25 端口的当前状态。如果端口处于“已过滤”或“关闭”状态,您可以为 25 端口开放云防火墙。

以下是我们关于常用 iptables 命令的指南:https://www.digitalocean.com/community/tutorials/iptables-essentials-common-firewall-rules-and-commands#service-mail

问题不在于您服务器的 25 端口(即入站流量),而是从您的服务器到远程主机 587 端口的出站流量。

DigitalOcean 一直有封锁该端口的历史,因为有时人们会创建新账户来做坏事。

是的,我已经提交了工单,正在等待他们的回复。

你觉得这是否与 SendGrid 有关?
@Stephen

几乎可以肯定不是。我们在新账户上看到很多新安装存在出站端口问题,这与 SendGrid 本身无关。

如果您使用的是 Linux 或 Mac 工作站,可以通过以下方式独立测试通过 587 端口与 SendGrid 的 SMTP 连接:

openssl s_client -starttls smtp -connect smtp.sendgrid.com:587

如果该测试在您的 VPS 上失败,但在其他任何地方都能成功,那么问题出在 DigitalOcean 的出站流量上。

我刚刚在 Mac 上测试过,连接成功。

我在我的 Mac(Catalina)上运行了这段代码

我调用了 openssl s_client -starttls smtp -connect smtp.sendgrid.net:587

得到了以下返回结果

CONNECTED(00000006)
depth=3 C = US, O = "The Go Daddy Group, Inc.", OU = Go Daddy Class 2 Certification Authority
verify return:1
depth=2 C = US, ST = Arizona, L = Scottsdale, O = "GoDaddy.com, Inc.", CN = Go Daddy Root Certificate Authority - G2
verify return:1
depth=1 C = US, ST = Arizona, L = Scottsdale, O = "GoDaddy.com, Inc.", OU = http://certs.godaddy.com/repository/, CN = Go Daddy Secure Certificate Authority - G2
verify return:1
depth=0 OU = Domain Control Validated, CN = *.smtp.sendgrid.net
verify return:1
---
Certificate chain
 0 s:/OU=Domain Control Validated/CN=*.smtp.sendgrid.net
   i:/C=US/ST=Arizona/L=Scottsdale/O=GoDaddy.com, Inc./OU=http://certs.godaddy.com/repository//CN=Go Daddy Secure Certificate Authority - G2
 1 s:/C=US/ST=Arizona/L=Scottsdale/O=GoDaddy.com, Inc./OU=http://certs.godaddy.com/repository//CN=Go Daddy Secure Certificate Authority - G2
   i:/C=US/ST=Arizona/L=Scottsdale/O=GoDaddy.com, Inc./CN=Go Daddy Root Certificate Authority - G2
 2 s:/C=US/ST=Arizona/L=Scottsdale/O=GoDaddy.com, Inc./CN=Go Daddy Root Certificate Authority - G2
   i:/C=US/O=The Go Daddy Group, Inc./OU=Go Daddy Class 2 Certification Authority
---
Server certificate
-----BEGIN CERTIFICATE-----
MIIGvzCCBaegAwIBAgIIR8KHdm5J8J0wDQYJKoZIhvcNAQELBQAwgbQxCzAJBgNV
BAYTAlVTMRAwDgYDVQQIEwdBcml6b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMRow
GAYDVQQKExFHb0RhZGR5LmNvbSwgSW5jLjEtMCsGA1UECxMkaHR0cDovL2NlcnRz
LmdvZGFkZHkuY29tL3JlcG9zaXRvcnkvMTMwMQYDVQQDEypHbyBEYWRkeSBTZWN1
cmUgQ2VydGlmaWNhdGUgQXV0aG9yaXR5IC0gRzIwHhcNMTgxMjI4MjAyMjIwWhcN
MjAxMjI4MjAyMjIwWjBBMSEwHwYDVQQLExhEb21haW4gQ29udHJvbCBWYWxpZGF0
ZWQxHDAaBgNVBAMMEyouc210cC5zZW5kZ3JpZC5uZXQwggEiMA0GCSqGSIb3DQEB
AQUAA4IBDwAwggEKAoIBAQC/xYdx1oyPHcE6EdH61RXJK9JYA9p9GOrYhJ6rVq2c
zpGR3/4EHwaZO/daZxvTn5p3LRBBW5KBBBNCLa0Vl84dLt6skUg3oWo17mim2ly1
AegTwN15/wxqq8Hf2G4Sr9g00zlBAEs2HeOyr3SxEvLCLscYtIKG7cD+CsUi0JT6
EeDXCVL04nJIheFh4h9TRcCook97yuqt7muySrarzekatOnpv4kuU8bk0uq4ym5K
NO4zRUiCRy7JXAC2KZ4+0qhSlPFACRvygdPxK5ICvQq8/ZPlRWVn3yrWnQ4kEekp
jDT4ucOpv8V/SxYmsBRqFD35ASDj6PZLYmJFb9XdzGCzAgMBAAGjggNFMIIDQTAM
BgNVHRMBAf8EAjAAMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAOBgNV
HQ8BAf8EBAMCBaAwNwYDVR0fBDAwLjAsoCqgKIYmaHR0cDovL2NybC5nb2RhZGR5
LmNvbS9nZGlnMnMxLTkwMS5jcmwwXQYDVR0gBFYwVDBIBgtghkgBhv1tAQcXATA5
MDcGCCsGAQUFBwIBFitodHRwOi8vY2VydGlmaWNhdGVzLmdvZGFkZHkuY29tL3Jl
cG9zaXRvcnkvMAgGBmeBDAECATB2BggrBgEFBQcBAQRqMGgwJAYIKwYBBQUHMAGG
GGh0dHA6Ly9vY3NwLmdvZGFkZHkuY29tLzBABggrBgEFBQcwAoY0aHR0cDovL2Nl
cnRpZmljYXRlcy5nb2RhZGR5LmNvbS9yZXBvc2l0b3J5L2dkaWcyLmNydDAfBgNV
HSMEGDAWgBRAwr0njsw0gzCiM9f7bLPwtCyAzjAxBgNVHREEKjAoghMqLnNtdHAu
c2VuZGdyaWQubmV0ghFzbXRwLnNlbmRncmlkLm5ldDAdBgNVHQ4EFgQUqLajl4xR
pZ1YZD2l6KsTfcmd8t4wggF9BgorBgEEAdZ5AgQCBIIBbQSCAWkBZwB2AKS5CZC0
GFgUh7sTosxncAo8NZgE+RvfuON3zQ7IDdwQAAABZ/Z7aIYAAAQDAEcwRQIhAOhF
95cuap1qIlSVtRzNkaUbNHxpgj+RoBfxcSFgqlBZAiBNsRnVaIwWMBoR9s+a9YwC
neLWWN777jRjew5mv2DVbwB2AO5Lvbd1zmC64UJpH6vhnmajD35fsHLYgwDEe4l6
qP3LAAABZ/Z7bY8AAAQDAEcwRQIgJZMibCSMJDwTwEp64XSQQXCuYtKJDvhT7FwK
rxoyH6oCIQCz1HVQbPLwMOXQPBRQFtpYEb18JCVdzlh8+f0hITgC5gB1AF6nc/nf
VsDntTZIfdBJ4DJ6kZoMhKESEoQYdZaBcUVYAAABZ/Z7cugAAAQDAEYwRAIgQoxF
Fak6Aq9tVDo5BjaSl+90pZ8928SmDpA3XrQ7BrQCIHdOuigFbYK96gJ/GPaVNGqc
w5FKxw9Z8TnpjZH1GEC/MA0GCSqGSIb3DQEBCwUAA4IBAQBbBTL603nJ9H7ClsKR
g/XmFpGwQ4C5OftGmZ/Z/CG9iqOkLB2TPqdJ9NZRruMpWjnOnvDFoQ3NMSfDYdsn
25fzh30fx2+zIWW2IdKa1yO4A9tr3cxn4iINy/+dcNmF6tciGJtdBhZZgpyqhymu
kjuMCQRL17uVkLyrYA/+Ti5N02fzRchprOydiasnhHSdDM3HVZQOqjOvoB5omtuf
D1aldjrgW+TcILlnZxYvaqDPeMvUIZxQPzealRniQ7tmMOAgJfjZXxzuXatqXqw0
zbvQOiY2pSDn7WPxLbGafLAOFWIWhHtkEZMRC2n3WpupiZuC0pacmQeUgVY6Vabs
KU8W
-----END CERTIFICATE-----
subject=/OU=Domain Control Validated/CN=*.smtp.sendgrid.net
issuer=/C=US/ST=Arizona/L=Scottsdale/O=GoDaddy.com, Inc./OU=http://certs.godaddy.com/repository//CN=Go Daddy Secure Certificate Authority - G2
---
No client certificate CA names sent
Server Temp Key: ECDH, P-256, 256 bits
---
SSL handshake has read 5002 bytes and written 357 bytes
---
New, TLSv1/SSLv3, Cipher is ECDHE-RSA-AES256-GCM-SHA384
Server public key is 2048 bit
Secure Renegotiation IS supported
Compression: NONE
Expansion: NONE
No ALPN negotiated
SSL-Session:
    Protocol  : TLSv1.2
    Cipher    : ECDHE-RSA-AES256-GCM-SHA384
    Session-ID: F315CBBB90B16A8F85D95F0CD18C07135A128B5FE6CE53D50C7CF81310B28732
    Session-ID-ctx: 
    Master-Key: E4C09CCC8AECB9C596D608B79E9A5360B88E2C31EB98C770E96A5037177F7F5D92B9CFA449B8ECA7AEA5D4CB873601D4
    TLS session ticket lifetime hint: 300 (seconds)
    TLS session ticket:
    0000 - f7 61 88 44 b6 0d 7c ce-0c 35 b3 ba 33 03 ce 33   .a.D..|..5..3..3
    0010 - 95 99 62 e9 f9 ea 5e e6-00 f8 09 66 47 bd 28 cf   ..b...^....fG.(.
    0020 - 51 64 c5 76 3a ac b2 e2-ff 2a be 29 63 8c a8 d2   Qd.v:....*.)c...
    0030 - 76 2e ba 08 32 74 4a 4b-24 c8 69 ef 71 8e da e6   v...2tJK$.i.q...
    0040 - e3 dd c3 a8 19 84 02 c9-9e e7 7a 7a b8 b7 78 f3   ..........zz..x.
    0050 - 02 8c e6 ff 85 0e f5 4d-f3 5a 49 b1 22 40 12 ee   .......M.ZI."@..
    0060 - 7d d5 8c f4 d9 50 57 0a-c2 82 06 52 9e 64 89 fd   }....PW....R.d..
    0070 - 21 7b e4 f0 f3 e8 2c 61-09 a7 99 1f c8 7e c5 1b   !{....,a.....~..
    0080 - 23 fc 11 bc a7 8d 21 d6-05 6f 86 66 5b e9 2e 87   #.....!..o.f[...
    0090 - d0 98 8f b2 2b 7d 18 90-50 62 67 8f 77 8b c2 37   ....+}..Pbg.w..7

    Start Time: 1584738375
    Timeout   : 7200 (sec)
    Verify return code: 0 (ok)
---
250 AUTH=PLAIN LOGIN

好的,如果您输入 EHLO 并按回车键,应该会收到如下响应:

250-smtp.sendgrid.net
250-8BITMIME
250-PIPELINING
250-SIZE 31457280
250-STARTTLS
250-AUTH PLAIN LOGIN
250 AUTH=PLAIN LOGIN

这证明您可以连接到 SendGrid。如果从 DigitalOcean Droplet 连接失败,那么答案就显而易见了。

我想我已经连接上了?所以我认为我们和 SendGrid 的配合没问题。

EHLO
250-smtp.sendgrid.net
250-8BITMIME
250-PIPELINING
250-SIZE 31457280
250-STARTTLS
250-AUTH PLAIN LOGIN
250 AUTH=PLAIN LOGIN

@Stephen 仍在等待 DigitalOcean 关于如何解除出站邮件限制的回复。

好的,那么如果你通过 SSH 从 droplet 重复该操作,能连接上吗?

我刚刚从我的一个 DigitalOcean droplet 上检查过,情况相同,587 端口是开放的。

如果我之前说的是对的,连接应该会失败。如果确实失败了,那你就是在正确的方向上排查问题——尽早确认总比等到最后才发现问题出在别处要好!

您已经展示了至少两种不同的情况,证明出站邮件并未被 Digital Ocean 封锁。

我冒昧地推测,您使用的用户名或密码不正确。