Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用PHP发送带有内联附加图像的HTML电子邮件_Php_Email_Inline_Attachment_Html Email - Fatal编程技术网

如何使用PHP发送带有内联附加图像的HTML电子邮件

如何使用PHP发送带有内联附加图像的HTML电子邮件,php,email,inline,attachment,html-email,Php,Email,Inline,Attachment,Html Email,我有一个PHP脚本,它发送一封带有附加图像的HTML电子邮件。它工作得很好,但是,我无法将附件显示在电子邮件正文中的标记中。附加的文件名为postcard.png,服务器上的原始文件名为4e60348f83f2f.png。我尝试过以各种方式提供图像URL:cid:postcard.png,cid:4e60348f83f2f.png,postcard.png,以及4e60348f83f2f.png。什么都不管用 我认为我做错的关键部分在这里,因为这使它成为一个单独的附件,而不是我可以使用的内联附件

我有一个PHP脚本,它发送一封带有附加图像的HTML电子邮件。它工作得很好,但是,我无法将附件显示在电子邮件正文中的
标记中。附加的文件名为
postcard.png
,服务器上的原始文件名为
4e60348f83f2f.png
。我尝试过以各种方式提供图像URL:
cid:postcard.png
cid:4e60348f83f2f.png
postcard.png
,以及
4e60348f83f2f.png
。什么都不管用

我认为我做错的关键部分在这里,因为这使它成为一个单独的附件,而不是我可以使用的内联附件:

我曾尝试将其更改为使用CID,但我真的不知道如何做到这一点,这根本不起作用:


我建议使用PHPMailer,但既然你说你不想,我建议使用这个快速修复

将绝对URL放在img标记内,如果您发送HTML电子邮件,它将起作用

Content-Transfer-Encoding: base64
Content-Disposition: attachment;
    filename="$fname" // i.e.: "postcard.png"

我终于找到了答案,结果非常简单。是什么帮助我弄明白了,但我将在下面演示我需要完成的部分

首先,创建边界字符串和正确编码并分块的图像:

Content-Transfer-Encoding: base64
Content-ID: <$fname> // i.e.: postcard.png
在电子邮件的HTML部分中,图像的引用方式如下(使用边界字符串):


然后在HTML部分下方为内联附件创建电子邮件的另一部分,如下所示:

<img src="http://example.com/image.jpg"/>
--PHP相关-{$sep}
内容类型:图像/gif
内容传输编码:base64
内容ID:
{$inline}

…就是这样!比实现PHPmailer或任何其他库都容易,如果这就是您所做的全部。毫无疑问,对于更复杂的任务,您将需要这些库中的一个。

使用或。与从头开始构建MIME消息的过程不同,这两种方法都允许在线附件,而且完全没有任何痛苦。这并不是说不可能手动完成,而是使用Swiftmailer或PHPMailer会省去很多麻烦。-可能是@Marc B的复制品:我不知道,我用PHPMailer打过一次字,有点痛苦。我真的不想仅仅为了这一个脚本就包含一个像PHPMailer这样的大东西。如果我需要更多的电子邮件功能,我会使用PHPMailer,但我只需要在这里发送一封带有附件的电子邮件,而且我已经拥有的脚本非常接近。如果你正在滚动你自己的,adside从阅读RFC文档,你可以试着用你最喜欢的电子邮件程序做一个简单的例子,然后用文本编辑器打开原始电子邮件,看看它是如何处理的。(可能是“Content disposition:inline”)谢谢,但是我会在发送电子邮件后立即从服务器上删除图像,因此这不会起作用,因为许多电子邮件客户端不允许在电子邮件中进行热链接。使用此方法,图像将被阻止在各种电子邮件客户端中。根据此答案,我无法附加图像,我喜欢这样:
<img src="http://example.com/image.jpg"/>
// Create a boundary string.  It needs to be unique (not in the text) so ...
// We are going to use the sha1 algorithm to generate a 40 character string:
$sep = sha1(date('r', time()));

// Also now prepare our inline image - Also read, encode, split:
$inline = chunk_split(base64_encode(file_get_contents('figure.gif')));
<img src="cid:PHP-CID-{$sep}">
--PHP-related-{$sep}
Content-Type: image/gif
Content-Transfer-Encoding: base64
Content-ID: <PHP-CID-{$sep}>
{$inline}