Как использовать Mailgun (PHP) для пересылки вложенных изображений? - PullRequest
0 голосов
/ 30 октября 2019

Я использую PHP Mailgun SDK в качестве посредника для своих пользователей, предоставляя им возможность маскировать свой адрес электронной почты. К сожалению, я не могу понять, как прикрепить какие-либо встроенные изображения. Они отображаются как неработающие: https://i.imgur.com/lV9LihP.png

Mailgun имеет документацию , но она устарела и не предоставляет всей необходимой мне информации.

В документации сказано использоватьattachment параметр для вложений, и это работает, как и ожидалось: прикрепленные изображения добавляются в конец сообщения электронной почты и могут быть загружены как обычные вложения.

В нем также сказано использовать параметр inline для встроенные вложения . Для моих тестов я прикрепляю встроенные изображения через мой почтовый клиент (Thunderbird): https://i.imgur.com/7Y7vnmY.png

Когда я использую параметр inline, я получаю ту же битую ссылку, что и на изображении выше. Тем не менее, изображение НЕ добавляется в конец письма в качестве предварительного просмотра. Я все еще могу загрузить его, но это не та функция, которую я ищу, поскольку это не то, что пользователь хотел отправить.

Более того, даже если это сработало, насколько яМожно сказать, что нет никакого способа отличить встроенные вложения или обычные вложения. Как мне программно определить, какой параметр использовать?

Mailgun отправляет сообщения в мой файл 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 определит остальные
  • Присоединение изображений с использованием обоих параметров и замена «cid: part1 ...» на «cid: / tmp / phpy8JHpc"
  • Присоединение изображений с использованием обоих параметров и замена «cid: part1 ...» на «cid: google.png»
  • Присоединение изображений с использованием обоих параметров и замена «cid: part1 ..». "with" cid: /tmp/phpy8JHpc/google.png "

Как было сказано ранее, emAils отправить хорошо. Изображения прикрепляются, но не так, как я хочу. Я не получаю ошибок.

...