感谢您的帮助。我是开发人员和Phoenix的新手。
最近我开发了一个网站,该网站在提交表单时发送电子邮件。
我在iex环境中测试了该应用程序,效果很好,它只发送一封电子邮件,其中包含来自表单的信息。但是,当我将应用程序部署到Heroku时,电子邮件被发送了两次,我不知道为什么。
我在mix.exs文件中使用具有Bamboo依赖项的SMTP,并且在使用Bluehost SMTP配置。
代码如下:
mix.exs
defp deps do
[
{:phoenix, "~> 1.3.2"},
{:phoenix_pubsub, "~> 1.0"},
{:phoenix_ecto, "~> 3.2"},
{:postgrex, ">= 0.0.0"},
{:phoenix_html, "~> 2.10"},
{:phoenix_live_reload, "~> 1.0", only: :dev},
{:gettext, "~> 0.11"},
{:bamboo, "~> 1.0"},
{:cowboy, "~> 1.0"},
{:bamboo_smtp, "~> 1.5.0"}
]
end
config.exs
config :app, App.Mailer,
adapter: Bamboo.SMTPAdapter,
server: "mail.app.com",
hostname: "app.com",
port: 26,
username: System.get_env("USER_ID"),
password: System.get_env("USER_PASS"),
tls: :if_available,
allowed_tls_versions: [:"tlsv1", :"tlsv1.1", :"tlsv1.2"],
ssl: false,
retries: 1,
no_mx_lookups: false,
auth: :always
email.ex
defmodule App.Email do
use Bamboo.Phoenix, view: App.EmailView
def contact_email(message) do
new_email()
|> from("postmaster@app.com")
|> to("contacto@app.com")
|> put_text_layout({AppWeb.LayoutView, "email.html"})
|> subject("New lead in App")
|> assign(:message, message)
|> render("send_email.html")
|> App.Mailer.deliver_later
end
mailer.exs
defmodule App.Mailer do
use Bamboo.Mailer, otp_app: :app
end
此外,在我的.gitignore文件中,我忽略了包含环境变量的.env文件,并且已经在Heroku中使用以下命令对其进行了设置:
heroku config:set VARIABLE_NAME=variable
我不知道会发生什么,并且感谢我能得到的所有答案。另外,如果您需要更多代码信息,请告诉我。
答案 0 :(得分:1)
这只是一个猜测,但是您可能多次呼叫App.Mailer.deliver_later
(或App.Mailer.deliver_now
)。一次来自App.Email.contact_email
,一次来自接收接收到的表单数据的控制器操作。
如果是这种情况,从App.Mailer.deliver_later
函数中删除contact_email
可能是解决方案。