日期:2014-05-17  浏览次数:20985 次

使用perl MIME::Lite模块发送html格式邮件

发现N久没写博文了,有什么笔记也直接记到evernote里了,也不知这是好习惯还是坏习惯鸟~

?

记得在哪看过说,perl语言精髓是达到一个目的可以有很多种方法。

?

这话说得挺对的,因为就光发送邮件,你也会发现TM方法太多了,还得google一下选个比较好的方法

?

最后选了使用MIME::Lite模块,感觉挺强大的,上手也快

?

代码如下

?

sub mail_list{
    exit 99 if(!@some_rule);
    my ($sec,$min,$hour,$day,$month,$year,@tmp)=localtime;     # 邮件加个时间戳
    ($min,$hour,$day,$month,$year) = (
        sprintf("%02d",$min),
        sprintf("%02d",$hour),
        sprintf("%02d",$day),
        sprintf("%02d",++$month),
        sprintf("%04d",$year+1900)
    );
    my $from_addr = 'root@xxx.com';               #发送方
    my $to_addr = 'flw521521@xxx.com';          #接收方
    my $cc_addr = 'cc@xxx.com';                  #抄送
    my $subject = '邮件标题';     #邮件标题
    my $encode = 'quoted-printable';    #模块发送邮件内容时采用的编码方式
    my $data = "say hello\n";
    my $msg = MIME::Lite->new(
        From     => $from_addr,
        To       => $to_addr,
        Cc       => $cc_addr,
        Subject  => $subject,
        Type     => 'multipart/mixed'     # 指定总的内容为多种,如果要发送附件的话,就是这个模式
    );
    $msg->attach(
        Type    => 'text/html;charset=gb2312',     #指定邮件内容编码方式
        Encoding => $encode,
        Data    => qq{                   #接下来就是邮件中文了,简单的html编码,其中可以穿插perl变量
        <html>
        <head>
        <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
        </head>
        <boby>
          <h5>您好!</h5>
            <table border="1">
              <tr>
              <th>表格1</th><th>表格2</th><th>表格3</th>
              </tr>
            </table> 
          <hr />
          $data    #穿插一个变量,很方便
         ?<hr />
          <h5 align="right">ITEYE</h5>
          <h5 align="right">flw521521</h5>
          <h5 align="right">$year-$month-$day $hour:$min</h5>
        </boby>
        </html>
        },
    );
    $msg->send;
}

?

编码这块,有两个,一个是MIME::Lite模块发送内容时的编码,一个html的编码

?

html代码那块的编码head编码设定,可要可不要,保险起见,就写一下。

?

如果要发送其他附件的话,添加一些邮件附属信息即可

$msg->attach(                              //发送附件
       Type => 'auto',                        //附件类型自动判断
       Path => '/home/abc.txt',               //附件的路径
       Disposition => 'attachment',           //配置为附件,不在正文内
   );

   $msg->attach(                              //发送图片附件,随正文
       Type =>'image/gif',
       Path =>'/home/abc.gif',
       Filename =>'logo.gif',
   );

?

就这些吧,具体模块用法转至CPAN:http://search.cpan.org/~rjbs/MIME-Lite-3.029/lib/MIME/Lite.pm