perl メール送信にテンプレートを使う Email::MIME::MobileJP::Template
id:tokuhirom氏作の Email::MIME::MobileJP::Template を発見したので使ってみる。
PODにあるコードは動作しないので注意。renderメソッドのAPIが変わったのかな?ソースを見ると引数の最初に送り先のメールアドレスを指定しないとダメみたい。
それと、Email::MIME::MobileJP にあるソースも間違えているので注意。syntax=>'TTerse' は newする時に引数で指定する事。
use Email::MIME::MobileJP::Template; use Email::Sender::Simple; my $token='123'; my $to_email = '<foo@hoge.jp>'; # <>で囲わないとdocomoで受信したときToがおかしなことに。 my $mail_maker = Email::MIME::MobileJP::Template->new( 'Text::Xslate' => { syntax => 'TTerse', path => ['email_tmpl/'] # テンプレートの保存場所 } ); my $mail = $mail_maker->render( $to_email, # 送信先 'signup.eml', # テンプレートファイル {token => $token} # テンプレートで利用する変数 ); # メールを送信 Email::Sender::Simple->send($mail);
テンプレートファイル
path で指定したディレクトリにテンプレートファイルを作成する。MIMEヘッダはテンプレートでしか指定できない。Fromは記述しないと致命的なエラーとなるので注意。
./email_tmpl/signup.eml
Subject: [Example] サインアップ!
From: <name@hoge.com>
以下をクリックせよ
http://example.com/signup/[% token %]
携帯電話宛のメールが正しく送れない?
メールテンプレートで、Fromに指定するメールアドレスは<>で囲わないとdocomoへ送ったときにUnknown user となってしまった。from=<> となっている。これは自分の環境の問題?
エラーになったテンプレートファイル例
Subject: [Example] サインアップ!
From: name@hoge.com
以下をクリックせよ
http://example.com/signup/[% token %]
Postfixのエラーログ
Apr 5 17:44:56 vm postfix/smtp[24073]: 7D4ED32358D: to=<xxxxx.@docomo.ne.jp>, relay=mfsmax.docomo.ne.jp[203.138.180.112]:25, delay=0.17, delays=0.09/0.01/0.03/0.04, dsn=5.0.0, status=bounced (host mfsmax.docomo.ne.jp[203.138.180.112] said: 550 Unknown user xxxxx.@docomo.ne.jp (in reply to end of DATA command))
Apr 5 17:44:56 vm postfix/cleanup[23741]: A169832358F: message-id=<20110405084456.A169832358F@mail.hoge.jp>
Apr 5 17:44:56 vm postfix/qmgr[1698]: A169832358F: from=<>, size=2480, nrcpt=1 (queue active)
あと、送信先のメールアドレスは
my $to_email = '<foo@hoge.jp>';
のように指定しないと携帯(docomoムーバ)で受信したときにおかしな挙動となる。メールを開くと返信不可マークのToヘッダが表示されている(メールアドレスは送った携帯のメアド)。返信しようとすると返信先を選択する画面になる。
メール送信の実装はガラケーとカオスな文字コードのおかげでやたらと面倒なことが多い。
-
前の記事
perl SpeedyCGIでデータベースの接続を永続化する 2011.04.01
-
次の記事
Mojolicious::LiteなアプリケーションをSpeedyCGIで動かす 2011.04.13