Email::Senderを用いてメール送信する。
※ Email::Senderではなく、Net::SMTPSを使うサンプルは『(Perl) Net::SMTPSを使ってメール送信』を参照。
Email::Sender::Transport::SMTPとEmail::MIMEを使用、添付ファイル無し
#!/usr/bin/perl use warnings; use strict; 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 = '差出人の名前 <sender@gmail.com>'; my $to = 'あて先の名前 <recipient@example.com>'; my $subject = 'test テスト'; my $body = "年齢からいえば、関羽がいちばん年上であり、次が劉備、" . "その次が張飛という順になるのであるが、" . "義約のうえの義兄弟だから年順をふむ必要はないとあって、" . "「長兄には、どうか、あなたがなって下さい。\n" . "それでないと、張飛の我ままにも、おさえが利きませんから」と、関羽がいった。"; 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 ), ); eval { my $smtp = Email::Sender::Transport::SMTP->new( { 'host' => 'smtp.gmail.com', 'port' => 587, 'ssl' => 'starttls', 'sasl_username' => 'sender@gmail.com', 'sasl_password' => 'My_Password', 'debug' => 1, } ); sendmail( $mail, { 'transport' => $smtp } ); }; if ($@) { die "ERROR : $@\n"; }
SSLを用いる場合は、赤で着色した部分を次のように差し替える
'port' => 465, 'ssl' => 'ssl',
また、上の例では緑で着色した部分を指定することで、デバッグ表示を有効にしている。
Email::MIMEの自動文字エンコードを使用する場合
自動エンコードを使う場合は、下の例のように赤で着色した部分のようにする。
但し、ヘッダは強制的にUTF8エンコードされてしまう。(Email::MIME 1.9以降対応版)
my $mail = Email::MIME->create( 'header_str' => [ 'From' => $from , 'To' => $to, 'Subject' => $subject, ], 'attributes' => { 'content_type' => 'text/plain', 'charset' => 'ISO-2022-JP', 'encoding' => '7bit', }, 'body_str' => $body, );
Email::Sender::Transport::SMTP::TLSとEmail::MIMEを使用、添付ファイル無し
Email::Sender::Transport::SMTP::TLSは非推奨だが、『さくらインターネット 共用サーバ』ではEmail::Sender::Transport::SMTPがエラーとなるため、非推奨方法を使わざるを得ない場合の例。
#!/usr/bin/perl use warnings; use strict; use utf8; use Encode qw(encode); use Email::MIME; use Email::MIME::Creator; use Email::Sender::Simple qw(sendmail); use Email::Sender::Transport::SMTP::TLS; my $from = '差出人の名前 <sender@gmail.com>'; my $to = 'あて先の名前 <recipient@example.com>'; my $subject = 'test テスト'; my $body = "年齢からいえば、関羽がいちばん年上であり、次が劉備、" . "その次が張飛という順になるのであるが、" . "義約のうえの義兄弟だから年順をふむ必要はないとあって、" . "「長兄には、どうか、あなたがなって下さい。\n" . "それでないと、張飛の我ままにも、おさえが利きませんから」と、関羽がいった。"; 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 ), ); eval { my $smtp = Email::Sender::Transport::SMTP::TLS->new( { 'host' => 'smtp.gmail.com', 'port' => 587, 'ssl' => 'starttls', 'sasl_username' => 'sender@gmail.com', 'sasl_password' => 'My_Password', # デバッグフラグは未対応のため意味なさず 'debug' => 1, } ); sendmail( $mail, { 'transport' => $smtp } ); }; if ($@) { die "ERROR : $@\n"; }
Email::Sender::Transport::SMTPとEmail::MIMEを使用、添付ファイル有り
#!/usr/bin/perl
use warnings;
use strict;
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 = '差出人の名前 <sender@gmail.com>';
my $to = 'あて先の名前 <recipient@example.com>';
my $subject = 'test テスト';
my $body =
"年齢からいえば、関羽がいちばん年上であり、次が劉備、"
. "その次が張飛という順になるのであるが、"
. "義約のうえの義兄弟だから年順をふむ必要はないとあって、"
. "「長兄には、どうか、あなたがなって下さい。\n"
. "それでないと、張飛の我ままにも、おさえが利きませんから」と、関羽がいった。";
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 ),
],
parts => [
Email::MIME->create(
'attributes' => {
'content_type' => 'text/plain',
'charset' => 'ISO-2022-JP',
'encoding' => '7bit',
},
'body' => encode( 'iso-2022-jp', $body ),
),
Email::MIME->create(
'attributes' => {
'content_type' => 'text/plain',
'name' => 'attached image name',
'filename' => 'test01.jpg',
'encoding' => 'base64',
'disposition' => 'attachment',
},
'body' => scalar Path::Class::file('test01.jpg')->slurp,
),
],
);
eval {
my $smtp =
Email::Sender::Transport::SMTP->new( {
'host' => 'smtp.gmail.com',
'port' => 587,
'ssl' => 'starttls',
'sasl_username' => 'sender@gmail.com',
'sasl_password' => 'My_Password',
'debug' => 1,
} );
sendmail( $mail, { 'transport' => $smtp } );
};
if ($@) {
die "ERROR : $@\n";
}
緑で着色した部分で添付ファイルを処理している