電子メールの送信と追跡のアプリケーションで作業していますが、私は把握できない問題に遭遇しています。私は私の電子メールの追跡イメージが私に欲しいが、私はいくつかの奇妙な振る舞いをしている。現在、私はbase64でエンコードされた電子メールを送信しています。 HTMLメッセージの本文では、自分のサーバー上のPHPファイルへのリンクを持つHTMLイメージタグを使用しています。このファイルは、次のPHPコードを使用して画像を返します。PHPを使用してBase64でエンコードされた電子メールで画像を返す
header("Content-Type: image/png");
readfile("full-server-path-to-image.png");
これは奇妙なところです。 Outlook電子メールクライアントでメッセージを表示すると、イメージは表示されません(赤い "X"イメージアイコンが表示されます)。他の正常にリンクされた画像はうまく表示されます。 Gmailで同じメッセージを表示すると、すべての画像を見ることができます。画像が一部の電子メールクライアントでうまく機能するが、それらのすべてではないというのは本当に奇妙なことだ。
私はこの問題が、base64でメッセージのエンコードに変更したときに気付きました。メッセージのエンコードを開始する前に、どの電子メールクライアントでもすべての画像を表示できました。私は、これはコンテンツエンコーディングタイプと関係があると私に言っていますが、どうやって修正するのか分かりません。どんな助けもありがとう!
$myHTMLmessage = chunk_split(base64_encode('
<html><head></head><body>
<img src="https://www.my-web-site.com/openTrack.php?t={trackerid}"></a>
</body></html>'));
$boundary = uniqid('np');
$to = "[email protected]"
$headers = "MIME-Version: 1.0\r\n";
$headers .= "From: [email protected]\r\n";
$headers .= "Content-Type: multipart/alternative;boundary=" . $boundary . "\r\n";
$message = "This is a MIME encoded message.";
$message .= "\r\n\r\n--" . $boundary . "\r\n";
$message .= "Content-Type: text/plain;charset=UTF-8\r\n";
$message .= "Content-Transfer-Encoding: base64\r\n\r\n";
//Plain text body
$message .= "some plain text";
$message .= "\r\n\r\n--" . $boundary . "\r\n";
$message .= "Content-Type: text/html;charset=UTF-8\r\n";
$message .= "Content-Transfer-Encoding: base64\r\n\r\n";
//Html body
$message .= $myHTMLmessage;
$message .= "\r\n\r\n--" . $boundary . "--";
mail($to,$subject,$message,$headers);
Outlookは画像のために終わる '.php'ファイルが好きではないかもしれません。確かに、私はOutlookを使用していません。 – tkausl
私はOutlookがphpがイメージを返すことができることを知っているので、私はメッセージをエンコードする前にそれは働いた。 – Austin