我是服务器管理员新手,尝试使用 GSUITE 用户作为发件人从我的服务器发送电子邮件
我读了很多教程(包括配置 postfix 以在 Google Compute Engine 实例中使用 Google Apps SMTP 中继)但我对所有 EHLO / TLS / 的概念都感到困惑...
我只想 :
- 从服务器发送电子邮件:
- 主办我的主机名.COM
- 有 IP 地址我的主机 IP
- 使用主机名我的主机名
- 使用 gsuite 域我的 GSUITE 域.COM
到目前为止我有:
- 在 /etc/postfix/sasl/sasl_passwd 中输入我的 SMTP 凭据并生成 sasl_passwd.db 文件
- 配置 Gsuite SMTP 中继选项如下谷歌文档
- 允许来自我的 Gsuite 域的用户
- 要求 smtp 身份验证
- 不需要 TLS 身份验证
我的 postfix 配置 /etc/postifx/main.cf 如下:
myorigin = /etc/mailname ## FILE CONTAINS ONLY MY_HOST_NAME
biff = no
readme_directory = no
compatibility_level = 2
smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
smtpd_use_tls=yes
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
smtpd_sasl_auth_enable = yes
smtp_sasl_security_options = noanonymous
smtp_sasl_password_maps = hash:/etc/postfix/sasl/sasl_passwd
myhostname = MY_HOST_NAME.COM
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
mydestination = $myhostname, MY_GSUITE_DOMAIN.COM, localhost
fallback_transport = relay
relayhost = [smtp-relay.gmail.com]:587
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = loopback-only
inet_protocols = ipv4
我尝试使用 sendmail 命令发送一封测试电子邮件:
echo "Subject: sendmail test " | sendmail -v [email protected]
...并在 /var/log/mail.log 中继续出现相同的错误:
Sep 19 11:06:18 MY_HOST_NAME postfix/pickup[22443]: B40A61D4FD0: uid=0 from=<root>
Sep 19 11:06:18 MY_HOST_NAME postfix/cleanup[9353]: B40A61D4FD0: message-id=<20190919090618.B40A61D4FD0@**MY_SERVER_HOST.COM**>
Sep 19 11:06:18 MY_HOST_NAME postfix/qmgr[22444]: B40A61D4FD0: from=<root@**MY_GSUITE_DOMAIN.COM**>, size=275, nrcpt=1 (queue active)
Sep 19 11:06:18 MY_HOST_NAME postfix/smtp[9355]: B40A61D4FD0: to=<[email protected]>, relay=smtp-relay.gmail.com[173.194.76.28]:587,
delay=0.23, delays=0.03/0.01/0.08/0.11, dsn=5.7.1, status=bounced
(host smtp-relay.gmail.com[173.194.76.28] said: 550-5.7.1 Invalid credentials for relay [**MY_SERVER_IP**].
The IP address you've 550-5.7.1 registered in your G Suite SMTP Relay service doesn't match domain of 550-5.7.1
the account this email is being sent from. If you are trying to relay 550-5.7.1 mail from a domain that isn't
registered under your G Suite account 550-5.7.1 or has empty envelope-from, you must configure your mail
server 550-5.7.1 either to use SMTP AUTH to identify the sending domain or to present 550-5.7.1 one of your
domain names in the HELO or EHLO command. For more 550-5.7.1 information, please visit 550 5.7.1
https://support.google.com/a/answer/6140680#invalidcred d13sm115728wrp.67 - gsmtp (in reply to MAIL FROM command))
Sep 19 11:06:18 MY_HOST_NAME postfix/cleanup[9353]: EE3691D4FD2: message-id=<20190919090618.EE3691D4FD2@**MY_SERVER_HOST.COM**>
Sep 19 11:06:18 MY_HOST_NAME postfix/qmgr[22444]: EE3691D4FD2: from=<>, size=3661, nrcpt=1 (queue active)
Sep 19 11:06:18 MY_HOST_NAME postfix/bounce[9368]: B40A61D4FD0: sender non-delivery notification: EE3691D4FD2
Sep 19 11:06:18 MY_HOST_NAME postfix/cleanup[9353]: EF93A1D4FCA: message-id=<20190919090618.EF93A1D4FCA@**MY_SERVER_HOST.COM** >
Sep 19 11:06:18 MY_HOST_NAME postfix/bounce[9369]: B40A61D4FD0: sender delivery status notification: EF93A1D4FCA
答案1
错误在于myorigin 参数: 它一定要是我的 GSUITE 域.COM拥有正确的发件人而不是主机。
因此谷歌错误在这里有点误导。
另外,不要忘记降低 gsuite 帐户中不太安全的应用程序:https://support.google.com/a/answer/6260879?hl=fr
对于像我一样想要使用 php 从 gsuite 电子邮件帐户发送邮件的人,请不要忘记:
- 指定发件人,可以在 php.ini 中,也可以直接在 php 脚本中(在 php 邮件中,或其他任何地方)
- 在 php.ini 中定义 sendmail 命令的正确位置
...并使用 /var/log/mail.log 或类似的发行版进行调试。
到目前为止,我发现有关 postfix / gsuite 设置的最佳教程是这个:https://www.linode.com/docs/email/postfix/configure-postfix-to-send-mail-using-gmail-and-google-apps-on-debian-or-ubuntu/
(我跳过了应用程序密码部分)