【状況】
- いままでperlからメールを送る時は、「open MAIL, “|/usr/sbin/sendmail -t”」とかして送っていたが、これだと送信者が不明な状況でよろしくないと思った。
- 「Net::SMTP」を使うことで、smtp認証の使い方がわかり、特定のアカウントからメールを送ることができるようになった。
- SMTP AUTHについて、あるサーバでは「Net::SMTP」を読み込むだけで良いが、別のサーバでは動かなかった。その場合「Authen::SASL」を読み込むとOKになった。
【把握しておきたいポイント】
- 「Net::SMTP」「Authen::SASL」はデフォルトで入っていない。cpanでインストールできること。(cpanが使えない場合、手動で入れることもできるが手順は現在不明)
- 送信用のメールアカウントを利用。送信制限等があるアカウントもあるので気をつけて。
- ヘッダに以下を記載。
use Net::SMTP;
use Authen::SASL; - SMTPクラスでメールを送れるようにするために認証周りの設定を行う。
my $v_smtp = Net::SMTP->new((送信メールサーバ), Port=>(ポート番号));
$v_smtp->auth((アカウント),(パスワード)) or die(“auth failed”);
※今回の話と関係ないけど、dieのテキスト部分の最後に改行を入れなければ、エラー発生時に停止した行を出してくれる。 - メールを送信するための各値の設定
$v_smtp->mail((送信元アドレス));
$v_smtp->to((送信先アドレス));
$v_smtp->cc((ccアドレス));
$v_smtp->data();
$v_smtp->datasend((ヘッダ情報));
$v_smtp->datasend((本文));
$v_smtp->dataend();
$v_smtp->quit;
※送信先アドレス、ccアドレスは複数のアドレスを指定することも可能。その場合配列で渡す。
※ccアドレスは無ければ不要
- ヘッダ情報には以下のような内容を書くと良い
From: (送信元アドレス)
To: (送信先アドレス)
Cc: (ccアドレス)
Subject: (メールの件名)
Mime-Version: 1.0
Content-Type: text/plain; charset = “ISO-2022-JP”
Content-Trensfer-Encoding: 7bit
※ccアドレスは無ければ不要
- ヘッダ文字列、サブジェクトはjisへのエンコードが必要。いろいろやり方は有るが、「Encode」を使ってもできる。
ソースの頭にに以下を記載。
use Encode;
で、文字列を$strとした場合、以下のようにする。
$str = encode(‘jis’,decode((サーバの文字コード), $str));