使用 Rails 发送 MailChimp 电子邮件
Sending MailChimp email with Rails
((我发现了与我类似的问题,但它们是特定于第 3 方 mandrill gem 或 Heroku 的。我没有使用任何这些,只是 mandrill-api 本身。))
我正在尝试使用电子邮件确认(我们使用 Devise)来创建帐户。我已经设置了可确认的,一切都很好。最初,我对所有内容都使用基本的 Devise 电子邮件,它很好并且可以发送 - 但后来我尝试将其切换到我们的 MailChimp/Mandrill 帐户,但电子邮件不会发送。我已经尝试了所有我能想到的方法,但我被卡住了。
请注意,它似乎与 Mandrill 通信 - 当我从 MailChimp 中删除确认指令模板,或者不将其发送到 Mandrill 时,我收到模板未找到错误。但是当我创建模板时,它从未真正发送过。
日志中唯一的内容是:
NotificationMailer#confirmation_instructions: processed outbound mail in 5676.4ms
邮寄者:
class NotificationMailer < ActionMailer::Base
require 'mandrill'
default from: "XXXXXXXXX <XXXXXX@XXXXXXXXXXXXX.com>"
def mandrill_client
@mandrill_client ||= Mandrill::API.new MANDRILL_API_KEY
end
def confirmation_instructions(record, token, opts={})
template_name = "confirmation-instructions"
template_content = []
message = {
to: [{email: record.email}],
subject: "Confirmation Instructions",
var_user_email: record.email,
merge_vars: [
{rcpt: record.email,
vars: [
{name: "USER_EMAIL", content: record.email},
{name: "CONFIRMATION_LINK", content: user_confirmation_url(confirmation_token: token)}
]
}]
}
mandrill_client.messages.send_template template_name, template_content, message
end
end
Development.rb 文件相关部分:
config.action_mailer.raise_delivery_errors = true
config.action_mailer.perform_deliveries = true
config.action_mailer.delivery_method = :smtp
config.action_mailer.default_url_options = { host: '192.168.33.111' }
config.action_mailer.smtp_settings = {
address: "smtp.mandrillapp.com",
port: 587,
enable_starttls_auto: true,
user_name: "XXXXXXXXXXXXXXXXX",
password: "XXXXXXXXXXXXXXXXXX",
authentication: "login",
}
我也从控制台测试过,也没有报错。似乎根本没有错误,但电子邮件从未发送过。有什么想法吗?
所以在经历了很多痛苦之后,我仍然不完全确定原来的邮件格式有什么问题,但我根据其他网站的方法对其进行了一些修改,如下所示,并且它起作用了。我没有改变任何其他东西。
class NotificationMailer < ActionMailer::Base
require 'mandrill'
default from: "XXXXX <XXXXX@XXXXX>"
def mandrill_client
@mandrill_client ||= Mandrill::API.new XXXXXXXXXXXX
end
def confirmation_instructions(record, token, opts={})
template_name = "confirmation-instructions"
template_content = []
message = {
:subject=> "Confirmation Instructions",
:from_name=> "XXXXXXXXX",
:text=> "Confirm your email",
:to=>[
{
:email=> record.email,
:name=> record.first_name + " " + record.last_name
}
],
:from_email=>"no-reply@XXXXXXXXXXXXX.XXX",
:merge_vars=>[
{
rcpt: record.email,
vars:
[
{name: "USER_EMAIL", content: record.email},
{name: "USER_NAME", content: record.first_name + " " + record.last_name},
{name: "CONFIRMATION_LINK", content: user_confirmation_url(confirmation_token: token)}
]
}
]
}
mandrill_client.messages.send_template template_name, template_content, message
end
end
请注意
:text=> "Confirm your email"
字段未使用,我仍在调整它 - 只是想 post 这样其他人就可以免除我因 MailChimp/Mandrill 极其繁琐的格式和糟糕的文档而遭受的痛苦.
仅供参考,我唯一使用的 gem 是山魈-api gem:
gem 'mandrill-api', '~> 1.0.51', require: "mandrill"
((我发现了与我类似的问题,但它们是特定于第 3 方 mandrill gem 或 Heroku 的。我没有使用任何这些,只是 mandrill-api 本身。))
我正在尝试使用电子邮件确认(我们使用 Devise)来创建帐户。我已经设置了可确认的,一切都很好。最初,我对所有内容都使用基本的 Devise 电子邮件,它很好并且可以发送 - 但后来我尝试将其切换到我们的 MailChimp/Mandrill 帐户,但电子邮件不会发送。我已经尝试了所有我能想到的方法,但我被卡住了。
请注意,它似乎与 Mandrill 通信 - 当我从 MailChimp 中删除确认指令模板,或者不将其发送到 Mandrill 时,我收到模板未找到错误。但是当我创建模板时,它从未真正发送过。
日志中唯一的内容是:
NotificationMailer#confirmation_instructions: processed outbound mail in 5676.4ms
邮寄者:
class NotificationMailer < ActionMailer::Base
require 'mandrill'
default from: "XXXXXXXXX <XXXXXX@XXXXXXXXXXXXX.com>"
def mandrill_client
@mandrill_client ||= Mandrill::API.new MANDRILL_API_KEY
end
def confirmation_instructions(record, token, opts={})
template_name = "confirmation-instructions"
template_content = []
message = {
to: [{email: record.email}],
subject: "Confirmation Instructions",
var_user_email: record.email,
merge_vars: [
{rcpt: record.email,
vars: [
{name: "USER_EMAIL", content: record.email},
{name: "CONFIRMATION_LINK", content: user_confirmation_url(confirmation_token: token)}
]
}]
}
mandrill_client.messages.send_template template_name, template_content, message
end
end
Development.rb 文件相关部分:
config.action_mailer.raise_delivery_errors = true
config.action_mailer.perform_deliveries = true
config.action_mailer.delivery_method = :smtp
config.action_mailer.default_url_options = { host: '192.168.33.111' }
config.action_mailer.smtp_settings = {
address: "smtp.mandrillapp.com",
port: 587,
enable_starttls_auto: true,
user_name: "XXXXXXXXXXXXXXXXX",
password: "XXXXXXXXXXXXXXXXXX",
authentication: "login",
}
我也从控制台测试过,也没有报错。似乎根本没有错误,但电子邮件从未发送过。有什么想法吗?
所以在经历了很多痛苦之后,我仍然不完全确定原来的邮件格式有什么问题,但我根据其他网站的方法对其进行了一些修改,如下所示,并且它起作用了。我没有改变任何其他东西。
class NotificationMailer < ActionMailer::Base
require 'mandrill'
default from: "XXXXX <XXXXX@XXXXX>"
def mandrill_client
@mandrill_client ||= Mandrill::API.new XXXXXXXXXXXX
end
def confirmation_instructions(record, token, opts={})
template_name = "confirmation-instructions"
template_content = []
message = {
:subject=> "Confirmation Instructions",
:from_name=> "XXXXXXXXX",
:text=> "Confirm your email",
:to=>[
{
:email=> record.email,
:name=> record.first_name + " " + record.last_name
}
],
:from_email=>"no-reply@XXXXXXXXXXXXX.XXX",
:merge_vars=>[
{
rcpt: record.email,
vars:
[
{name: "USER_EMAIL", content: record.email},
{name: "USER_NAME", content: record.first_name + " " + record.last_name},
{name: "CONFIRMATION_LINK", content: user_confirmation_url(confirmation_token: token)}
]
}
]
}
mandrill_client.messages.send_template template_name, template_content, message
end
end
请注意
:text=> "Confirm your email"
字段未使用,我仍在调整它 - 只是想 post 这样其他人就可以免除我因 MailChimp/Mandrill 极其繁琐的格式和糟糕的文档而遭受的痛苦.
仅供参考,我唯一使用的 gem 是山魈-api gem:
gem 'mandrill-api', '~> 1.0.51', require: "mandrill"