Perl で添付ファイル付きメールを送信する

ALL
スポンサーリンク

Perl でメールを送る関数です。
日本語対応で、添付ファイルを送信できます。

メール送信サブルーチン

SendAttachedMail()

メールを送信します。
添付ファイルも送信できます。
題名、本文、添付ファイル名とも日本語対応です。

書式:
SendAttachedMail( 差出人 , 宛先 , 題名 , 本文 , 添付ファイル1のパス , 添付ファイル2のパス , … );

SendAttachedMailと使用方法のサンプルです。
下記のコードをUTF-8 で保存して使用して下さい。

use Email::MIME;
use IO::All;
use File::MMagic::XS;
use utf8;
use File::Basename;
use Email::Sender::Simple qw(sendmail);
sub SendAttachedMail {
    my @parts;
    my $m = File::MMagic::XS->new();
    push @parts ,
        Email::MIME->create(
            attributes => {
                content_type => "text/plain",
                charset      => 'ISO-2022-JP',
                encoding     => '7bit'
            },
            body_str => $_[3]
        );
    for( my $i = 4 ; $i < @_  ; $i++ ){
        push @parts ,
            Email::MIME->create(
                attributes => {
                    content_type => $m->get_mime( $_[$i] ),
                    encoding     => 'base64',
                    name         => Encode::encode( 'ISO-2022-JP', basename($_[$i]) ),
                },
                body => io( $_[$i] )->binary->all,
            );
    }
    my $email = Email::MIME->create(
        header => [
            From => Encode::encode( 'MIME-Header-ISO_2022_JP', $_[0] ),
            To => Encode::encode( 'MIME-Header-ISO_2022_JP', $_[1] ),
            Subject => Encode::encode( 'MIME-Header-ISO_2022_JP', $_[2] )
        ],
        parts      => [ @parts ],
        );
    sendmail($email);
}
SendAttachedMail(
    '"送信元" <user001@example.com>',
    '"宛先" <person6@example.net>' ,
    '題名',
    "本文1行目\n2行目\n3行目",
    "平仮名.pdf" ,
    "test.tar.gz" );

なお、実行時に

replaced vertical whitespace in From header with space; this will become fatal in a future version at XXX.pl line YYY.

のような表示が出ることがあります。

これは
Encode::encode( ‘MIME-Header-ISO_2022_JP’, $_[0] )
の結果に改行文字が入ることがあり、その改行文字を空白に変換されたことを示します。
これにより正しくメール送信が行われる為、問題ありません。

参考

My Memoz – Index
MIME::Liteのインターフェースが好きだ – サンプルコードによるPerl入門 ~ 安定と信頼のPerlを学ぼう ~
Email::Sender+Email::MIMEで添付ファイル | UCWD-Studio.【ホームページ制作 / 京都】
Email::MIME – search.cpan.org
第20回 Email::Sender:メールを送信する:モダンPerlの世界へようこそ|gihyo.jp … 技術評論社
ファイル名 or 拡張子から content-type(MIME type) を決める – tsucchiの日記

コメント