在php中发送邮件,如果在邮件中图片按理来加img标签在src写图片路径就可以了
<?php
// 发邮件给用户
include_once($_SERVER["DOCUMENT_ROOT"] . '/PHPMailer/class.phpmailer.php');
$mail = new PHPMailer();
// 图片附件
$imageUrl = dirname('https://' . $_SERVER['SERVER_NAME'] . $_SERVER["REQUEST_URI"]) . '/image/';
$picArr = array(
'fb' => $imageUrl . "icon-fb.png",
'in' => $imageUrl . "icon-in.png",
'wc' => $imageUrl . "icon-wc.png"
);
// 邮件内容
$mail->isHTML(true);
$mail->CharSet = 'UTF-8';
$mail->From = "test";
$mail->FromName = 'test';
$mail->AddAddress("xx@qq.com");
$mail->AddCC("xx@qq.com");
$mail->Subject = "测试";
$mail->Body = "这里是测试在邮件中利用附件在内容中插入图片";
$mail->Body .= "<p>";
$mail->Body .= "<a href='xx'><img src='{$picArr['fb']}'></a> ";
$mail->Body .= "<a href='xx'><img src='{$picArr['in']}'></a> ";
$mail->Body .= "<a href='xx'><img src='{$picArr['wc']}'></a> ";
$mail->Body .= "</p>";
$mail->send();
但是出于安全考虑邮箱平台一般默认不会显示图片,如下图QQ邮箱所示,需要我们手动点击显示图片
有没有方法不做这个点击操作呢?
答案肯定是有的,phpemail支持内嵌附件,然后用附件资源嵌入从而实现默认加载显示的效果
代码如下:
<?php
// 发邮件给用户
include_once($_SERVER["DOCUMENT_ROOT"] . '/PHPMailer/class.phpmailer.php');
$mail = new PHPMailer();
// 图片附件, 必须是本地资源, 路径基于当前所在的文件路径
$picArr = array(
'fb' => "image/icon-fb.png",
'in' => "image/icon-in.png",
'wc' => "image/icon-wc.png"
);
// 嵌入附件
foreach ($picArr as $k => $v) {
$mail->AddEmbeddedImage($v, $k); // 注意留意这个$k, 下面在img需要用到
}
// 邮件内容
$mail->isHTML(true);
$mail->CharSet = 'UTF-8';
$mail->From = "test";
$mail->FromName = 'test';
$mail->AddAddress("xx@qq.com");
$mail->AddCC("xx@qq.com");
$mail->Subject = "测试";
$mail->Body = "这里是测试在邮件中利用附件在内容中插入图片";
$mail->Body .= "<p>";
$mail->Body .= "<a href='xx'><img src='cid:fb'></a> "; // 这里只需要把嵌入附件时候标记的key写到这里就行了,格式:cid: $k
$mail->Body .= "<a href='xx'><img src='cid:in'></a> ";
$mail->Body .= "<a href='xx'><img src='cid:wc'></a> ";
$mail->Body .= "</p>";
$mail->send();
效果如下:
这样就完成了,关键是 AddEmbeddedImage 这个方法,把附件放进去,然后拿到放进 AddEmbeddedImage 中的key,使用固定语法cid: $k 就可以了
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。