nDiki

2014年2月28日 (金)

Email::Sender::Transport::SMTP::TLS を使って Perl スクリプトからメール送信

TLS と認証が必要な SMTP サーバ経由でメールを送信する以前書いたスクリプトをちょっと整理した。標準入力からメッセージ本文を受けとって送信できるように機能を切り出し。

メールでコンテンツを投稿できるサービスにメールを投げる時用。

標準入力で受け取った本文を Email::MIME でメールの形式に変換して、Email::Sender::Simple を使って送信。transpot として Email::Sender::Transport::SMTP::TLS を使う。なお、今 Email::Sender::Transport::SMTP::TLS の Pod ドキュメントをみたら今後は Email::Sender::Transport::SMTPS の方がお薦めと書いてあったのでその方が良いのかも。

 #!/usr/bin/perl

 use warnings;
 use strict;
 use utf8;
 use open IN => ':utf8';
 use open ':std';

 use Email::MIME;
 use Email::Sender::Simple qw(sendmail);
 use Email::Sender::Transport::SMTP::TLS;

 eval {

   my $message;
   {
     local $/ = undef;
     $message = <>;
   }

   my $subject = "sendXXX: $message";
   $subject = substr($subject, 0, 32 - 3) . '...' if length($subject) > 32;

   my $new_mail = Email::MIME->create(
     header_str => [
       From    => 'me@example.com',
       To      => 'post@example.com',
       Cc      => 'me@example.com',
       Subject => $subject,
     ],
     attributes => {
       content_type => 'text/plain',
       charset      => 'UTF-8',
       encoding     => '8bit',
     },
     body_str => $message
   );

   sendmail(
     $new_mail,
     {
       from      => 'me@example.com',
       transport => Email::Sender::Transport::SMTP::TLS->new(
         {
           host     => 'smtp@example.com',
           port     => 587,
           username => 'myusername',
           password => 'mypassword'
         }
       )
     }
   );
 };
 if ($@) {
    open my $file, '>>', '/home/me/var/log/sendXXX/error.log' or die $!;
    print $file $@, "\n";
    close $file;
    exit 1;
 }
 exit 0;

[ Perl モジュール ]

スポンサード リンク
[ 2月28日全て ]

About Me

Naney Naney (なにい)です。株式会社ミクシィで SNS 事業の部長をしています。

nDiki1999年1月に始めたコンピュータ日誌を前身とする NaneyWeb 日記(兼パーソナルナレッジベース)です。ちょっとしたノートは nNote にあります。

※内容は個人的見解であり所属組織とは関係ありません。

月別インデックス
Process Time: 0.221318s / load averages: 0.84, 0.57, 0.56
nDiki by WATANABE Yoshimasa (Naney)
Powered by DiKicker