我使用PHP Mailgun SDK作为我的用户的中间人,让他们可以屏蔽他们的电子邮件地址。不幸的是,我不知道如何附加任何内联图像。它们以破碎的形式出现:https://i.imgur.com/lV9LihP.png
梅尔贡有文档,但它已经过时了,没有提供我需要的所有信息。
文档中说要对附件使用attachment参数,这与预期的一样:附加的图像被附加到电子邮件的末尾,并且可以作为常规附件下载。
它还说要为inline使用内联附件参数。对于我的测试,我通过我的电子邮件客户端(雷鸟):https://i.imgur.com/7Y7vnmY.png附加内联映像。
当我使用inline参数时,我得到的链接与上面的图像相同。但是,该图像不作为预览添加到电子邮件的末尾。我仍然可以下载它,但这不是我想要的功能,因为这不是用户想要发送的功能。
此外,即使是这样工作,据我所知,没有办法区分附件是内联的还是常规的附件。如何以编程方式检测要使用的参数?
邮件发送到我的webhook.php文件,该文件处理并发送电子邮件。我要处理整个_POST数组,它包含以下相关信息:
_POST Array
(
...
[attachment-count] => 2
[content-id-map] => {
"<part1.17612FDA.F9617321@example.com>": "attachment-1",
"<part2.4AD638E8.B19C97BE@example.com>": "attachment-2"}
...
)我还可以访问_FILES数组,这个数组在本例中如下所示:
_FILES Array
(
[attachment-1] => Array
(
[name] => google.png
[type] => image/png
[tmp_name] => /tmp/phpy8JHpc
[error] => 0
[size] => 118408
)
[attachment-2] => Array
(
[name] => logo.png
[type] => image/png
[tmp_name] => /tmp/phpWcT38i
[error] => 0
[size] => 62404
)
)下面是我用来创建文件数组的代码:
$files_array = [];
foreach($content_map as $cid => $attachment) {
$file = $_FILES[$attachment];
// Create attachment info to add to $files_array
$arr = [];
$arr["filePath"] = $file["tmp_name"];
$arr["filename"] = $file["name"];
$files_array[] = $arr;
}
// Resulting format example:
Array (
[0] => Array (
[filePath] => /tmp/phpy8JHpc
[filename] => google.png
)
[1] => Array (
[filePath] => /tmp/phpWcT38i
[filename] => logo.png )
)
)以及实际发送的代码:
$this->mailgun->messages()->send($domain, [
'from' => $email_from,
'to' => $email_to,
'subject' => $subject,
'html' => $message,
'h:Return-Path' => $email_from,
'h:Reply-To' => $email_from,
// AND EITHER OF THE FOLLOWING:
'attachment' => $files_array,
'inline' => $files_array,
]);下面是当我查看源代码(为可读性格式化后)时图像的样子:
<img
moz-do-not-send="false"
src="cid:part1.17612FDA.F9617321@example.com"
alt="fdsa"
width="380"
height="160">我试过的是:
inline和attachments参数,然后发送电子邮件,希望Mailgun能找到剩下的。如前所述,电子邮件发送罚款。图像被附加,但不是我想要的方式。我没有错误。
发布于 2020-06-09 13:36:50
这周我讨论了一个非常类似的问题。
我成功地修复了它,首先确定哪些文件(实际上)是行映像,哪些不是。我使用了一个正则表达式来在消息体中找到标记(例如。cid:1234)基于内容id地图。
这些(内联图像),我已经附加到“内联”属性,要发送到Mailgun。在消息正文中没有找到CID的所有其他文件,我已经附加到“附件”属性中。
棘手的部分(至少对我来说)是,只有当附加到“内联”的文件不使用它们的(实际)名称(例如my-file.jpg)作为“文件名”时,它才能工作,而是使用它们的CID。
请注意,文件名应该在没有“<”和“>”的情况下给出!
我希望这能帮到你!
https://stackoverflow.com/questions/58632400
复制相似问题