13

私のphpを許してください、しかし、私はSwiftmailerを使ってクライアントのウェブサイトからメールを送信しています。彼らは署名などとして画像を1つか2つ追加するように要求したので、ここで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" />'

両方の手順を試しましたが、役に立ちませんでした。メールの送信ボタンを押すと、このエラーが表示されますが、どうすればよいかわかりません。

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

既に動作しているコードと電子メールに追加した唯一のものは、ドキュメント ページの例から直接取得した画像コードでした。このエラーにより、明らかに電子メールが送信されません。削除すると、メールが正常に送信されます。これに画像を追加する必要があるため、

どんな助けでも大歓迎です。ありがとうございました

編集: これは、電子メールが作成されて送信される部分です $cid= $message->embed(Swift_EmbeddedFile::fromPath(' http://myforecyte.com/dev/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')
;
4

5 に答える 5

10

走り回った後、別の解決策を見つけました。Swiftmailer では、2 つの方法で同じことを実行できます。

1つはembed()関数です

もう1つは attach() 関数です

上記のコードでは、「embed()」が機能していなかったので削除し、以下の2行を追加すると機能します

    ->attach(Swift_Attachment::fromPath('path to image here.jpg')  
->setDisposition('inline'));

そしてそれは100%働いた

于 2013-03-21T03:34:32.720 に答える
8

答えはどれも私にとって本当に役に立ちませんでした。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 (ver. 5.4.2) でハッキングをしなくても機能すると思います。それはまさにドキュメントが言う方法です。

インライン イメージが機能する場合は、複数の電子メール クライアント (gmail、thunderbird、Apple メール、Web クライアントなど) をテストすることを忘れないでください。たとえば、Swift_Attachment を使用すると、インライン画像が gmail で表示されましたが、一部の Web クライアントでは表示されませんでした。Swift_Image を使用すると、どこでも機能しました。

于 2016-06-09T08:31:48.987 に答える
6

受け入れられた回答は機能しません (テスト済みのバージョン: 5.4.2)。(鉱山は機能しますが、完成する可能性があります)

代わりに、「オリジナル」(Gmail: オリジナルを表示) の中を見ると、swiftmailer が添付ファイルに 2 つのヘッダーを追加していないことがわかりました。

Content-ID: <ABC123>
X-Attachment-Id: ABC123

ABC123 は、インラインを表示するボディに入れる必要がある cid です。

だから、この質問のおかげで:私は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');
于 2016-05-19T23:54:17.543 に答える