使用Rails发送MailChimp电子邮件

时间:2015-06-10 20:42:59

标签: ruby-on-rails email devise mailchimp mandrill

((我发现了与我相似的问题,但它们特定于第三方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",
}

我也在控制台上对它进行了测试,它也没有出现任何错误。似乎没有任何错误,但电子邮件永远不会发送。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

所以经过多次努力之后,我仍然不能完全确定邮件格式最初有什么问题,但是我根据其他网站的方法对其进行了一些修改,以下内容,并且它有效。我什么也没改变。

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" 

字段未被使用,我还在调整它 - 只是想发布这个,以便其他人可以免去MailChimp / Mandrill那种冗长繁琐的格式和可怕的文档所带来的痛苦。< / p>

仅供参考,我使用的唯一宝石是mandrill-api gem:

gem 'mandrill-api', '~> 1.0.51', require: "mandrill"