end0tknr's kipple - 新web写経開発

http://d.hatena.ne.jp/end0tknr/ から移転します

メール送信はNet::SMTP→Email::Senderに乗り換えるべき?

私の場合、perlでメール送信する場合、Net::SMTPを使用して次のようなsrcを書いていました。

use Encode;
use Net::SMTP;

my $CONF = TEST::Config->get_config();

sub send_mail {
    my ($self,$subject,$message,$mailto) = @_;

    #user登録がない場合、送信は行いません(debug用)
    if( not $CONF->{smtp}->{uid} ){
	$self->warn("not defined smtp mail from: $subject $message");
	return 1;
    }
    #mailtoがない場合、送信は行いません
    if( ref($mailto) ne "ARRAY" or
	@$mailto < 1 ){
	$self->warn("not defined smtp mail to: $subject $message");
	return 1;
    }

    my $from =	$CONF->{smtp}->{uid} . $CONF->{common}->{smile_mail_domain};
    my $mailto_str = join(',', @$mailto );
    $subject = encode('iso-2022-jp',$subject);

    #メールのヘッダーを構築
    my $header = << "MAILHEADER";
From: $from
Subject: $subject
Mime-Version: 1.0
Content-Type: text/plain; charset = "ISO-2022-JP"
Content-Transfer-Encoding: 7bit
MAILHEADER

    $message = encode('iso-2022-jp',$message);

    my $smtp = Net::SMTP->new($CONF->{smtp}->{host},
			      Hello=>$CONF->{smtp}->{host},
			      Port=> $CONF->{smtp}->{port},
			      Timeout=>20,
#			      Debug=>1
			     );
    unless($smtp){
	my $msg = "can't connect smtp server:$CONF->{smtp}->{host}:$!";
	die $msg;
    }
    unless ($smtp->auth($CONF->{smtp}->{uid},$CONF->{smtp}->{passwd}) ){
	my $msg = "can't login smtp server:$CONF->{smtp}->{host}:$!";
	die $msg;
    }

    $smtp->mail($from);
    $smtp->to(@$mailto);
    $smtp->data();
    $smtp->datasend("$header\n");
    $smtp->datasend("$message\n");
    $smtp->dataend();
    $smtp->quit;

}

gihyo.jpでは「モダンPerlの世界へようこそ」が連載されていますが、その中の「第20回 Email::Sender:メールを送信する」でEmail::Senderが紹介されています。

http://gihyo.jp/dev/serial/01/modern-perl/0020?page=1
http://search.cpan.org/perldoc?Email::Sender

Email::Senderに乗り換えてもいいのかもしれませんが、Net::SMTPを使ってきた愛着?と、Email::Senderの依存moduleが多さであんまり気が進みませんね。

http://deps.cpantesters.org/?module=Email::Sender;perl=latest