2012年2月6日 星期一

perl : 在utf8環境下寄出big5 mail example

#!/usr/bin/perl

require "$ENV{HOME}/perl/setEnv.pl";

use DBI;
use Mail::Sendmail;
use MIME::QuotedPrint;
use MIME::Base64;
use Encode;
#use utf8;

$ENV{LANG} = "zh_TW.Big5";
#$ENV{LANG} = "zh_TW.UTF-8";

my $dbh = DBI->connect("$connectString", "$username", "$pass")
  or print "Can't connect to database: ", $DBI::errstr, "\n";

my $mailList;
my $mailListCC;
my @dt = &getDate(-1);
my $html;

&main();

sub main {
    &getWO();
}

sub getWO {
    my $str = encode("utf8",decode("big5","公司人員"));
    my $sql = q{
select a.*,rownum
  from (
        select depart_no_to,depart_name_to,name_to,
               replace(email_to,'@','\@') email_to,
               round(sum(telamt)) telamt,a.leader,
               replace(b.email,'@','\@') email_leader
          from tel_vw_report t,hr_tbl_glsegment a,hr_tbl_personnel b
         where rmnth like to_char(sysdate-1,'yyyymm')
           and telcat = ?
           and t.depart_no_to = a.segment_no
           and a.leader = b.id
         group by depart_no_to,depart_name_to,name_to,email_to,a.leader,b.email
         order by telamt desc
       ) a
 where rownum <= 20
        };
    #print "$sql";
    #$sql = encode("utf8",decode("big5",$sql));
    my $sth = $dbh->prepare($sql);
    $sth->execute($str);
       
    $html .= qq{<table width = "50%" border="1">};
    $html .= qq{<tr><th width = "250%" bgcolor="#8fb3f3">排名</th><th width = "10%" bgcolor="#8fb3f3">部門代碼</th><th width = "5%" bgcolor="#8fb3f3">部門名稱</th>};
    $html .= qq{<th width = "5%" bgcolor="#8fb3f3">員工</th><th width = "5%" bgcolor="#8fb3f3">金額</th></tr>};
   
    while (my @data = $sth->fetchrow_array()) {
        #print "@data\n";
        $html .= qq {<tr>};
        $data[1] = encode("big5",$data[1]);
        $data[2] = encode("big5",$data[2]);

        $html .= qq {<td>$data[7]</td><td>$data[0]</td><td>$data[1]</td><td>$data[2]</td><td>$data[4]</td>};
        $html .= qq {</tr>};
        $mailList   .= $data[3] .";";
      $mailListCC .= $data[6] .";";
    }
    $html .= qq{</table>};   
   
    &mailWOCheck($werks);
}

sub mailWOCheck {
    my %mail = (
                From => 'MIS <ty.ruan@aot.com.tw>',
                  To => "ty.ruan\@aot.com.tw",
                                CC => "",
             Subject => "本月員工手機被公司桌機撥打前二十名",
               );
    $mail{smtp} = "$smtp";
 
  $message = qq {"$dt[5]/$dt[4]/$dt[3] $dt[2]:$dt[1]:$dt[0]"<br>
<br>更多資訊,請至 <a href="http://aot-reporting/ReportServer/Pages/ReportViewer.aspx?%2f%e9%9b%bb%e8%a9%b1%e8%b2%bb%e7%b5%b1%e8%a8%88%2f%e8%a2%ab%e6%92%a5%e6%89%93%e6%89%8b%e6%a9%9f%e5%93%a1%e5%b7%a5%e6%8e%92%e5%90%8d&rs:Command=Render">這裡</a>查詢
<br>Time : 每日 08:09 寄出
<br>Action: 請至MIS申請集團MVPN號碼,完成後向分機16552登記
$html
};
  #$message = encode("utf8",decode("big5",$message));
   
    $boundary = "====" . time() . "====";
    $mail{'content-type'} = "multipart/html; boundary=\"$boundary\"";
   
$boundary = '--'.$boundary;
$mail{body} = <<END_OF_BODY;
$boundary
Content-Type: text/html; charset="big5"
Content-Transfer-Encoding: quoted-printable

$message
$boundary

$mail{body}
$boundary--
END_OF_BODY
   
    sendmail(%mail) || print "Error: $Mail::Sendmail::error\n";

}

#如果mail內容是utf8編碼,則要用Content-Type: text/html; charset="utf-8"

沒有留言:

張貼留言