2016-08-29 2 views
0

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

아마도 Outlook은 이미지에 대해 끝나는'.php' 파일을 좋아하지 않을 것입니다. 확실하지 않지만, 나는 Outlook을 사용하지 않습니다. – tkausl

+0

내가 메시지를 인코딩하기 전에 작동했기 때문에 Outlook에서 PHP가 이미지를 다시 제공 할 수 있음을 알았습니다. – Austin

답변

0

이런 경우에 누군가가 내가 알아 낸 이런 일에 실행 모든 것이 귀결 이메일 클라이언트가 URL을 인코딩 방법 : 여기

내가 메시지를 보내는 데 사용하고 PHP 코드입니다. 내 원본 코드에서 내 이미지 src 특성 내에서 2 개의 매개 변수가있는 URL을 사용하고 있습니다. 이처럼 :

http://www.my-web-site.com/page.php?pram1=something&pram2=something 

전망은 변경 얻을 URL을 처리 할 때 : &amp;

로 변환하지 않고

http://www.my-web-site.com/page.php?pram1=something&amp;pram2=something 

다른 이메일 클라이언트가 & 기호에게 그것이 길을 떠날 수있을만큼 똑똑를

라이브 코드에서 나는 $_GET url 매개 변수를 모두 처리해야했습니다. 내 스크립트가 두 매개 변수를 처리 할 수없는 경우 이미지를 다시 전송할 줄까지 도달하지 못합니다. 내 page.php 파일에이 코드를 추가했다 가지고 올 수있는 가장 좋은 해결 방법 :

$pram1 = $_GET['pram1']; 
$pram2 = $_GET['pram2']; 

if(!isset($pram2)){ 
    $pram2 = $_GET['amp;pram2']; 
} 

// now regardless of the email client both parameters contain a value to process 

if((isset($pram1)) && (isset($pram2))){ 
    header("Content-Type: image/png"); 
    readfile("full-server-path-to-image.png"); 
} 

내가 알고는 매우 간단 소리,하지만 난 너무 오래 방법을이 이상 내 머리를 긁적했다. 원래 메시지가 전송되기 전에 인코딩 된 메시지와 관련이 있다고 확신했습니다. 내 코드를 변경하는 Outlook이 될 것이라고 생각하지 마십시오. 두 번째로 Microsoft는 일을 쉽게하기를 결코 좋아하지 않지만 ..... 결코 오래 가지 않을 것입니다 ... lol

관련 문제