【问题标题】:Send HTML email with relative path Image in PHPMailer [duplicate]在PHPMailer中发送带有相对路径图像的HTML电子邮件[重复]
【发布时间】:2022-01-26 09:11:10
【问题描述】:

我想发送一些时事通讯,我编写了一封 HTML 电子邮件,中间有一张图片。 如果我使用图像的绝对路径,如果我在服务器中替换该图像,旧电子邮件也会得到更新(因为它们是对绝对路径的引用)。相反,我想要一个相对路径之类的东西,或者以某种方式将图像嵌入到电子邮件的那部分(而不是作为附件),这样电子邮件是静态的,即使我在下个月替换该图像,它也不会影响.

我想为每个月保留相同的文件名,以便我可以简单地用另一个具有相同名称的图像替换图像并使用 PHPMailer 重新发送电子邮件。

另外,如果我嵌入图像而不是添加完整路径,它会更安全,因为我不希望任何人通过链接访问图像,只有当他们收到电子邮件时。如果我给他们完整的路径,某人实际上可以分发图像,他们每个月都会获得免费图像,因为我会在同一个 URL 中更新它。

是否有任何解决方法或解决方案?

【问题讨论】:

  • If I give them the full path someone could actually distribute the image and they would get free image every month... 嵌入图片也没有什么不同,人们仍然可以复制它
  • 我特别担心引用完整路径意味着如果我更改该图像,所有旧电子邮件也会得到更新
  • 好吧,我同意这是主要问题,我给你的链接应该删除那个场景。
  • @ADyson 该链接提供使用 CID 但如果您检查对 CID 的支持,实际上并没有那么多
  • 那是您的选择。要么这样,要么不要每周在您的电子邮件中重复使用相同的 URL - 只需在每封新电子邮件中创建一个带有新 URL 的新图像,然后以前的不受影响

标签: php html email phpmailer html-email


【解决方案1】:

你写道: “或者以某种方式将图像嵌入到电子邮件的该部分(而不是作为附件),以便电子邮件是静态的,即使我在下个月更换该图像,它也不会影响。”

如果您不想将它作为附件嵌入并链接到它,让我们将图像嵌入到邮件正文中而不带附件。

首先获取图片的base64字符串:

$img=file_get_contents("some_image.jpg");
echo base64_encode($img);

您将看到图像的 base64 编码字符串,例如“QSkZJRgABAgEAYABgA....”, 只需将该字符串放入您的电子邮件正文中:

$mail_body="
<html>
<head>
</head>
<body>

bla bla bla

<img src="data:image/jpeg;base64,QSkZJRgABAgEAYABgA....." />

bla bla bla

</body>
</html>";

如果您使用 'phpmailer' 发送电子邮件,请不要忘记在 phpmailer 中添加以下参数:

$mail->Body = $mail_body;
$mail->IsHTML(true);

【讨论】:

    猜你喜欢
    • 2017-02-23
    • 2018-09-26
    • 2019-04-16
    • 2014-05-31
    • 1970-01-01
    • 2014-07-04
    • 2012-04-07
    • 2013-11-11
    • 2011-06-08
    相关资源
    最近更新 更多