Email::Send::Gmail でメール送信
Gmail のSMTPをPerlで叩いてメール送信する。
自前でメールサーバとかとか立ててない場合に便利。
#!/usr/bin/perl use strict; use warnings; use Email::Send; use Email::Send::Gmail; use Email::Simple::Creator; use Config::Pit; my $config = Config::Pit::get('Gmail'); my $email = Email::Simple->create( header => [ From => $config->{account}, To => 'foo@example.com', Subject => 'test', ], body => 'TEST', ); my $sender = Email::Send->new({ mailer => 'Gmail', mailer_args => [ username => $config->{account}, password => $config->{password}, ] }); $sender->send($email);
Email::Send / Email::Send::Gmail / Email::Simple::Creator はわりと簡単にインストールできたんだけど、なぜか全然メールが送れなくてまいった。
別マシンからだと同じコードで送信可能だったりもするので、何かこちらの環境がおかしいかなと思って調査開始。
エラーメッセージからして、Net::SMTP::SSLでこけているようだったので、そこだけ取り出した簡単なスクリプトを書いた。
#!/usr/bin/perl use strict; use warnings; use Net::SMTP::SSL; my $smtp = Net::SMTP::SSL->new( 'smtp.gmail.com', Port => 465, Debug => 1, ) || die "oops";
案の定、こけて、どうしようかなあと思ったのだが、たぶん依存モジュールのバージョンが古いとかだろうなと思って、Net::SMTP::SSL のソースを開く。
$ perldoc -m Net::SMTP::SSL
IO::Socket::SSL と Net::SMTP が use されていて、Net::SMTPもIO::Socket::SSLも最新版が入っていた。
あきらめず、IO::Socket::SSL を開く。
use IO::Socket; use Net::SSLeay 1.21; use Exporter (); use Errno qw( EAGAIN ETIMEDOUT ); use Carp; use strict;
Net::SSLeay が怪しいよなあ、これは、勘だけど。
そういうわけで、入れなおす。
# cpan -if Net::SSLeay
無事、メール送信できた。