4

在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>&nbsp;";
$mail->Body .= "<a href='xx'><img src='{$picArr['in']}'></a>&nbsp;";
$mail->Body .= "<a href='xx'><img src='{$picArr['wc']}'></a>&nbsp;";
$mail->Body .= "</p>";
$mail->send();

但是出于安全考虑邮箱平台一般默认不会显示图片,如下图QQ邮箱所示,需要我们手动点击显示图片
image.png

有没有方法不做这个点击操作呢?
答案肯定是有的,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>&nbsp;"; // 这里只需要把嵌入附件时候标记的key写到这里就行了,格式:cid: $k
$mail->Body .= "<a href='xx'><img src='cid:in'></a>&nbsp;";
$mail->Body .= "<a href='xx'><img src='cid:wc'></a>&nbsp;";
$mail->Body .= "</p>";
$mail->send();

效果如下:
image.png

这样就完成了,关键是 AddEmbeddedImage 这个方法,把附件放进去,然后拿到放进 AddEmbeddedImage 中的key,使用固定语法cid: $k 就可以了


时光悠悠
27 声望0 粉丝