Mandrillを試す
メール配信サービスMandrillでPerlからメール配信を試したのでメモ
Mandrill?
サイトは英語ですが、UIやページ構成が分かりやすくて苦労しない。
APIリファレンスも充実していると思う
サクサクっと登録完了
APIリファレンスも充実していると思う
サクサクっと登録完了
MandrillのAPIを叩く
PerlのプログラムからMandrillのAPIを叩くのにWebService::Mandrillを使用した。
use WebService::Mandrill; my $api_key = '**********'; #MandrillのSettingページで表示されるもの my $ml_from = "hoge-from¥@hoge.com"; my $ml_to = "hoge-to¥@hoge.com"; my $subject = "Mail Sample"; my $message = "Hellow World¥nThanks"; my $mandrill = WebService::Mandrill->new( debug => 0, api_key => $api_key ); $mandrill->send( from_email => ${ml_from}, to => ${ml_to}, subject => ${subject}, text => ${message}, track_opens => 0, track_clicks => 0, );
debugを"1″にすると標準出力に送信データが出力されるが、実際にメールも送信されるのでテスト時には注意が必要。Mandrill側でテスト用API KEY(メール配信をしない)を作れるのでそれを利用する。
SMTP送信する
smtp送信といってもMandrillは587ポートを使っており暗号化された"smtps"プロトコルとなる。
モジュールはEmail::Sender::Transport::SMTPSを使う。
(ちなみにEmail::Sender::Transport::SMTP::TLSなんかも試したが、cpanのページの説明にもあるように非推奨だそう。こちらのページがその辺りを詳しく書かれていた。)
モジュールはEmail::Sender::Transport::SMTPSを使う。
(ちなみにEmail::Sender::Transport::SMTP::TLSなんかも試したが、cpanのページの説明にもあるように非推奨だそう。こちらのページがその辺りを詳しく書かれていた。)
CPANのページのサンプル通りだが一応記載
use Email::Sender::Simple qw(sendmail); use Email::Sender::Transport::SMTPS; use Try::Tiny; my $smtphost = 'smtp.mandrillapp.com'; my $user = 'account@hoge.com'; #Mandrillに登録したID my $pass = '*********'; #Mandrillのsettingページで表示されるAPIキー my $ml_from = "hoge-from¥@hoge.com"; my $ml_to = "hoge-to¥@hoge.com"; my $subject = "Mail Sample"; my $message = "Hellow World¥nThanks"; my $smtps = Email::Sender::Transport::SMTPS->new({ host => ${smtphost}, ssl => 'starttls', sasl_username => ${user}, sasl_password => ${pass}, }); my $msg = Email::Simple->create( header => [ From => ${ml_from}, To => ${ml_to}, Subject => ${subject}, ], body => ${message} ); try{ sendmail($msg, {transport => $smtps}); }catch{ }
メール送信とは直接関係無いけど、サンプルではTry::Tinyモジュールのtry/cacheを使っているが、Perlの例外処理ってなんか違和感
日本語メールについて
いろいろ試したが、日本語メールを扱うことができなかった。これはメールのヘッダーの"Content-type"が"text/plain;charset=utf8″で固定なことと無関係じゃない気がする。もちろん"Content-type"を設定するようにいろいろ試したけど変更のさせかたが分からなかった。おそらくMandrill側でそもそも日本語メールを想定していないのではないかと思う。
ただメールサーバーの設定や運用で悩まずに済むので、英語メールでも問題無い案件ならアリだと思う