ファイルは多い感じですが、いたって簡単。
◆雛形の生成
$ rails g mailer WeeklyMailer
create app/mailers/weekly_mailer.rb
invoke erb
create app/views/weekly_mailer
invoke rspec
create spec/mailers/weekly_mailer_spec.rb
◆差出人、送信先、本文の送り方
# app/mailers/weekly_mailer.rb
class WeeklyMailer < ActionMailer::Base
default from: "abc@example.com"
def weekly_email
@date = Period.date_from
recipient = "xxx@example.com"
subject = "お知らせ @date"
mail(:to => recipient,
:subject => subject)do |format|
format.html # HTML形式
format.text # テキスト形式
end
end
end
◆ テンプレートの書き方
こちらでは、HTML形式のビューの書き方を紹介。
bodyタグ内を書けば良し。
text形式の場合は、ファイル名を weekly_email.text.erb にして不要なタグをなくせばOK。
# app/views/weekly_mailer/weekly_email.html.erb
<!DOCTYPE html>
<html>
<head>
<meta content='text/html; charset=UTF-8' http-equiv='Content-Type' />
</head>
<body>
<p>てすと</p>
</body>
</html>
◆コントローラから呼び出し
週次にcronから呼びたいので、こちらに。
ボタン押下してメール送信したいほうが多いかな?
class WeeklyMailController < ApplicationController
class << self
def exec
WeeklyMailer.weekly_email.deliver
end
end
end
◆実行
rails r WeeklyMailController.exec
◆デバッグ
こちらより→ http://blog.twiwt.org/e/a986c5
# config/initializers/action_mailer_log_subscriber.rb
require 'action_mailer/log_subscriber'
module ActionMailer
class LogSubscriber
def deliver_with_debug(event)
deliver_without_debug(event)
debug(Mail.new(event.payload[:mail]).subject)
debug(Mail.new(event.payload[:mail]).body)
end
alias_method_chain :deliver, :debug
end
end
◆ Configファイル (開発環境)
ここまでやって、エラーもないし、送られてるはずなんだけど、届いてない!
そんな時は、定義ファイルの設定を確認しましょう。
config/environments/development.rb
config.action_mailer.raise_delivery_errors = true #デフォルトはfalse
config.action_mailer.delivery_method = :smtp
config.action_mailer.smtp_settings = {
:enable_starttls_auto => false, ## ないとエラー(※)がでる
:address => 'xxxxx.example.com',
:port => 250,
}
※エラー内容
bundle/ruby/1.9.1/gems/railties-3.2.6/lib/rails/commands/runner.rb:53:in `eval': hostname does not match the server certificate (OpenSSL::SSL::SSLError)
from /home/xxx/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/1.9.1/net/smtp.rb:585:in `tlsconnect'
from /home/xxx/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/1.9.1/net/smtp.rb:560:in `do_start'
from /home/xxx/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/1.9.1/net/smtp.rb:519:in `start'
...
TLS接続を使用としてエラーになっているみたいなので、TLS接続をしないようにすれば良いらしい。
◆ メールの差出人に日本語名を出したい場合
gemがないと文字化けしますので、bundleに追加。
gem 'mail-iso-2022-jp'差出人を書く所は、こんな書き方になります。
default from: "なまえ<aaa@example.com>", :charset => 'iso-2022-jp'
◆参考
http://edgeguides.rubyonrails.org/action_mailer_basics.html
0 件のコメント:
コメントを投稿
注: コメントを投稿できるのは、このブログのメンバーだけです。