Archive for 10月, 2008

邮件中文问题

星期一, 10月 13th, 2008

我们经常发送中文的电子邮件,而电子邮件的编码写web不大一样。我们一般用base64的编码来处理邮件头中非ascii字符。而现在UTF-8是web上最通用的编码。

$smtp->datasend("Content-Type:text/plain;charset=UTF-8\n"); #这里设置邮件内容的编码
$smtp->datasend("Subject:=?UTF-8?B?".encode_base64($title, '')."?=\n\n"); #encode_base64是MIME::Base64模块中的函数,$title为UTF-8编码过的
$smtp->datasend($mail_body." \n"); #$mail_body为UTF-8编码过的

其中=?UTF-8?B?为前缀,?=为后缀,B表示Base64编码。在邮件头的标题中,必须先用utf-8编码,然后再用base64编码,而邮件体就可以直接采用UTF-8的编码。
这样发出的邮件,就不会出现中文乱码的问题。

(更多...)

通过SMTP发送邮件

星期一, 10月 13th, 2008

之前说过用perl发送邮件,在perl中,Net::SMTP是最底层的模块。这个模块不包含auth验证和TLS验证。比如我们如果想利用163/126的smtp服务器发送邮件,就得用到auth验证;如果我们要用gmail的smtp服务器发送邮件,就要用到auth和TLS。
在perl中,可以用Net::SMTP_auth模块来利用像163/126这样的需要auth验证的SMTP服务器来发送邮件。
可以用Net::SMTP::TLS模块来处理与gmail的SMTP服务器的交互。
这两个模块的API与Net::SMTP模块的基本上一样,所以用起来也很方便。
实际上我们可以利用封装性更好的模块,例如Mail::Sender,这样的模块很多,当然也可以根据自己的需要编写适合自己的模块。

(更多...)