首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用邮箱(PHP)转发图像附件?

如何使用邮箱(PHP)转发图像附件?
EN

Stack Overflow用户
提问于 2019-10-30 19:25:26
回答 1查看 633关注 0票数 0

我使用PHP Mailgun SDK作为我的用户的中间人,让他们可以屏蔽他们的电子邮件地址。不幸的是,我不知道如何附加任何内联图像。它们以破碎的形式出现:https://i.imgur.com/lV9LihP.png

梅尔贡有文档,但它已经过时了,没有提供我需要的所有信息。

文档中说要对附件使用attachment参数,这与预期的一样:附加的图像被附加到电子邮件的末尾,并且可以作为常规附件下载。

它还说要为inline使用内联附件参数。对于我的测试,我通过我的电子邮件客户端(雷鸟):https://i.imgur.com/7Y7vnmY.png附加内联映像。

当我使用inline参数时,我得到的链接与上面的图像相同。但是,该图像不作为预览添加到电子邮件的末尾。我仍然可以下载它,但这不是我想要的功能,因为这不是用户想要发送的功能。

此外,即使是这样工作,据我所知,没有办法区分附件是内联的还是常规的附件。如何以编程方式检测要使用的参数?

邮件发送到我的webhook.php文件,该文件处理并发送电子邮件。我要处理整个_POST数组,它包含以下相关信息:

代码语言:javascript
复制
_POST Array
(
    ...
    [attachment-count] => 2
    [content-id-map] => {
        "<part1.17612FDA.F9617321@example.com>": "attachment-1",
         "<part2.4AD638E8.B19C97BE@example.com>": "attachment-2"}
    ...
)

我还可以访问_FILES数组,这个数组在本例中如下所示:

代码语言:javascript
复制
_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
        )

)

下面是我用来创建文件数组的代码:

代码语言:javascript
复制
$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 )
    )
)

以及实际发送的代码:

代码语言:javascript
复制
$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,
]);

下面是当我查看源代码(为可读性格式化后)时图像的样子:

代码语言:javascript
复制
<img
    moz-do-not-send="false"
    src="cid:part1.17612FDA.F9617321@example.com"
    alt="fdsa"
    width="380"
    height="160">

我试过的是:

  • 定期附加图像,同时使用inlineattachments参数,然后发送电子邮件,希望Mailgun能找到剩下的。
  • 使用这两个参数附加图像,并替换“cid:part1 1.”与"cid:/tmp/phpy8JHpc“连用
  • 使用这两个参数附加图像,并替换“cid:part1 1.”加上"cid:google.png“
  • 使用这两个参数附加图像,并替换“cid:part1 1.”带有"cid:/tmp/phpy8JHpc/google.png“

如前所述,电子邮件发送罚款。图像被附加,但不是我想要的方式。我没有错误。

EN

回答 1

Stack Overflow用户

发布于 2020-06-09 13:36:50

这周我讨论了一个非常类似的问题。

我成功地修复了它,首先确定哪些文件(实际上)是行映像,哪些不是。我使用了一个正则表达式来在消息体中找到标记(例如。cid:1234)基于内容id地图。

这些(内联图像),我已经附加到“内联”属性,要发送到Mailgun。在消息正文中没有找到CID的所有其他文件,我已经附加到“附件”属性中。

棘手的部分(至少对我来说)是,只有当附加到“内联”的文件不使用它们的(实际)名称(例如my-file.jpg)作为“文件名”时,它才能工作,而是使用它们的CID。

请注意,文件名应该在没有“<”和“>”的情况下给出!

我希望这能帮到你!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58632400

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档