nDiki : 2014年02月28日

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 モジュール ]

今日のさえずり: 残して!

2014年02月28日

rimage:/nDiki/Flickr/12836554525.jpg

[ 2月28日全て ]

About

Naney Naneymx

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

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

Process Time: 0.020928s / load averages: 0.30, 0.28, 0.21