Rails 4、Devise 和 Mandrill 电子邮件

Posted

技术标签:

【中文标题】Rails 4、Devise 和 Mandrill 电子邮件【英文标题】:Rails 4, Devise & Mandrill emails 【发布时间】:2016-04-21 15:21:29 【问题描述】:

我正在尝试在 Rails 4 中制作应用程序。

在过去的 3 年里,我一直在努力找出设计/omniauth(我仍在努力让它发挥作用)。

抛开主要问题,当我尝试找到度过这个难关的意愿时,我尝试使用 Mandrill 设置电子邮件。

我找到了这个教程,我正在努力学习:https://nvisium.com/blog/2014/10/08/mandrill-devise-and-mailchimp-templates/

我有一个名为 mandrill_devise_mailer.rb 的邮件程序

class MandrillDeviseMailer < Devise::Mailer

  def confirmation_instructions(record, token, opts=)
    # code to be added here later
  end

  def reset_password_instructions(record, token, opts=)
    options = 
      :subject => "Reset your password",
      :email => record.email,
      :global_merge_vars => [
        
          name: "password_reset_link",
          # content: "http://www.example.com/users/password/edit?reset_password_token=#token"
          content: "http://www.cr.com/users/password/edit?reset_password_token=#token"

        ,

        
          name: "PASSWORD_RESET_REQUEST_FROM",
          content: record.full_name 
        
      ],
      :template => "Forgot Password"
    
    mandrill_send options  
  end

  def unlock_instructions(record, token, opts=)
    # code to be added here later
  end

  def mandrill_send(opts=)
    message =  
      :subject=> "#opts[:subject]", 
      :from_name=> "Reset Instructions",
      # :from_email=>"example@somecorp.com",
      :from_email=>["PROD_WELCOME"],
      :to=>
            ["name"=>"#opts[:full_name]",
                "email"=>"#opts[:email]",
                "type"=>"to"],
      :global_merge_vars => opts[:global_merge_vars]
      
    sending = MANDRILL.messages.send_template opts[:template], [], message
    rescue Mandrill::Error => e
      Rails.logger.debug("#e.class: #e.message")
      raise
  end
end

以上内容与他们在教程中所做的不同之处在于:

在我的邮件黑猩猩山魈模板中,我有:

<a href="*|password_reset_link|*">Change my password </a>

当我收到重置说明的电子邮件时,我会看到一个带下划线的链接,指向更改密码表单,上面写着“更改我的密码”。我希望“将我的密码更改为隐藏链接文本的标签”。

谁能看到我做错了什么?

【问题讨论】:

您的:from_email 设置为["PROD_WELCOME"],这在我看来不像是电子邮件地址。 谢谢 - 设置 ENV 使电子邮件发送,但它打印 || 之间的单词而不是拉入变量 也许您正在使用把手作为您的默认合并语言?转到设置下的 Mandrill sending options 并检查您是否启用了正确的合并语言。 嗨 Dylan,设置已设置为 Mailchimp。我把它们改成了车把,但预览仍然显示错误 很确定您想要车把。您在上面使用的 mergetag 语法使用 Mailchimp 格式。 【参考方案1】:

这是我创建自定义 DeviseMailer 的方式

class MyDeviseMailer < Devise::Mailer   
  default template_path: 'devise/mailer' # to make sure that your mailer uses the devise views

  def reset_password_instructions(record, token, opts=)
    opts['from_email'] = "donotreply@mywebsite.com"
    opts['from_name'] = "Password Reset"
    #Rails.logger.mail.info "reset_password_instructions #record.to_json \n #token.to_json \n #opts.to_json"
    super
  end

end

https://github.com/plataformatec/devise/wiki/How-To:-Use-custom-mailer 和 Add dynamic value in devise email subject

【讨论】:

嗨,Dmitry,看起来您并没有尝试使用 mailchimp/mandrill。还是谢谢。 Mandrill API 需要那些 opts['from_email'] 和 opts['from_name'] 参数。我为 alanverga.com/blog/2014/01/03/custom-rails-mailer-and-mandrill 和 robots.thoughtbot.com/… 添加了自定义交付类 但我的文件也有这些选项。我的问题是链接的格式不像我表达的那样。相反,链接出现在可见的标签内,旁边的链接标签为文本。

以上是关于Rails 4、Devise 和 Mandrill 电子邮件的主要内容,如果未能解决你的问题,请参考以下文章

Rails 4 Mailchimp Mandrill 与设计

在 Rails 4 上登录后,ngrok、pow 和 devise 会导致重定向到本地 URL

Rails 4 Paperclip with Devise,文件保存错误

Rails 4.2 / Devise - 如果禁用cookie,则向用户显示特定消息

Mandrill API 使用 Rails 4.2.5 Excon::Errors::SocketError

如何正确设置具有三种不同用户类型和每种类型不同授权的 Rails 4 Devise 身份验证?