我有一个简单的网站,它运行着Joomla!,它有一个联系表格,访问者可以从中向我发送消息。此消息是使用 sendmail
服务通过电子邮件发送的。
网站机器在谷歌计算引擎中运行,默认情况下我不能从它发送电子邮件(这是谷歌施加的限制)。为了实现发送电子邮件的目标,需要第三方服务,例如SendGrid。
我使用 Google Cloud 合作伙伴计划在 SendGrid 上创建了一个免费帐户,验证了我的用户等等。帐户已正确预配。
根据本教程,我将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.
根据谷歌的说法,我的机器无法使用端口25
、465
和587
,所以我更改了配置以使用 sendmail.mc
文件中的端口2525
。什么都没有改变。
有什么提示吗?我的机器运行的是 Ubuntu 14.04LTS。
好的,我发现了问题。
我的原始/etc/mail/sendmail.mc
文件没有#dnl define(‘SMART_HOST’, ‘smtp.your.provider’)dnl
行,所以我不知道将配置放在哪里(来源):
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)
问题是,你不能把它放在文件的末尾。当我把它放在"不要触摸这里"部分之后时,配置开始工作:
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