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” を指定すると認証をクリアできます。