我怀疑问题是我根本找不到如何为 Elixir / Phoenix 配置 Amazon SES 配置的工作示例。
问题似乎是
cacerts: :undefined
。
export SES_SMTP_SERVER=email-smtp.us-west-1.amazonaws.com
export SES_SMTP_PORT=465
export SES_SMTP_USERNAME=redacted
export SES_SMTP_PASSWORD=redacted
这是我的
config/prod.exs
:
config :my_app, MyApp.Mailer,
adapter: Bamboo.SMTPAdapter,
server: System.get_env("SES_SMTP_SERVER") || "email-smtp.us-east-1.amazonaws.com",
port: String.to_integer(System.get_env("SES_SMTP_PORT") || "587"),
username: System.get_env("SES_SMTP_USERNAME"),
password: System.get_env("SES_SMTP_PASSWORD"),
tls: :always,
tls_cacertfile: "/etc/ssl/certs/ca-certificates.crt",
ssl: true,
retries: 1,
ssl_options: [
verify: :verify_peer,
cacertfile: "/etc/ssl/certs/ca-certificates.crt"
]
这是我尝试发送电子邮件时遇到的错误:
Failed to send email.
Reason: {:network_failure, ~c"54.176.126.9", {:error, {:options, :incompatible, [verify: :verify_peer, cacerts: :undefined]}}}
听起来好像找不到SSL/TLS(?)证书文件。我运行了
apt-get install ca-certificates
无济于事,同样的错误消息。
我查找了 Bamboo.SMTPAdapter [1] 的文档,但没有提示如何指定 SSL 证书。
有人在生产环境中成功从 Phoenix 发送了电子邮件吗?
就上下文而言,我在尝试使用 Elixir / Phoenix 通过 Gmail 发送电子邮件时遇到了类似的错误:Phoenix / Elixir:通过 Gmail 证书发送电子邮件错误
更新:我从 Swoosh 开始,改用 Bamboo,两者都不起作用,所以我的问题是:根本问题是什么?
我设法让它工作。使用 Swoosh SMTPAdapter,不使用 Mua。
这是我在 2024 年使用 Amazon SES 从 Elixir Phoenix 发送电子邮件的工作配置:
smtp_relay =
System.get_env("SES_SMTP_SERVER")
|> to_charlist()
config :my_app, MyApp.Mailer,
adapter: Swoosh.Adapters.SMTP,
relay: System.get_env("SES_SMTP_SERVER") || "email-smtp.us-east-1.amazonaws.com",
port: String.to_integer(System.get_env("SES_SMTP_PORT") || "587"),
username: System.get_env("SES_SMTP_USERNAME"),
password: System.get_env("SES_SMTP_PASSWORD"),
tls: :always,
auth: :always,
ssl: false, # true if using port 465
tls_options: [
verify: :verify_peer,
middlebox_comp_mode: false, # <--- this is required!
# cacerts: :certifi.cacerts(),
cacerts: :public_key.cacerts_get(),
server_name_indication: smtp_relay, # <--- this is required!
depth: 99,
log_level: :debug
]
我还遇到了
auth_failed
错误,这是由于使用 Amazon SES 用户名(不正确)而不是从 Amazon SES 设置页面随机生成的 SMTP 用户名和密码引起的。
祝大家好运,即使是那些投反对票的人。