2016-07-12 12 views
1

セットアップに変換されている等しいPHPは、HTMLは、電子メールは - ...メールで符号が異なる文字

私は通常の方法で、PHPを経由してメールを送信しています...

C:以下の内容を設定してコードブロック0

mail('', $subject, $message, $headers); 

...ブロック1

$boundary = uniqid('np'); 
$message = ''; 

$subject = 'Email Subject'; 

$headers = "MIME-Version: 1.0\r\n"; 
$headers .= "From: SURL <[email protected]>\r\n"; 
$headers .= "To: ".$email."\r\n"; 

$headers .= "Content-Type: multipart/alternative;boundary=" . $boundary . "\r\n"; 

// Plain Text 
$message .= "Content-Type: text/plain; charset=utf-8\r\n"; 
$message .= "Content-Transfer-Encoding: 7bit\r\n\r\n"; 

$message .= 'Hi, you handsome SOB!! 
      \n\n 
      We have ... 
      /n/n     
      And ... 
      \n\n 
      http://someurl.com/.../.../?a=' . $var1 . '&b=' . $var2; 

$message .= "\r\n\r\n--" . $boundary . "\r\n"; 

// HTML 
$message .= "Content-Type: text/html; charset=utf-8\r\n"; 
$message .= "Content-Transfer-Encoding: quoted-printable\r\n\r\n"; 

$message .= '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 

      <html xmlns="http://www.w3.org/1999/xhtml"> 

      <head> 

      <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 

      <title>Some Title</title> 

      <style type="text/css"> 
       ... Lots of styles... 
      </style> 

      </head> 
      <body> 

      <div class="message_container"> 
       <div class="message_logo"></div> 

       <div class="message_leading_line"> 
       Hi, you handsome SOB!! 
       </div> <!-- end message_leading_line --> 

       <div class="message_top_content"> 
       We have ... 
       <br/> 
       And ... 
       <a href="http://someurl.com/.../.../?a=' . $var1 . '&b=' . $var2 . '" >visit this link</a>. 
       </div> <!-- end message_top_content --> 

       <div class="message_bottom_content"> 
       If link doesn\'t work, copy and paste... 
       <pre>http://someurl.com/.../.../?a=' . $var1 . '&b=' . $var2 . '</pre> 
       </div> <!-- end message_bottom_content --> 

      </div> <!-- end message_container --> 

      </body> 
      </html>'; 

$message .= "\r\n\r\n--" . $boundary . "--"; 

これはすべて正常に動作します。電子メールは問題なく送信されます。電子メールを表示するには、適切なスタイルが設定されている必要があります。動的に追加されたすべてのコンテンツが含まれます。

行動はこれまで...

は、私がこれまでに多くのテストケースを試した、すべてが正確にインデントとして送られてきました。スタイリングとすべて。

そのような成功した場合は、持っていた:

コードブロック3-1、3-2

$var1 = '4pD9051LsVtQu96pLBH41019v28T0o4Z2I3U6urs'; 
$var2 = 'verPkBE415i447V6R9o'; 

を...電子メール内のリンクだったように:

http://someurl.com/.../.../?a=4pD9051LsVtQu96pLBH41019v28T0o4Z2I3U6urs&b=verPkBE415i447V6R9o 

電子メールが正しく送信され、リンクが正しく表示され、リンクが機能しました(クリックしてコピー/貼り付け)。完璧!

号...最新のテストのための

コードブロック4-1、4-2

$var1 = '73jbzUN90j27ME5N6W4jh24o992V91m3R632Hlu0'; 
$var2 = 'avr1owgJAAB3h4l1brw'; 

...リンクするように:

http://someurl.com/.../.../?a=73jbzUN90j27ME5N6W4jh24o992V91m3R632Hlu0&b= avr1owgJAAB3h4l1brw 

Th時間は、電子メールが送信されました... 正しく?それは明白な問題なしで送られた。一見すると、すべてがそうであったようだった。すべてのスタイリングはそれがあったはずだったが、すべてのコンテンツが必要な場所にあった。

注:Gmailのバージョンが表示されるマークアップの全てを除去し、プレーンテキストとして提示して、後者のバージョンでした。それでも間違ったURLが提示されました。

しかし、精密検査時に、電子メールクライアントに表示されたリンク(AppleのMailとGmailの、両方の別々のアカウントを)した

http://someurl.com/.../.../?asjbzUN90j27ME5N6W4jh24o992V91m3R632Hlu0&b=ver1owgJAAB3h4l1brw 

違いはすぐに疑問符を以下れます。?a=73jbは、代わりに?asjbです。リンクをクリックしても機能しないし、コピーして貼り付けることもできない。明白な理由のために - そう!

The Quirk ...?

ソースと同じ電子メールを表示する場合、奇数のもの(表示 - >メッセージ - >生のソース)、リンクは正確に彼らがあるべきとしている...

生ソース1

To: 
Subject: Email Subject 
X-PHP-Originating-Script: 2181:email.php 
MIME-Version: 1.0 
From: SURL <[email protected]> 
To: [email protected] 
Content-Type: multipart/alternative;boundary=np57849efa2a13b 
X-Identified-User: {:box895.bluehost.com:...:...e.com} {sentby:program running on server} 

Content-Type: text/plain; charset=utf-8 
Content-Transfer-Encoding: 7bit 

Hi, you handsome SOB!! 
\n\n 
We have ... 
/n/n     
And ... 
\n\n 
http://someurl.com/.../.../?a=73jbzUN90j27ME5N6W4jh24o992V91m3R632Hlu0&b=avr1owgJAAB3h4l1brw 

--np57849efa2a13b 
Content-Type: text/html; charset=utf-8 
Content-Transfer-Encoding: quoted-printable 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 

<head> 

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 

<title>Some Title</title> 

<style type="text/css"> 
... Lots of styles... 
</style> 

</head> 
<body> 

    <div class="message_container"> 
    <div class="message_logo"></div> 

    <div class="message_leading_line"> 
     Hi, you handsome SOB!! 
    </div> <!-- end message_leading_line --> 

    <div class="message_top_content"> 
     We have ... 
     <br/> 
     And ... 
     <a href="http://someurl.com/.../.../?a=73jbzUN90j27ME5N6W4jh24o992V91m3R632Hlu0&b=avr1owgJAAB3h4l1brw" >visit this link</a>. 
    </div> <!-- end message_top_content --> 

    <div class="message_bottom_content"> 
     If link doesn\'t work, copy and paste... 
     <pre>http://someurl.com/.../.../?a=73jbzUN90j27ME5N6W4jh24o992V91m3R632Hlu0&b=avr1owgJAAB3h4l1brw</pre> 
    </div> <!-- end message_bottom_content --> 

    </div> <!-- end message_container --> 

</body> 
</html> 

--np57849efa2a13b-- 

何が起こっているのですか? のデータはと表示されますが、非常に特殊なケースではすべてのcattywampusが表示されています。 =73sに変換されるのはなぜですか(または、おそらくa=73as ...)ですか?

ASCII tablesHTML Codesをチェックしました。どちらの場合でも、73に関連する唯一のものは大文字「i」です。

EDIT 1

は、私はすぐにこの質問を投稿した後This HTML URL Encoding Referenceつまずくだろうことを知っていないでしょう。

%73には、sが関連付けられています。

しかし、私はまだ=73...がどのように%73...になり、その後s...になっているのかよく分かりません。確かにutf-8と関係しているようです。

は確かに私は電子メールを送信する最初の仲間じゃない、方法がなければならない...

EDIT 2 - SOLUTION!

解決方法や説明が長すぎたため、回答として投稿しました。

答えて

関連する問題