Javaみたいに使えるメール送信pmを組んでみました
使う場合はこんな風に
use Function::mail;
Function::mail::setSubject(“題名”);
Function::mail::setBody(“本文”);
Function::mail::setFromAddress(“aaa@aaa.co.jp”);
Function::mail::setToAddress(“bbb@bbb.co.jp”);
Function::mail::send();
pm は続き
mail.pm
package Function::mail;
use strict;
use CGI;
use Jcode;
use MIME::Entity;
use MIME::Base64;
use Unicode::Japanese;
my $mailer = ‘/usr/lib/sendmail’;
my $from_address;
my $err = 0;
my $mail_template;
my $mail_subject;
my $email_body;
# メールのSubjectをセットする
sub setSubject{
$mail_subject = shift;
}
# メール本文のセット
sub setBody{
$email_body = shift;
}
# メールあて先
sub setToAddress{
$to_address = shift;
}
# メール送信元
sub setFromAddress{
$from_address = shift;
}
# 送信部分
sub send{
my $mime_subject = EncodeSubject( $mail_subject );
my $mime_body = Jcode::convert($email_body,’jis’);
open(MAIL, “| $mailer -t $to_address -f $from_address”) or $err = 1;
if ($err == 0) {
#print MAIL $oMime->stringify;
print MAIL “From: $from_address\n”;
print MAIL “To: $to_address\n”;
print MAIL “Subject: $mime_subject\n”;
print MAIL “Content-Transfer-Encoding: 7bit\n”;
print MAIL “Content-Type: text/plain; charset=\”ISO-2022-JP\”\n\n”;
print MAIL $mime_body;
close(MAIL);
}
return $err;
}
# subjectの文字コード変換
sub EncodeSubject {
my($String) = @_;
#&jcode::convert(\$String, “euc”);
Jcode::convert(\$String,’euc’);
my($Base64Table) = ‘ABCDEFGHIJKLMNOPQRSTUVWXYZ’.
‘abcdefghijklmnopqrstuvwxyz’.
‘0123456789+/’;
my($chunk, $ByteChunk, $PackedByteChunk, $DecimalNum, $EncodedString);
my($SplitedWord, @SplitedWordList, $i, $Byte, $Buff);
my($KI) = 0;
my($KO) = 0;
my($CharNum) = 0;
my($CharType) = 0;
my($LineLength) = 0;
my($CharEndFlag) = 1;
my $BitStream;
if($String =~ /[^a-zA-Z0-9\!\”\#\$\%\&\’\(\)\*\+\,\-\.\/\:\;\<\=\>\?\@\[\/\^\_\~ ]/) {
$i = 0;
@SplitedWordList = ();
while($i < length($String)) {
$Byte = substr($String, $i, 1);
if($Byte =~ /[\x8E\xA1-\xFE]/) {
unless($CharType eq 'K') {$KI ++;}
$CharType = 'K';
if($CharEndFlag) {
$CharEndFlag = 0;
} else {
$CharEndFlag = 1;
}
} else {
if($CharType eq 'K') {$KO ++;}
$CharType = 'A';
$CharEndFlag = 1;
}
$Buff .= $Byte;
$CharNum += 1;
$LineLength = 27 + ($CharNum*4/3) + (($KI+$KO)*4) + 2;
if($CharType eq 'K') {$LineLength += 4;}
if($CharEndFlag && $LineLength>=70) {
#&jcode::convert(\$Buff, “jis”);
Jcode::convert(\$Buff,’jis’);
push(@SplitedWordList, $Buff);
$Buff = ”;
$CharNum = 0;
$CharType = 0;
$KI = 0;
$KO = 0;
}
$i ++;
}
#&jcode::convert(\$Buff, “jis”);
Jcode::convert(\$Buff,’jis’);
push(@SplitedWordList, $Buff);
for $SplitedWord (@SplitedWordList) {
$EncodedString .= ‘=?ISO-2022-JP?B?’;
$BitStream = unpack(“B*”, $SplitedWord);
$i = 0;
while($chunk = substr($BitStream, $i*6, 6)) {
unless(length($chunk) == 6) {
$chunk = pack(“B6”, $chunk);
$chunk = unpack(“B6”, $chunk);
}
$ByteChunk = sprintf(“%08d”, $chunk);
$PackedByteChunk = pack(“B8”, $ByteChunk);
$DecimalNum = unpack(“C”, $PackedByteChunk);
$EncodedString .= substr($Base64Table, $DecimalNum, 1);
$i++;
}
if(length($SplitedWord) % 3 == 1) {
$EncodedString .= ‘==’;
} elsif(length($SplitedWord) % 3 == 2) {
$EncodedString .= ‘=’;
}
$EncodedString .= ‘?=’.”\n “;
}
$EncodedString =~ s/\n $//;
} else {
$EncodedString = $String;
}
return $EncodedString;
}
1;