3

以下のコードを使用して、本文にbase64の画像を含むメールをPHPで送信しようとしていますが、画像が表示されません... URLに変更すると機能しますが、base64では機能しません.. .新しいページでのみbase64をテストし、機能しました<img src=base64>...何が欠けていますか??

<?php
    // recipients
    $to  = $_POST['email'];

    // subject
    $subject = 'Test';

    // message
    $message = '
        <html>
        <head>
         <title>Test</title>
        </head>
        <body>

            <img src="'.$_POST['imageFromOtherPage'].'"/>

        </body>
        </html>
        ';

    // To send HTML mail, the Content-type header must be set
    $headers  = 'MIME-Version: 1.0' . "\r\n";
    $headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";

    // Mail it
    mail($to, $subject, $message, $headers);
 ?>

これが私のbase64イメージの例です: http://jsfiddle.net/28nP4/

4

5 に答える 5

1

私は同じ問題を抱えており、最終的に解決しました。役に立つかもしれません: SwiftMailer を使用できますが、新しい Image TextHeader 'Content-Location' を追加する必要があります。コードは次のとおりです。

$message = \Swift_Message::newInstance()->setSubject($subject)->setFrom($fromEmail, 'Name')->setTo($toEmail)->setBcc($bccEmails);
/*get uniqueID from cid:uniqueID */
$imageID = explode(':', $message->embed(\Swift_Image::fromPath('pathToTheImage')->setContentType('image/png')))[1];

/*Add Content-Location to image header*/
/** @var \Swift_Image $image */
$image = $message->getChildren()[0];
$image->getHeaders()->addTextHeader('Content-Location', $imageID);
$message->setBody('here you will have some html with <img src=$imageID alt="Embed Image">', 'text/html');

$mailer->send($message);
于 2014-12-31T00:42:32.510 に答える
0
<img src="'.$_POST['imageFromOtherPage'].'"/>

data:image/png;base64, base64 でエンコードされたdata:URIを形成するには、POST を で開始する必要があります。

しかし、これを修正したとしても、メッセージを表示している電子メール クライアントがこの方法をまったくサポートしていない可能性が十分にあります。data:URI は比較的新しい現象です - 少なくとも電子メール クライアントの年代順では、そのほとんどはまだ CSS と呼ばれる技術があることを発見する過程にあります。メール内の画像に対して試行錯誤された方法は、画像をインライン添付ファイルとして埋め込むことです。

ライブラリに依存しないいくつかのアプローチを次に示します

ただし、Swiftmailer のようなライブラリを使用すると、多くの手間が省ける場合があります。該当する Swiftmailer のドキュメントは次のとおりです。

于 2013-09-27T02:21:30.530 に答える