perlからのメール送信

投稿者: | 2014年4月2日

【状況】

  • いままで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));

 

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

*

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)