Пожалуйста, извините мой php, но я использую Swiftmailer для отправки писем с веб-сайта клиентов. Они попросили добавить изображение или два в качестве подписи и т. Д. И поэтому смотрят на спецификацию swiftmailer здесь
http://swiftmailer.org/docs/messages.html
Они предлагают либо добавить встроенное изображение, подобное этому
$message->embed(Swift_Image::fromPath('http://site.tld/image here'))
или как это (в 2 этапа)
$cid = $message->embed(Swift_Image::fromPath('image here'));
затем в разделе тела электронной почты добавьте
<img src="' . $cid . '" alt="Image" />'
Оба этапа ive попытались, но безрезультатно. Когда я нажимаю кнопку отправки электронной почты, я получаю эту ошибку, которую я не знаю, что с этим делать.
Call to a member function embed() on a non-object in /home/content/78/5152878/html/4testing/erase/ask-doc-proc2.php on line 89
Единственное, что я добавил к моему уже рабочему коду и электронной почте, – это код изображения непосредственно из примера на страницах документов. Эта ошибка, очевидно, запрещает отправку электронной почты. если я удалю его, он отправит письма в порядке. Поскольку мне нужно добавить изображение к этому,
Любая помощь приветствуется. спасибо
edit: это часть, в которой построено электронное письмо и отправлено $ cid = $ message-> embed (Swift_EmbeddedFile :: fromPath (' http://img.ruphp.com/php/pic.jpg '));
->setTo( $docEmail) ->setBody("Hello" . "\r\n\r\n" . $fullName . " has visited MyForeCYTE.com. Upon their visit they have requested to learn more about the test. \r\n\r\n" . "Please visit www.ClarityWomensHealth.com to find out more about The ForeCYTE Breast Health Test, or call our customer support line at 1 (877) 722-6339. \r\n\r\n" . "We look forward to hearing from you. \r\n\r\n" . "Thank You," , 'text/plain') ->addPart("Hello" . ",</b><br/><br/>" . "<b>" . $fullName . "</b> has visited www.MyForeCYTE.com. Upon their visit they have requested to learn more about the test. <br/>" . "Please visit www.ClarityWomensHealth.com to find out more about The ForeCYTE Breast Health Test, or call our customer support line at 1 (877) 722-6339.<br/> " . "We look forward to hearing from you. <br/><br/><br/>" . "<img src='" . $cid. "' alt='pic'/>" . "Thank you " , 'text/html') ;
В конце концов, я нашел альтернативное решение. Swiftmailer позволяет использовать 2 метода для выполнения одного и того же.
одна – функция embed ()
а другой – функция attach ()
поэтому в код выше я удалил «embed ()», так как он не работал для меня и добавил эти 2 строки ниже, и он работает
->attach(Swift_Attachment::fromPath('path to image here.jpg') ->setDisposition('inline'));
и он работал на 100%
Ни один из ответов не работал для меня. Мне пришлось включать встроенные изображения, используя CID. Что я должен был сделать, чтобы он работал:
$attachment = Swift_Image::newInstance($data, $filename, $mimeType) ->setDisposition('inline'); $cid = $message->embed($attachment); // Generates "cid:something"
Важная часть – использование класса Swift_Image. Тогда изображение в html должно быть:
<img src="cid:something" ... />
Я думаю, что это решение работает без какого-либо взлома с swiftmailer (версия 5.4.2). Именно так написано в документации.
Не забудьте проверить несколько почтовых клиентов (gmail, thunderbird, apple mail, веб-клиенты …), если работают встроенные изображения. Например, используя Swift_Attachment, встроенные изображения отображаются в gmail, но не у некоторых веб-клиентов. Используя Swift_Image, он работал везде.
Принятый ответ не работает (версия протестирована: 5.4.2). (Мое работает, но может быть усовершенствовано)
Вместо этого, заглядывая в «Оригинал» (Gmail: Показать оригинал), я обнаружил, что swiftmailer не добавляет 2 вложения, а именно:
Content-ID: <ABC123> X-Attachment-Id: ABC123
ABC123 – это цид, который мы должны положить в тело, где мы хотим, чтобы строка была показана:
Итак, благодаря этому вопросу : я нашел способ исправить это для swiftmailer (это даже против документации swiftmailer, но она работает, в то время как у них нет)
это окончательный (уродливый) код:
$attachment = Swift_Attachment::fromPath('image.jpg')->setDisposition('inline'); $attachment->getHeaders()->addTextHeader('Content-ID', '<ABC123>'); $attachment->getHeaders()->addTextHeader('X-Attachment-Id', 'ABC123'); $cid = $message->embed($attachment); $img = '<img src="cid:ABC123"/>'; $html = " <html> <head> </head> <body> $img </body> </html> "; $message->setBody($html, 'text/html');