从Heroku部署的Phoenix App发送了重复的电子邮件

时间:2018-08-21 20:15:33

标签: heroku elixir phoenix-framework phoenix

感谢您的帮助。我是开发人员和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

我不知道会发生什么,并且感谢我能得到的所有答案。另外,如果您需要更多代码信息,请告诉我。

1 个答案:

答案 0 :(得分:1)

这只是一个猜测,但是您可能多次呼叫App.Mailer.deliver_later(或App.Mailer.deliver_now)。一次来自App.Email.contact_email,一次来自接收接收到的表单数据的控制器操作。

如果是这种情况,从App.Mailer.deliver_later函数中删除contact_email可能是解决方案。