Rails, Devise, Postmark Gem - 使用邮戳模板设计邮件
Posted
技术标签:
【中文标题】Rails, Devise, Postmark Gem - 使用邮戳模板设计邮件【英文标题】:Rails, Devise, Postmark Gem - using postmark templates for devise mailer 【发布时间】:2016-08-30 14:04:18 【问题描述】:我正在尝试弄清楚如何设置我的 Rails 4 应用程序,以便设计邮件程序使用邮戳模板通过邮戳发送。
我的 gem 文件中有 postmark-rails gem。
我一切正常,但我不知道如何将确认令牌提供给邮戳。
在邮戳中我有这个模板:
To get started, please confirm your account below:
action_url_Value
我不知道如何将以下行代替操作 url 值放入模板中:
<%= link_to 'Confirm my account', confirmation_url(@resource, confirmation_token: @token) %></div>
我已将以下内容添加到我的初始化程序/devise.rb:
config.mailer = 'PostmarkDeviseMailer'
在 postmark_devise_mailer.rb 中,我有:
class PostmarkDeviseMailer < ActionMailer::Base
include Devise::Mailers::Helpers
def message
mail(
:subject => 'Hello from Postmark',
:to => 'sender@address.com',
:from => 'sender@address.comm',
:html_body => '<strong>Hello</strong> dear Postmark user.',
:track_opens => 'true')
end
end
default from: "sender@address.com"
def confirmation_instructions(record)
devise_mail(record, :confirmation_instructions)
end
def reset_password_instructions(record)
devise_mail(record, :reset_password_instructions)
end
def unlock_instructions(record)
devise_mail(record, :unlock_instructions)
end
接下来的步骤对我来说不太清楚。有没有人想出如何使用邮戳模板作为邮件来设计交易电子邮件?
【问题讨论】:
【参考方案1】:Postmark 服务台的回复是: 不幸的是,邮戳模板不能很好地融入传统的 Rails 生态系统。详情请看我的回复:
https://github.com/wildbit/postmark-rails/issues/53
总而言之,通过将 Postmark API 与 Postmark 模板一起使用,您可能会替换 ActionMailer,但是将它们混合在一起会带来很大的挑战。不幸的是,我们从未尝试过使用 Devise 的“无 ActionMailer”方法,所以在这里我无法为您提供帮助。除非您有充分的理由不这样做,否则我建议您使用 ActionMailer 模板并使用 postmark-rails gem 作为传递适配器。众所周知,这种方法可以很好地与 Devise 配合使用。如果您有任何问题,请告诉我。
【讨论】:
【参考方案2】:您需要做的第一件事是在app/mailers
中创建一个自定义邮件,在这个例子中它是user_mailer.rb
如果你正在阅读这个答案,我假设你们都有一个邮戳帐户,如果没有在这里获取一个:@ 987654321@,我假设您选择了模板和布局。
要记住的一个重要事项是确保为模板分配别名。这可以在模板标题上方以灰色小文本找到的小链接中找到。
self.template_model
中的项目是 100% 可自定义的,并且在您的布局/模板编辑器中显示如下:product_name
。
class UserMailer < Devise::Mailer
include PostmarkRails::TemplatedMailerMixin
helper :application
include Rails.application.routes.url_helpers
include Devise::Controllers::UrlHelpers
default from: 'from_you@something.com'
default reply_to: 'support@hammer-lane-industries.com' # Optional
def confirmation_instructions(record, token, opts=)
@admin = record
@token = token
# this will pass the data via the postmark-api to your template / layout these fields are 100% customizable and can be cahnged in your template / layout
self.template_model = product_name: 'your product',
username: @user.username,
email: @user.email,
confirmation_url: user_confirmation_url(@resource, confirmation_token: @token, subdomain: 'add subdomain here if needed'),
login_url: login_root_url(subdomain: 'add subdomain here if needed'),
trial_length: '14-days',
sender_name: 'What ever you want',
action_url: user_confirmation_url(@resource, confirmation_token: @token, subdomain: 'add subdomain here if needed'),
parent_company_name: 'Your company name',
company_address: 'Your address'
mail to: @admin.email, postmark_template_alias: 'devise_user_confirmation'
end
end
使用解锁和密码邮件程序冲洗并重复,您只需要知道要将令牌发送到的网址。
完成这一切:
你需要在你的设计资源模型中添加一个小块,在这个例子中我使用了user.rb
class User < ApplicationRecord
devise :database_authenticatable, :confirmable,
:recoverable, :rememberable, :validatable,
:timeoutable, :trackable
def devise_mailer
UserMailer # Must match your mailer class
end
end
完成后,重新启动您的 Rails 服务器,然后试一试!
我希望这有助于您将邮戳模板 (API) 挂接到 Devise mailers
【讨论】:
以上是关于Rails, Devise, Postmark Gem - 使用邮戳模板设计邮件的主要内容,如果未能解决你的问题,请参考以下文章
“Postmark::InvalidMessageError:提供电子邮件 TextBody 或 HtmlBody 或两者。”对于 rails 3.2 应用程序
在 Heroku 上使用 Postmark API 的 Rails 电子邮件——由对等方重置连接
Postmark::InvalidMessageError 尝试发送邮件时
Rails:如何在 Rails 中为 Devise 设置密钥?