谢谢你的帮助。我是新来的发展和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条答案
按热度按时间643ylb081#
这只是猜测,但您可能多次调用
App.Mailer.deliver_later
(或App.Mailer.deliver_now
),一次来自App.Email.contact_email
,一次来自接收发送的表单数据的控制器操作。如果是这种情况,从
contact_email
函数中删除App.Mailer.deliver_later
可能是解决方案。