邮件 - 内嵌图片

  • 作者:KK

  • 发表日期:2016.9.7


由于一些邮箱网站在显示邮件的时候,如果发信人不是知名的邮箱服务器的话,显示邮件内容时会自动把图片给屏蔽起来不显示(就如QQ邮箱),大概是因为这些图片是外链图片(可能附带csrf攻击陷阱),那么如果你在邮件中要显示图片时写<img src="http://xxx.com/a.jpg">这样就是默认不显示,除非用户注意到“显示图片“这个按钮才会点击它把图片显示出来

那要显示不可能有csrf攻击的图片链接搞乱,办法就是添加“内嵌图片“了,之前举例的是简单做法,用img标签的src属性指向一个外部地址来说明要显示的图片。这样邮件的内容其实就是一堆字符串。

然而如果用内嵌图片,将会大概是这样的形态:<img src="c13:ff4ee44wjkmvbe:00r74e">,这不是一个外部网址,而是一个内部标识符,它指向了邮件数据的某一块数据,而你发的邮件中除了文字,也会夹带着这张图片数据发送出去,这样就不会被邮箱网站屏蔽图片显示了,怎么实现这个呢?

$email = Yii::$app->mailer->compose();
$email->setTo('接收者的邮箱地址');
$email->setSubject('测试内嵌图片的邮件');

$img = 'D:\a\b.png';
$imgAddr = $email->embed($img);
$content = '<img src="' . $imgAddr . '">上图内嵌图片,不是外链图片';
$email->setHtmlBody($content);

Yii::$app->mailer->send($email);