携帯向けのmail_to
とりあえずRailsで3キャリア対応のサイト作ったりしてるんだけど、携帯端末のメーラに題名や本文を渡して立ち上げさせるのがちょっと面倒。
mailtoだと認識してくれないのでaタグのhrefに"mailto:hogehoge"と書かないといけない。
そんときにパラメータでsubjectやbodyにエスケープされた日本語文字列を渡せばちゃんと題名や本文が入った状態でメーラが立ち上がってくれる。
んだけど、最近のソフトバンク端末はutf8、それ以外はsjisの日本語文字列を渡さないとどっかのキャリアで文字化けしちゃう。
そんなわけでapplication_helper内にmobile_mail_toみたいなのを用意。jpmobileを使ってる前提です。
def mobile_mail_to(email_address, name, html_options = {}) html_options = html_options.stringify_keys subject, body = html_options.delete("subject"), html_options.delete("body") # subjectとbodyをエンコード encoded_subject = mailto_string subject encoded_body = mailto_string body "<a href=mailto:#{email_address}?subject=#{encoded_subject}&body=#{encoded_body}>#{name}</a>" end # mailto用文字エンコード変更 def mailto_string(strings) return "" unless strings result_string ="" # ソフトバンクの以外はsjis化、ソフトバンクはutf8化してからエスケープをかける。 unless request.mobile.is_a?(Jpmobile::Mobile::Softbank) result_string = CGI.escape(strings.tosjis) else result_string = CGI.escape(strings.toutf8) end result_string end
これで
mobile_mail_to 'info@hoge.com', '会員登録', :subject => 'このまま送ってね', :body => '会員登録用のメールでーす'
みたいにすれば"会員登録"という文字にmailto用のリンクを張ってくれて、クリックするとメーラに題名と本文も入れてくれる。
もう少しやるなら、mail_to自体をオーバーライドしちゃって携帯端末じゃなければ普通のmailtoで出力して、携帯端末ならこのmobile_mail_toに渡すのがよさそうですね。