今回は、HerokuからHerokuが提供しているアドオンを使用し、ISO-2022-JPエンコードのメールを送信する方法をご紹介します。
他にもいろいろを方法があるとおもいますが、後述する"Iron Worker"を使って送るときに私自身少し悩んだので、同じ悩みの人に少しでも参考になればと思っています。
私の環境は以下のとおりです。
- Ruby: 1.9.2p290
- Rails : 3.1.10
- Heroku Stack : bamboo※
- Heroku Add-ons : SendGrid(メール送信)、Iron Worker(非同期処理)
今回の対応を行うにあたり、いろいろ試したのですが結論からいうと、
mail-iso-2022-jp ※を使って対応しました。
※ こちらのgemを作られた黒田さんの会社のサイトの記事はよく参考にさせて頂いています。私も見習って質の高い情報を提供できるようにして行きたいです。
弊社のサービスでメール送る処理は
- 同期送信
- 非同期送信
class HogeMailer < ActionMailer::Base
default :charset => 'ISO-2022-JP', 'Content-Transfer-Encoding' => '7bit'
def sendmail
メール処理
end
HogeMailer.sendmail.deliverで問題なくISO-2022-JPエンコードされたメールが 送信できると思います。
一方、多くのアドレス宛メール一斉送信などは、同期通信をしてしまうとHerokuのリクエストタイムアウト制限(30sec)にかかってしまいますし、ユーザビリティ的にもあまりよいものではありません。
弊社サービスでは、Iron Workerというアドオンを使って非同期処理を行うことにより時間のかかる処理の対応をしています。
Iron Workerを使ってメールを送信する場合は、上記のままだと文字化けが起こると思います。その解決方法に少々悩みましたが、調べた結果Iron WorkerにキックするWorkerクラスに、
merge_gem gem名今回の場合だと、
merge_gem 'mail-iso-2022-jp'をつけることで解決することが出来ました。(これを書かないと、gemの効果がIron Workerにわたらない)
因みに、すでに我々の携帯向けの対応で使っていたこともあり、jpmobileのメーラー機能(Jpmobile::Mailer::Base)をでISO-2022-JPの対応するも考えていたのですが、merge_gemでエラーが出てしまったのと、我々のサービスでは絵文字などに対応する必要がなかった為、mail-iso-2022-jpを使うことにしました。
以上が、HerokuからISO-2022-JPエンコードのメールを送る方法(の例)紹介でした。
何かのお役に立てば幸いです。
0 件のコメント:
コメントを投稿