在 ec2 实例上,IP 是动态的,如果我想使用第三方 SMTP 网关(例如 sendgrid),以下字段的建议值是什么?
myorigin
myhostname
mydestination
假设我的实例主机名 (FQDN) 是
ip-12-34-56-78.us-west-2.compute.internal
而且我没有任何其他主机名映射到这台机器,因为它本质上是纯动态的,但是,我可以通过以下地址接收电子邮件[email protected]
更新:我无法使用弹性 IP,因为每个区域只有 5 个,并且我想要一个无需使用固定 IP 即可工作的解决方案。
答案1
在 ec2 实例上,IP 是动态的,
这是恰恰什么EC2 弹性 IP是。获取一个 EIP,将其与您的服务器关联,然后您可以将适当的 DNS 记录指向该 EIP。
答案2
我有一个类似的通过 mailgun 进行中继的设置。
首先,您可以使用以下方法获取实例的公共 IP:
http://169.254.169.254/latest/meta-data/public-ipv4
在实例内部,就我而言,我使用业务流程编排(即 Chef + OpsWorks)在启动时为实例自动在 Route53 中创建 DNS 记录。
您可能还会使用:
http://169.254.169.254/latest/meta-data/public-hostname
获取实例主机名,然后将其插入到您的 postfix 配置中。
我使用 servername.servers.mydomain.com (在启动时自动创建)作为hostname
andmydomain
为mydestination
空。
我还必须在 /etc/postfix/transport 中创建一个传输文件,其内容如下:
* smtp:smtp.mailgun.org
答案3
首先,大多数第三方 SMTP 网关提供商支持将其服务用作经过身份验证的加密中继主机:
关键是,您不必使用 IP 地址或主机名进行访问控制。您使用加密 (TLS) 和身份验证,因此一旦设置了身份验证,SMTP 提供商就应该“信任”来自您本地 postfix 实例的所有邮件。大多数sendmail
也有使用方法。
至于配置值:
myorigin
肯定应该是example.com
- 您希望用户看到您的邮件来自哪里。- 我认为
myhostname
将被设置为:- 保留
myhostname
默认设置,因为这对你的 SMTP 提供商来说无关紧要 - 出于同样的原因,只需将其硬编码
myhostname
为任意名称即可aws-web.example.com
- 这对你的 SMTP 提供商来说并不重要
- 保留
mydestination
应保留为默认设置 - 您不会在本地传递任何邮件。
如果你想变得非常花哨,你也可以使用sender_dependent_relayhost_maps
选项。
最后,您还没有描述您使用什么从 EC2 实例发送电子邮件。根据语言和库(我正在查看您php 邮件)您的邮件提交代理(MSA)可能会做一些奇怪的事情来破坏您的消息,可能会忽略上面设置的值。php mail 是臭名昭著的,因为在大多数系统上它试图调用二进制文件sendmail
,您必须明确解决这个问题,以防止以运行 Web 服务器的用户身份发送消息(例如www-data
或apache
)
答案4
sendgrid 使用基于密码的身份验证(配置详情见下文)。它不会关心您的 IP 或您使用的主机名(myhostname、myorigin 等)。
您的服务器在 HELO(或 EHLO)问候语中向 sendgrid 提供的主机名可能会出现在邮件标头中。某些收件人的垃圾邮件软件可能会检查它,因此请使用公共 DNS 中确实存在且不与可疑域关联的名称,但很少有系统会注意到这些内容。做得好是好事,但并不重要。
我有一个配置,我通过 sendgrid 为多个域发送邮件,因此 postfix 需要知道每个发件人域使用哪个 sendgrid 帐户。(如果它不是已知的发件人域,它会通过本地中继发送,而不使用 sendgrid)。这并不是您真正想要的,但我猜您认为的问题与域名有关,而您的 IP 转移实际上与使用 sendgrid 进行身份验证有关。
主文件:
relayhost = smtp.example.com
smtp_sender_dependent_authentication = yes
sender_dependent_relayhost_maps = hash:/etc/postfix/sender_relay
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_sasl_security_options = noanonymous
在/etc/postfix/sender_relay中:
@domain1.example.com [smtp.sendgrid.net]:submission
@domain2.example.com [smtp.sendgrid.net]:submission
在 /etc/postfix/sasl_passwd 中:
@domain1.example.com sendgrid-user-1:Pa$$w0rd1
@domain2.example.com sendgrid-user-2:Pa$$w0rd2