2012-04-01 2 views
8

私はちょっとこのようになり、電子メールを送信するスクリプト持っている:それは徹底的にテストされたが、一部のユーザーは、私はOutlookユーザーを考えて、このように見えるURLを取得しています長いHTTPリンクを含むPHPメール()を送信するときに、どのようなコンテンツ転送エンコーディングを使用する必要がありますか?

$headers = "From: [email protected]\r\n"; 
$headers .= "Reply-To: [email protected]\r\n"; 
$headers .= "MIME-Version: 1.0\r\n"; 
$headers .= "Content-type: text/plain; charset=utf-8\r\n"; 
$headers .= "Content-Transfer-Encoding: 8bit"; 
$orgsubject = "A subject with some swedish characters like å, ä and ö"; 
$newsubject='=?UTF-8?B?'.base64_encode($orgsubject).'?='; 
$body = 'A lot of text. 

Some more text. 

A long URL: 
http://example.com/subpage/?id=1234&hash=23jh4lk2j3h4lkjh674598xzxlk2j34h&anotherhash=h2k3j4h23kh42kj34h2lk3'; 

を: http://example.com/subpage/?id=3D1234&hash=3D3D23jh4lk2j3h4lkjh674598xzxlk2j34h&anotherhash=3Dh2k3j4h23kh42kj34h2lk3 等しいです私の場合、URLを役に立たないようにするために、3Dの後に記号が表示されます。私はContent-Transfer-EncodingやContent-typeと何か関係があると思います。body64をbase64などにエンコードする必要がありますか?

更新

はちょうどこのフォーラムの投稿を見つけた:https://stackoverflow.com/a/7289434/513321 だから私は、コンテンツ転送エンコードを削除し、正常に動作するようですが、一方で私は、URLが「3Dに含まれる誤差を再現することができませんでした'テキスト、私はこれが動作することを確認することはできません。 Content-Transfer-Encodingを削除すると問題が解決するかどうかは誰にも分かりますか?

答えて

3

ご質問には言及しませんが、=3Dquoted printable転送エンコードのエスケープシーケンスです。 7ビットエンコーディングを使用して8ビットデータを安全に転送するために使用されます。

76列より長い行が好きではないメールサーバーが存在し、中間サーバーはメッセージヘッダーを更新せずにメッセージを管理して、観察された動作を引き起こす可能性があります。

5.3.0以来、あなたのメッセージをエンコードし、それに応じてContent-Transfer-Encodingヘッダーを設定するquoted_printable_encode()を使用することができます。明示的な転送エンコーディングを設定

Content-Transfer-Encoding: quoted-printable 

は良いあなたが採用すべき練習ではなく、あります素朴な "何とかそれは働く"アプローチ:)

関連する問題