Email-Senderによるメール送信

スクリプトはEUC-JPで保存する事とする。

 #!/usr/bin/env perl
 
 use strict;
 use warnings;
 
 use Email::Sender::Simple qw(sendmail);
 use Email::Simple;
 use Email::Simple::Creator;
 use Encode qw/from_to/;
 
 my $from_name  = '名前';
 my $from_email = 'saburo@example.net';
 my $subject    = '件名';
 my $body       = '本文';
 my @to_emails  = ( 'taro@example.com', 'jiro@example.co.jp' );
 
 my $_from_email = sprintf( '%s <%s>', $from_name, $from_email );
 
 from_to( $_from_email, 'euc-jp', 'MIME-Header-ISO_2022_JP' );
 from_to( $subject,     'euc-jp', 'MIME-Header-ISO_2022_JP' );
 from_to( $body,        'euc-jp', 'iso-2022-jp' );
 
 foreach my $to_email (@to_emails) {
     my $email = Email::Simple->create(
         header => [
             To      => $to_email,
             From    => $_from_email,
             Subject => $subject,
         ],
         body       => $body,
         attributes => {
             content_type => 'text/plain',
             charset      => 'ISO-2022-JP',
             encoding     => '7bit',
         },
 
     );
 
     sendmail($email);
 }

テスト実行

 EMAIL_SENDER_TRANSPORT=Print ./1.pl

のようにすると、標準出力にメール情報が表示される。

MIMEエンコードによるヘッダ行の分割について

ただし、上のスクリプトでは、件名等が長いと、

 From: =?ISO-2022-JP?B?GyRCTD5BMBsoQg==?= <test@test.com>
 Subject:
   =?ISO-2022-JP?B?GyRCN29MPjdvTD43b0w+N29MPjdvTD43b0w+N29MPjdvTD43b0w+GyhC?=
   =?ISO-2022-JP?B?GyRCN29MPjdvTD43b0w+N29MPjdvTD43b0w+N29MPhsoQg==?=
 Date: Sat, 29 Oct 2011 16:12:36 +0900

のように分割されるが、Subject:の後に文字列が続かないと(Subject: =?ISO-2022-JP?B?GyR...C?=のように)正しくヘッダとして認識しないクライアントメールソフトがある。それを回避するには、Email::Simpleを使う場合、Email::Simple::Headerの_fold()をどうにかする。

参考


トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS