在 Heroku 中尝试使用 Mailgun 发送电子邮件时出现 500 内部服务器错误,使用 Rails 7 和 mail_form
Getting 500 Internal Server Error while trying to send an email using Mailgun in Heroku , using Rails 7 and mail_form
我正在这里学习本教程 https://gist.github.com/stevecondylios/16a53b73f22621e3cde2e17096dbf5ca
它教你如何在 Rails 6 上使用 mail_form 制作一个简单的联系表,我使用的是 Rails 7,大部分过程是相同的, 它在开发中运行良好,因为我已经用 MailCatcher 测试了几次并且邮件发送正确,我遇到的唯一问题是当我尝试在生产环境中测试表单时。
问题来自 Mailgun 500 Internal Server Error
,当我提交表单时,这让我感到困惑,因为我还没有在互联网上找到类似的问题,我已经交叉引用了几个教程和问题,我发现了其他几条错误消息,还有一些 500 Internal Server Error
但 none 的答案对他们有帮助。
我的配置几乎与教程中的完全相同,但这是我的配置,也许我遗漏了什么,请注意我已经添加了真正的“example@mail.com”到“ Mailgun 中的“授权收件人”部分,并且我有一个自定义域并且可以与 Heroku 的其余部分正常工作,我还在 Heroku 上设置了正确的 ENV 变量:
联系方式:
class Contact < MailForm::Base
attribute :name, validate: true
attribute :email, validate: /\A([\w\.%\+\-]+)@([\w\-]+\.)+([\w]{2,})\z/i
attribute :message
attribute :nickname, captcha: true
# Declare the e-mail headers. It accepts anything the mail method
# in ActionMailer accepts.
def headers
{
:subject => "Contact Form Inquiry",
:to => "example@mail.com",
:from => %("#{name}" <#{email}>)
}
end
end
在production.rb
ActionMailer::Base.smtp_settings = {
:port => ENV['MAILGUN_SMTP_PORT'],
:address => ENV['MAILGUN_SMTP_SERVER'],
:user_name => ENV['MAILGUN_SMTP_LOGIN'],
:password => ENV['MAILGUN_SMTP_PASSWORD'],
:domain => 'https://www.example.com/',
:authentication => :plain,
}
ActionMailer::Base.delivery_method = :smtp
Heroku 日志:
2022-04-28T20:35:32.118071+00:00 heroku[router]: at=info method=POST path="/contacts" host=www.pocket-witch.games request_id=b1e694c5-cea3-427f-bbdd-aa3cc3a92d6b fwd="177.249.170.124" dyno=web.1 connect=0ms service=13ms status=500 bytes=1827 protocol=https
2022-04-28T20:35:32.106145+00:00 app[web.1]: I, [2022-04-28T20:35:32.106072 #4] INFO -- : [b1e694c5-cea3-427f-bbdd-aa3cc3a92d6b] Started POST "/contacts" for 177.249.170.124 at 2022-04-28 20:35:32 +0000
2022-04-28T20:35:32.106961+00:00 app[web.1]: I, [2022-04-28T20:35:32.106912 #4] INFO -- : [b1e694c5-cea3-427f-bbdd-aa3cc3a92d6b] Processing by ContactsController#create as TURBO_STREAM
2022-04-28T20:35:32.107080+00:00 app[web.1]: I, [2022-04-28T20:35:32.107015 #4] INFO -- : [b1e694c5-cea3-427f-bbdd-aa3cc3a92d6b] Parameters: {"authenticity_token"=>"[FILTERED]", "contact"=>{"name"=>"John", "email"=>"example@mail.com", "message"=>"Example message", "nickname"=>""}, "commit"=>"Send Message"}
2022-04-28T20:35:32.109199+00:00 app[web.1]: I, [2022-04-28T20:35:32.109137 #4] INFO -- : [b1e694c5-cea3-427f-bbdd-aa3cc3a92d6b] Rendered contact_mailer/contact_mail.html.erb within layouts/mailer (Duration: 0.1ms | Allocations: 8)
2022-04-28T20:35:32.109367+00:00 app[web.1]: I, [2022-04-28T20:35:32.109331 #4] INFO -- : [b1e694c5-cea3-427f-bbdd-aa3cc3a92d6b] Rendered layout layouts/mailer.html.erb (Duration: 0.3ms | Allocations: 46)
2022-04-28T20:35:32.109834+00:00 app[web.1]: I, [2022-04-28T20:35:32.109777 #4] INFO -- : [b1e694c5-cea3-427f-bbdd-aa3cc3a92d6b] Rendered contact_mailer/contact_mail.text.erb within layouts/mailer (Duration: 0.1ms | Allocations: 4)
2022-04-28T20:35:32.109975+00:00 app[web.1]: I, [2022-04-28T20:35:32.109923 #4] INFO -- : [b1e694c5-cea3-427f-bbdd-aa3cc3a92d6b] Rendered layout layouts/mailer.text.erb (Duration: 0.2ms | Allocations: 41)
2022-04-28T20:35:32.115988+00:00 app[web.1]: I, [2022-04-28T20:35:32.115921 #4] INFO -- : [b1e694c5-cea3-427f-bbdd-aa3cc3a92d6b] Delivered mail 626afa941bd21_45348778b1@b96704a7-29a2-4902-83e1-099673240203.mail (2.8ms)
2022-04-28T20:35:32.116193+00:00 app[web.1]: I, [2022-04-28T20:35:32.116158 #4] INFO -- : [b1e694c5-cea3-427f-bbdd-aa3cc3a92d6b] Completed 500 Internal Server Error in 9ms (Allocations: 3976)
2022-04-28T20:35:32.116915+00:00 app[web.1]: F, [2022-04-28T20:35:32.116874 #4] FATAL -- : [b1e694c5-cea3-427f-bbdd-aa3cc3a92d6b]
2022-04-28T20:35:32.116916+00:00 app[web.1]: [b1e694c5-cea3-427f-bbdd-aa3cc3a92d6b] Errno::ECONNREFUSED (Connection refused - connect(2) for 127.0.0.1:25):
2022-04-28T20:35:32.116917+00:00 app[web.1]: [b1e694c5-cea3-427f-bbdd-aa3cc3a92d6b]
2022-04-28T20:35:32.116917+00:00 app[web.1]: [b1e694c5-cea3-427f-bbdd-aa3cc3a92d6b] app/controllers/contacts_controller.rb:11:in `block in create'
2022-04-28T20:35:32.116917+00:00 app[web.1]: [b1e694c5-cea3-427f-bbdd-aa3cc3a92d6b] app/controllers/contacts_controller.rb:10:in `create'
编辑:我在下面添加了一些 Heroku ENV 变量,我已经双重确定 ENV 变量,例如 MAILGUN_DOMAIN
并且与我的 mailgun 帐户中的匹配。
我注意到的一些其他事情是错误似乎源于 @contact.deliver
操作完成,我尝试制作我自己的简单邮件程序来代替使用 mail_form,使用 .deliver_now
会触发相同的错误,使用 deliver_later
则不会,但是邮件永远不会发送,所以我怀疑错误来自其他地方。
任何帮助将不胜感激,因为我在这种情况下陷入僵局
感谢评论的帮助,我能够通过 heroku 日志中的行注意到:
2022-04-28T20:35:32.116916+00:00 app[web.1]: [b1e694c5-cea3-427f-bbdd-aa3cc3a92d6b] Errno::ECONNREFUSED (Connection refused - connect(2) for 127.0.0.1:25):
正在使用的端口是 25
而不是 587
意味着块
ActionMailer::Base.smtp_settings = {
:port => ENV['MAILGUN_SMTP_PORT'],
:address => ENV['MAILGUN_SMTP_SERVER'],
:user_name => ENV['MAILGUN_SMTP_LOGIN'],
:password => ENV['MAILGUN_SMTP_PASSWORD'],
:domain => 'https://www.example.com/',
:authentication => :plain,
}
被忽略了,通过将这些选项包含在 config.action_mailer.smtp_settings
中,我能够解决问题。
我正在这里学习本教程 https://gist.github.com/stevecondylios/16a53b73f22621e3cde2e17096dbf5ca
它教你如何在 Rails 6 上使用 mail_form 制作一个简单的联系表,我使用的是 Rails 7,大部分过程是相同的, 它在开发中运行良好,因为我已经用 MailCatcher 测试了几次并且邮件发送正确,我遇到的唯一问题是当我尝试在生产环境中测试表单时。
问题来自 Mailgun 500 Internal Server Error
,当我提交表单时,这让我感到困惑,因为我还没有在互联网上找到类似的问题,我已经交叉引用了几个教程和问题,我发现了其他几条错误消息,还有一些 500 Internal Server Error
但 none 的答案对他们有帮助。
我的配置几乎与教程中的完全相同,但这是我的配置,也许我遗漏了什么,请注意我已经添加了真正的“example@mail.com”到“ Mailgun 中的“授权收件人”部分,并且我有一个自定义域并且可以与 Heroku 的其余部分正常工作,我还在 Heroku 上设置了正确的 ENV 变量:
联系方式:
class Contact < MailForm::Base
attribute :name, validate: true
attribute :email, validate: /\A([\w\.%\+\-]+)@([\w\-]+\.)+([\w]{2,})\z/i
attribute :message
attribute :nickname, captcha: true
# Declare the e-mail headers. It accepts anything the mail method
# in ActionMailer accepts.
def headers
{
:subject => "Contact Form Inquiry",
:to => "example@mail.com",
:from => %("#{name}" <#{email}>)
}
end
end
在production.rb
ActionMailer::Base.smtp_settings = {
:port => ENV['MAILGUN_SMTP_PORT'],
:address => ENV['MAILGUN_SMTP_SERVER'],
:user_name => ENV['MAILGUN_SMTP_LOGIN'],
:password => ENV['MAILGUN_SMTP_PASSWORD'],
:domain => 'https://www.example.com/',
:authentication => :plain,
}
ActionMailer::Base.delivery_method = :smtp
Heroku 日志:
2022-04-28T20:35:32.118071+00:00 heroku[router]: at=info method=POST path="/contacts" host=www.pocket-witch.games request_id=b1e694c5-cea3-427f-bbdd-aa3cc3a92d6b fwd="177.249.170.124" dyno=web.1 connect=0ms service=13ms status=500 bytes=1827 protocol=https
2022-04-28T20:35:32.106145+00:00 app[web.1]: I, [2022-04-28T20:35:32.106072 #4] INFO -- : [b1e694c5-cea3-427f-bbdd-aa3cc3a92d6b] Started POST "/contacts" for 177.249.170.124 at 2022-04-28 20:35:32 +0000
2022-04-28T20:35:32.106961+00:00 app[web.1]: I, [2022-04-28T20:35:32.106912 #4] INFO -- : [b1e694c5-cea3-427f-bbdd-aa3cc3a92d6b] Processing by ContactsController#create as TURBO_STREAM
2022-04-28T20:35:32.107080+00:00 app[web.1]: I, [2022-04-28T20:35:32.107015 #4] INFO -- : [b1e694c5-cea3-427f-bbdd-aa3cc3a92d6b] Parameters: {"authenticity_token"=>"[FILTERED]", "contact"=>{"name"=>"John", "email"=>"example@mail.com", "message"=>"Example message", "nickname"=>""}, "commit"=>"Send Message"}
2022-04-28T20:35:32.109199+00:00 app[web.1]: I, [2022-04-28T20:35:32.109137 #4] INFO -- : [b1e694c5-cea3-427f-bbdd-aa3cc3a92d6b] Rendered contact_mailer/contact_mail.html.erb within layouts/mailer (Duration: 0.1ms | Allocations: 8)
2022-04-28T20:35:32.109367+00:00 app[web.1]: I, [2022-04-28T20:35:32.109331 #4] INFO -- : [b1e694c5-cea3-427f-bbdd-aa3cc3a92d6b] Rendered layout layouts/mailer.html.erb (Duration: 0.3ms | Allocations: 46)
2022-04-28T20:35:32.109834+00:00 app[web.1]: I, [2022-04-28T20:35:32.109777 #4] INFO -- : [b1e694c5-cea3-427f-bbdd-aa3cc3a92d6b] Rendered contact_mailer/contact_mail.text.erb within layouts/mailer (Duration: 0.1ms | Allocations: 4)
2022-04-28T20:35:32.109975+00:00 app[web.1]: I, [2022-04-28T20:35:32.109923 #4] INFO -- : [b1e694c5-cea3-427f-bbdd-aa3cc3a92d6b] Rendered layout layouts/mailer.text.erb (Duration: 0.2ms | Allocations: 41)
2022-04-28T20:35:32.115988+00:00 app[web.1]: I, [2022-04-28T20:35:32.115921 #4] INFO -- : [b1e694c5-cea3-427f-bbdd-aa3cc3a92d6b] Delivered mail 626afa941bd21_45348778b1@b96704a7-29a2-4902-83e1-099673240203.mail (2.8ms)
2022-04-28T20:35:32.116193+00:00 app[web.1]: I, [2022-04-28T20:35:32.116158 #4] INFO -- : [b1e694c5-cea3-427f-bbdd-aa3cc3a92d6b] Completed 500 Internal Server Error in 9ms (Allocations: 3976)
2022-04-28T20:35:32.116915+00:00 app[web.1]: F, [2022-04-28T20:35:32.116874 #4] FATAL -- : [b1e694c5-cea3-427f-bbdd-aa3cc3a92d6b]
2022-04-28T20:35:32.116916+00:00 app[web.1]: [b1e694c5-cea3-427f-bbdd-aa3cc3a92d6b] Errno::ECONNREFUSED (Connection refused - connect(2) for 127.0.0.1:25):
2022-04-28T20:35:32.116917+00:00 app[web.1]: [b1e694c5-cea3-427f-bbdd-aa3cc3a92d6b]
2022-04-28T20:35:32.116917+00:00 app[web.1]: [b1e694c5-cea3-427f-bbdd-aa3cc3a92d6b] app/controllers/contacts_controller.rb:11:in `block in create'
2022-04-28T20:35:32.116917+00:00 app[web.1]: [b1e694c5-cea3-427f-bbdd-aa3cc3a92d6b] app/controllers/contacts_controller.rb:10:in `create'
编辑:我在下面添加了一些 Heroku ENV 变量,我已经双重确定 ENV 变量,例如 MAILGUN_DOMAIN
并且与我的 mailgun 帐户中的匹配。
我注意到的一些其他事情是错误似乎源于 @contact.deliver
操作完成,我尝试制作我自己的简单邮件程序来代替使用 mail_form,使用 .deliver_now
会触发相同的错误,使用 deliver_later
则不会,但是邮件永远不会发送,所以我怀疑错误来自其他地方。
任何帮助将不胜感激,因为我在这种情况下陷入僵局
感谢评论的帮助,我能够通过 heroku 日志中的行注意到:
2022-04-28T20:35:32.116916+00:00 app[web.1]: [b1e694c5-cea3-427f-bbdd-aa3cc3a92d6b] Errno::ECONNREFUSED (Connection refused - connect(2) for 127.0.0.1:25):
正在使用的端口是 25
而不是 587
意味着块
ActionMailer::Base.smtp_settings = {
:port => ENV['MAILGUN_SMTP_PORT'],
:address => ENV['MAILGUN_SMTP_SERVER'],
:user_name => ENV['MAILGUN_SMTP_LOGIN'],
:password => ENV['MAILGUN_SMTP_PASSWORD'],
:domain => 'https://www.example.com/',
:authentication => :plain,
}
被忽略了,通过将这些选项包含在 config.action_mailer.smtp_settings
中,我能够解决问题。