Email::Senderから外部のSMTPサーバ経由でメールを送る
Email::Senderを利用して外部のSMTPサーバ経由でメールを送る場合、Perlによるメール送信(Email::Sender)のサンプルを以下のように書き換えて対応できます。
use strict; use warnings; use utf8; use Encode qw(encode); use Email::MIME; use Email::MIME::Creator; use Email::Sender::Simple qw(sendmail); use Email::Sender::Transport::SMTP; my $from = q("送信者の名前" <from_mail@example.jp>); my $to = q("受信者の名前" <to_mail@example.jp>); my $subject = 'メールの送信テスト'; my $body = 'ちゃんとメールを受信できてますか?'; my $mail = Email::MIME->create( 'header' => [ 'From' => encode( 'MIME-Header-ISO_2022_JP', $from ), 'To' => encode( 'MIME-Header-ISO_2022_JP', $to ), 'Subject' => encode( 'MIME-Header-ISO_2022_JP', $subject ), ], 'attributes' => { 'content_type' => 'text/plain', 'charset' => 'ISO-2022-JP', 'encoding' => '7bit', }, 'body' => encode( 'iso-2022-jp', $body ), ); my $smtp = Email::Sender::Transport::SMTP->new({ 'host' => 'smtp.example.com', 'port' => 587, 'sasl_username' => 'hoge', 'sasl_password' => 'foo', }); sendmail($mail, { 'transport' => $smtp }); 1;
強調した部分が前回のサンプルから追加したコードです。
外部のSMTPサーバを利用するところまでは以前のエントリーでも取り上げたモダンPerlの世界へようこそ:第20回 Email::Sender:メールを送信する|gihyo.jp … 技術評論社にも書かれてるのですが、「その場合SMTP認証ってどうするの?」という場合は Email::Sender::Transport::SMTP オブジェクトを生成する際に “sasl_username” と “sasl_password” を指定すると認証をクリアできます。