ブログが続かないわけ

この日記のはてなブックマーク数
Webエンジニアが思うこと by junichiro on Facebook

Return-Pathをセットする(Catalyst::Plugin::Email::Japanese)

このエントリーを含むはてなブックマーク hateb
先日MIME::LiteをカスタマイズしないとReturn-Pathをセットできないというような内容のエントリを書きましたが、適切な突っ込みを頂き、私が間違っていたことがわかりました。

[参考]下記のコメント欄
Return-Pathをセットする(MIME::Lite)

MIME::LiteのFromSenderに下記のように渡せばよかったので、MIME::Liteは問題なく、やっぱり素晴らしいモジュールだったのでした。
$msg->send(
'sendmail',
FromSender => 'error@example.com',
);

さっそくこれを使ってやろうと思います。

無理だ...
私はMIME::Liteを直接使っているのではなく、Catalyst::Plugin::Email::Japaneseから使っているのですが、こいつにFromSenderをセットする機能がないのです。

と思ったら、最新バージョンではどうやらできるようになっているようです。もともとC::P::Email::Japaneseの0.04を使っていたのですが、0.06からはFromSenderをセットすることができるようです。
...前略
elsif ( $route->{via} eq 'sendmail' ) {
my %param;
$param{FromSender} = '<' . $c->config->{email}->{mailfrom} . '>' if $c->config->{email}->{mailfrom};
$param{Sendmail} = $route->{command} if defined $route->{command};
$msg->send( 'sendmail', %param );
}
...後略

さっそく0.06にバージョンアップしました。
あぁー。。。メール自体飛ばなくなりました。
いろいろ調べたのだけれども、mailroute がうまく設定されていないのが原因のようなので、ymlに設定を追記することにしました。
0.04のときの設定
email:
Template: mail_templates/default.tt
From: test@example.com
ForceUTF8: 1

0.06のときの設定
email:
mailroute:
via: sendmail
command: /usr/sbin/sendmail
Template: mail_templates/default.tt
From: test@example.com
ForceUTF8: 1

via でsmtpモードかsendmailモードかを指定します。
sendmailのpathはデフォルトでは/usr/lib/sendmail になるので、ここを自分の環境に合わせて/usr/sbin/sendmail にしました。

とりあえず、これでメールを送信することができるようになりました。しかし、先ほどのFromSenderに関するところのソースをご覧になってお分かりのとおり、FromSenderには勝手に設定ファイルで指定したFromアドレスが入ってしまうようです。
            $param{FromSender} = '<' . $c->config->{email}->{mailfrom} . '>' if $c->config->{email}->{mailfrom};

ですので、Return-Pathが指定されているときはこれを上書きするように修正しました。
--- Japanese.pm.orig    2007-01-12 15:29:40.000000000 +0900
+++ Japanese.pm 2007-01-12 15:11:44.000000000 +0900
@@ -133,6 +133,7 @@
elsif ( $route->{via} eq 'sendmail' ) {
my %param;
$param{FromSender} = '<' . $c->config->{email}->{mailfrom} . '>' if $c->config->{email}->{mailfrom};
+ $param{FromSender} = '<' . $args->{'FromSender'} . '>' if $args->{'FromSender'};
$param{Sendmail} = $route->{command} if defined $route->{command};
$msg->send( 'sendmail', %param );
}

MIME::Liteでの呼び名に合わせてReturn-PathではなくFromSenderという名前を使うことにしました。
今度こそ完璧じゃね?
この修正ならCatalyst::Plugin::Email::Japaneseにも反映させてもよくねえか?
この記事のトラックバックURL
トラックバック機能は終了しました。
トラックバック
コメント









関連情報