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

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(
'"送信元" ',
'"宛先" ' ,
'題名',
"本文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の日記

ブログ気持玉

クリックして気持ちを伝えよう!

ログインしてクリックすれば、自分のブログへのリンクが付きます。

→ログインへ

なるほど(納得、参考になった、ヘー)
驚いた
面白い
ナイス
ガッツ(がんばれ!)
かわいい

気持玉数 : 0

この記事へのコメント

この記事へのトラックバック