如何将 sendmail 与来自 Google Compute Engine 的 SendGrid 一起使用?

How to use sendmail with SendGrid from Google Compute Engine?

我有一个使用 Joomla! 运行的简单网站,它有一个联系表,访问者可以从中向我发送消息。此消息是使用 sendmail 服务通过电子邮件发送的。

网站机器 运行 在 Google Compute Engine 中,默认情况下我不能从它发送电子邮件(这是 Google 强加的限制)。要实现发送邮件的目的,需要一个第三方服务,比如SendGrid。

我使用 Google Cloud partner program 在 SendGrid 上创建了一个免费帐户,验证了我的用户等等。该帐户已正确配置。

根据 this tutorial,我将我的 sendmail 服务配置为使用 SendGrid 发送电子邮件。一切似乎都很好,但是......根本没有消息传递。

我在 /var/log/mail.log 的邮件日志显示:

Jan 21 16:22:10 web-hosting sm-mta[16350]: t0JHWaec027559: to=<my@email.com>, delay=1+22:49:34, xdelay=00:00:00, mailer=relay, pri=23251559, re
lay=smtp.sendgrid.net., dsn=4.0.0, stat=Deferred: Connection timed out with smtp.sendgrid.net.

According to Google,我的机器无法使用端口25465587,所以我更改了配置以使用端口2525sendmail.mc 文件中。没有任何变化。

有什么提示吗?我的机器是 运行 Ubuntu 14.04LTS.

好的,我找到问题了。

我原来的 /etc/mail/sendmail.mc 文件没有 #dnl define(‘SMART_HOST’, ‘smtp.your.provider’)dnl 行,所以我不知道把配置放在哪里 (source):

define(`SMART_HOST', `smtp.sendgrid.net')dnl
FEATURE(`access_db')dnl
define(`RELAY_MAILER_ARGS', `TCP $h 2525')dnl
define(`ESMTP_MAILER_ARGS', `TCP $h 2525')dnl

(注意:对于 Google Compute Engine 机器,您需要使用 2525 端口而不是默认的 587)

问题是,你不能把它放在文件的末尾。当我把它放在 "DO NOT TOUCH HERE" 部分之后时,配置开始工作:

dnl # Items controlled by /etc/mail/sendmail.conf - DO NOT TOUCH HERE
...
DAEMON_OPTIONS(`Family=inet,  Name=MSP-v4, Port=submission, M=Ea, Addr=127.0.0.1')dnl
dnl # SendGrid code here