さくらインターネットのスタンダードプランのメールアカウントでSMTP-AUTHでメールを送信するためのPerlのモジュールのお話。
すでに非推奨の
を修正した
もやはり非推奨で、さらにそのラッパーである
も、当然非推奨になっている。
かわりに推奨されているのが
であり、より低レベルなAPIの
である。
もし、GmalでSMTP-AUTHで送信するのであれば、Email::Sender::Transport::SMTPSがそのまま使えて、作者のページのサンプルコードにあるように、
use Email::Sender::Simple qw(sendmail);
use Email::Sender::Transport::SMTPS;
use Try::Tiny;
my $transport = Email::Sender::Transport::SMTPS->new({
host => 'smtp.gmail.com',
ssl => 'starttls',
sasl_username => 'myaccount@gmail.com',
sasl_password => 'mypassword',
});
use Email::Simple::Creator; # or other Email::
my $message = Email::Simple->create(
header => [
From => 'fromme@myhost.com',
To => 'toyou@yourhost.com',
Subject => 'Subject title',
],
body => 'Content.Email::Sender::Transport::SMTPS',
);
try {
sendmail($message, { transport => $transport });
} catch {
die "Error sending email: $_";
};
これで、メールを送信することができる。 「 Gmailの場合は 」
さくらインターネットのSMTP-AUTHではMD5系は使えない
Gmailでメールを送る場合は上のコードでよいのに、さくらインターネット スタンダードプランのメールサーバで送るときは、うまくいかない。原因は、PLAINかLOGINの認証方式しか受け付けないから。
Email::Sender::Transport::SMTPS は便利なのだが、SMTP-AUTHの認証方式を指定してオブジェクトを生成できないっぽい。ので、より低レベルなNet::SMTPSを使って書くしかなさそう。
use Net::SMTPS;
my $ssl = 'starttls'; # 'ssl' / 'starttls' / undef
my $smtp = Net::SMTPS->new('myhost.jp', Port => 587, doSSL => $ssl);
my $auth_method = 'LOGIN';
$smtp->auth('userid', 'password', $auth_method);
$smtp->mail('fromme@myhost.jp');
$smtp->to('toyou@myhost.jp');
$smtp->data();
$smtp->datasend("Subject:A simple test message\n\n");
$smtp->datasend("A simple test message $auth_method\n");
$smtp->dataend();
$smtp->quit;
Net::SMTPSオブジェクトには、authというメソッドがあって、そのメソッドの3番目の引数が、認証方式になる。
$smtp->auth( USERNAME, PASSWORD [, AUTHMETHOD])
3番目の認証方式の引数は指定しなくてもいいが、その場合はデフォルト値のCRAM-MD5となる。
認証方式は
- PLAIN
- LOGIN
- CRAM-MD5
- DIGEST-MD5
のいずれかの中から選ぶが、さくらインターネットのレンタルサーバのメールサーバは、受け付けられる認証方式が1か2なので、PLAINかLOGINを指定する。そうすれば、念願のSMTP-AUTHを利用したメールの送信ができる。