http://end0tknr.hateblo.jp/entry/20150819/1439950536 http://end0tknr.hateblo.jp/entry/20170205/1486293131
Email::Stuffer シリーズ?の第3弾?
メールソフト(MUA)に表示されるアドレスとは、別のアドレスにエラーメールを返送したい為、メモ。 まぁ、ググれば、分かるんですけどね
envelope from と header from の違い?
fromのtype | 説明(例) |
---|---|
envelope from | 封筒に書かれる差出人. 宛先不明時はこちらへ返送 |
header from | 便箋に書かれる差出人 |
envelope from と Return-Pathの関係
宛先不明メールは、Return-Path宛に返送されます。 しかし、メールヘッダのReturn-Pathはメールサーバ経由時に書換えられる為、 単純にメールヘッダにReturn-Pathを設定しても意味がありません。
envelope fromこそが、メールサーガ経由時にReturn-Pathに設定される為、 envelope fromにエラーメールの返送先を設定する必要があります。
Email::Stuffer for perlによるメール送信でReturn-Pathをセット
するには、次のように書きます。
ただし、試した範囲では、smtp.gmail.com での送信では、 好みのReturn-Path(envelop from)は設定できませんでした。
#!/usr/local/bin/perl use strict; use warnings; use utf8; use Email::Stuffer; use Email::Sender::Transport::SMTP; use Email::Sender::Transport::SMTP::TLS; use Data::Dumper; my $FROM = 'ないしょ@ないしょ.com'; ## HEADER FROM my $REPLY_TO = 'ひみつ@ないしょ.com'; ## ENVELOP FROM my $SUBJECT = 'TEST MAIL'; # auth smtpの場合 my $SMTP_CONF = {host => 'xxx.yyy.zzz.co.jp', port => 587, sasl_username => 'ないしょ', sasl_password => 'ないしょ', debug=>1}; # 素の場合 # my $SMTP_CONF = {host => 'ないしょ.co.jp', port => 25}; # auth smtp(tls)の場合 my $SMTP_TLS_CONF = {host => 'smtp.gmail.com', port => 587, username=>'ないしょ@gmail.com', password=>'ないしょ', # APPのパスワード debug=>1 }; main( @ARGV); sub main { my ($mailto) = @_; my $email = Email::Stuffer->new(); my $smtp = get_smtp_obj(); # my $smtp = get_smtp_obj_tls(); $email->transport( $smtp ); $email->subject($SUBJECT); $email->from($FROM); ## HEADER FROM $email->to($mailto); $email->header('Reply-To' => $REPLY_TO); my $txt_mime = get_txt_mime(); ## 代替text part my $html_mime = get_html_mime(); ## html part push(@{$email->{parts}}, $txt_mime); push(@{$email->{parts}}, $html_mime); $email->send_or_die({from=>$REPLY_TO}); ## ENVELOP FROM } sub get_smtp_obj_tls { my $smtp = Email::Sender::Transport::SMTP::TLS->new($SMTP_TLS_CONF); return $smtp; } sub get_smtp_obj { my $smtp = Email::Sender::Transport::SMTP->new($SMTP_CONF); return $smtp; } sub get_txt_mime { my $attr = {content_type => 'text/plain', charset => 'utf-8', encoding => 'quoted-printable', format => 'flowed'}; my $body =<<EOF; これは、テキストメールのテストです。 EOF my $mime = Email::MIME->create(attributes => $attr, body_str => $body); return $mime; } sub get_html_mime { my $attr = {content_type => 'text/html', charset => 'utf-8', encoding => 'quoted-printable'}; my $body =<<EOF; <html> <head></head> <body> これは、<b>HTML</b>メールのテストです。 </body> </html> EOF my $mime = Email::MIME->create(attributes => $attr, body_str => $body); return $mime; } 1;