perl模块MIME::Lite发送中文邮件

学perl注定是要孤独的,如果可以从头来过,学python吧,毕竟perl的圈子太小了,就那几个qq群,问题太浅人家不想鸟你,太深的知识自己也不会

今天有个群友告诉我 www.maildir.cn 的邮件不能用了,唉,以前都一直好好的,不知道最近为什么居然出错了。不管怎么样,反正就是出错了,发不出邮件

因为电脑不好出错了  大约问题是 net::cmd 这个模块,,使用宽字符,大约如下

Wide character in syswriteat /usr/lib/perl5/5.8.8/Net/Cmd.pm line 436.

后来google了一下,再加上调试总算把问题解决了,,所以留下点笔记,以帮助其它人

    my $msg=MIME::Lite->new(
            From=>$opt->{from},
            To=>$opt->{to},
            #Subject=>$opt->{subject},
			Subject=>"=?UTF-8?B?" .encode_base64(encode("utf8", $opt->{subject}), "") . "?=",
            #Type => 'text/html',
            #'Content-transfer-encoding'=>'7bit',
            Data =>encode("utf8", $opt->{body}),
			Encoding => 'base64',
    );
    $msg->attr("content-type.charset" => "UTF-8");

    #$msg->send('smtp','wwww.maildir.cn',Debug=>0);

以上代码只能作为参考,不能直接作用,主要是两个地方,1、主题 要用utf8编码 即是

"=?UTF-8?B?" .encode_base64(encode("utf8", $opt->{subject}), "") . "?="

2、邮件内容需要,encode 一下

 Data =>encode("utf8", $opt->{body}),

参考

https://www.databasesandlife.com/using-utf-8-and-unicode-data-with-perl-mimelite/