전자 메일 보내기 및 추적 응용 프로그램에서 작업하고 있지만 지금은 알 수없는 문제가 있습니다. 내 이메일에 추적 이미지가 필요하지만 이상한 행동을하고 있습니다. 현재 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