文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>用Mail::SendMail发送带图片的HTML邮件

用Mail::SendMail发送带图片的HTML邮件

时间:2007-01-05  来源:xiaoshengcaicai

用Mail::SendMail发送一般的plain文本邮件是这样的:

use Mail::Sendmail;
my $rh_mail;
$rh_mail->{Sender} = 'return_path@cn';
$rh_mail->{From} = 'mail_from@cn';
$rh_mail->{To} = 'mail_to@cn';
$rh_mail->{Content-Type} = 'text/plain';
$rh_mail->{Subject} = 'plain mail';
$rh_mail->{Message} = 'this is some plain text';
sendmail(%$rh_mail);


如果要发送HTML邮件,只需要把以上的Content-Type改成text/html就可以了,但如果HTML邮件还同时要包含图片的话,那么就是说这个邮件的Message部分会分成几个部分,一部分是一个完整的HTML内容(包含HTML的content-type, charset,body等), 一部分是一个完整的图片内容(包含图片的content-type,编码方式,图片内容等),这些部分以一个boundary进行分隔, 这个boundary不应该有歧义,不应该是跟HTML内容跟图片内容的一个子串,一般来说我们可以用当前时间再加几个随机字符就可以了,出错概率非常小,这里只是简单用一个固定的boundary。代码如下:

use Mail::Sendmail;

use MIME::Base64 qw(encode_base64);
my $rh_mail;
$rh_mail->{Sender} = 'return_path@cn';
$rh_mail->{From} = 'mail_from@cn';
$rh_mail->{To} = 'mail_to@cn';
$rh_mail->{Content-Type} = 'text/plain';
$rh_mail->{Subject} = 'plain mail';

my $boundary = '============I am the shit boundary=========';
$rh_mail->{Content-Type} = qq#multipart/related;boundary="$boundary"#;

my $message = '';

#html body part

$message .= qq#--$boundary\n#;

$message .= qq#Content-Type: text/html\n\n#;

$message .= qq#<html><body>this is the html body <img src="cid:cid_image1"></body></html>\n#;


#images part

#if $image_buffer is the image content read from the image file

$message .= qq#--$boundary\n#;

$message .= qq#Content-Type: image/$type; name="image1"\n#;

$message .= qq#Content-Transfer-Encoding: base64\n#;

$message .= qq#Content-ID: <cid_image1>\n\n#;

$message .= encode_base64($image_buffer);

$message .= "\n\n";

$message .= qq#$boundary--\n#;


$rh_mail->{Message} = $message;
sendmail(%$rh_mail);

相关阅读 更多 +
排行榜 更多 +
试着飞手游下载

试着飞手游下载

休闲益智 下载
血染小镇(功能菜单)中文版下载

血染小镇(功能菜单)中文版下载

飞行射击 下载
泰坦之旅高爆版下载

泰坦之旅高爆版下载

角色扮演 下载