突如、さくらインターネットのSMTPサーバを利用してメールを送信してみようと思ったのですよ。具体的には、PerlのEmail::Senderを使ってさくらのレンタルサーバのSMTPサーバからメールを送信してみよう、という感じ。
今回は、以下のWebサイトを参考にしました。ありがとうございます。
- モダンPerlの世界へようこそ:第20回 Email::Sender:メールを送信する – 技術評論社
- Email::Senderから外部のSMTPサーバ経由でメールを送る – UCWD-Studio.
- PerlでGmailのSMTPサーバを使ってメール送信 – kyamamoto at blog.neofig.com
さて、結論から言いますと、以下のコードにて送信ができました。ちなみに、いわゆる文字コードはUTF-8で送信しています。ISO-2022-JPで送信したい際は、上記参考サイトをご覧くださいね。
use strict;
use warnings;
use utf8;
use Encode; my $utf8 = find_encoding('utf8');
# メール作成
my $subject = $utf8->encode('テストメール');
my $body = $utf8->encode(< <'END_BODY');
Email::Senderからのテストメールです。
END_BODY
use Email::MIME;
my $email = Email::MIME->create(
header => [
From => 'from@example.com', # 送信元
To => 'to@example.jp', # 送信先
Subject => $subject, # 件名
],
body => $body, # 本文
attributes => {
content_type => 'text/plain',
charset => 'UTF-8',
encoding => '7bit',
},
);
# SMTP接続設定
use Email::Sender::Transport::SMTP::TLS;
my $transport = Email::Sender::Transport::SMTP::TLS->new(
{
host => 'example.sakura.ne.jp',
port => 587,
username => 'your_username@example.sakura.ne.jp',
password => 'your_password',
}
);
# メール送信
use Try::Tiny;
use Email::Sender::Simple 'sendmail';
try {
sendmail($email, {'transport' => $transport});
} catch {
my $e = shift;
die "Error: $e";
};
で、まぁ、ここまで到達するのに色々と四苦八苦しましてね……。っていうか、躓いたのはただ一点、『さくらのSMTPサーバへ接続する』という部分です。接続できなかったコードと接続できたコードを比較すると、
# Before
use Email::Sender::Transport::SMTP;
my $transport = Email::Sender::Transport::SMTP->new(
{
host => 'smtp.example.com',
port => 587,
sasl_username => 'your_username@example.sakura.ne.jp',
sasl_password => 'your_password',
}
);
# After
use Email::Sender::Transport::SMTP::TLS;
my $transport = Email::Sender::Transport::SMTP::TLS->new(
{
host => 'example.sakura.ne.jp',
port => 587,
username => 'your_username@example.sakura.ne.jp',
password => 'your_password',
}
);
ええ、Email::Sender::Transport::SMTPではなく、Email::Sender::Transport::SMTP::TLSを使えば直ぐだったんですね、はい。
なお、さくらのSMTPサーバではなくGmailのSMTPサーバを利用してメールを送信する際は、
use Email::Sender::Transport::SMTP::TLS;
my $transport = Email::Sender::Transport::SMTP::TLS->new(
{
host => 'smtp.gmail.com',
port => 587,
username => 'your_username@gmail.com',
password => 'your_password',
}
);
という感じに設定すれば大丈夫でした。
しかし、解ってしまえば驚くほど楽にメール送信とかできる感じですね。