Perlによるメール送信

投稿者:

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 は続き

Thank you for reading this post, don't forget to subscribe!


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;