2012-04-03 6 views
8

にスペースを追加します。PHPのメール機能は、ランダムに私は、何か非常に単純なPHPスクリプトを持っているメッセージテキスト

もちろん
while ($condition){ 
    echo "<a href="thanks.php?id=".$id."> THANKS </a>"; 
} 

を、私は少しより多くのコードを持っているが、それは問題ではありません。このコードを作成したら、スクリプトはユーザーに電子メールを送信します。

INBOX

リンクはを除き、すべての単一の行で大丈夫ですLAST ONEは、リンクをこのように示しています

tha nks.php?id..... 

それはコードの間にスペースを追加します。

これはホットメールでのみ発生します。 Gmail、yahoo、その他すべての機能はうまく動作します。

+3

ホットメールのようなサウンドは、(半)リンクを難読化することによってユーザーを「保護」しています。唯一の状況であれば、それはあなたがやっていることだとは思わない。 - 編集:また、FYIW、あなたの構文は上記のコード(引用ミスマッチ)でオフですが、リンクが他の状況の90%で動作していると、私はあなたがこれを投稿するときに誤解しています。それ以外の場合は、アンカー内で '' 'をエスケープして、' '$ id'の後ろに' ''があることを確認してください) –

+0

ええ、私はこれを例として書いた、これは実際のコードではありません。一方、..もしそれがホットメールの問題なら、なぜそれがすべてのリンクに同じ "保護"をしないのです!それはちょうど最後のものに起こります!ホットメールは、私を狂わせさせるために丸薬を飲みたいです! – Andy

+0

トピックに関する別の良いディスカッション:http://www.jeremytunnell.com/posts/really-hairy-problem-with-seemingly-random-crlf-and-spaces-inserted-in-email – toto21

答えて

0

行が長すぎると、sendmailに文字が挿入されるのを見たことがあります。他のクライアントがそれをうまく処理しているので、ここには当てはまりませんが、hotmailの行の長さの制限があるのだろうかと思います。

は、この行を使用する:あなたはechoに改行を挿入した場合

それは私はこれが遅れている知っているが、私のために働いた代替ソリューションがあるすなわち

while ($condition){ 

    echo "<a href=\"thanks.php?id=".$id."\"> THANKS </a>\n"; 

} 
+0

さらに、それらはthanks.phpへのリンクを持つちょうど10サムネイルです.. 最初の9サムネイルは完璧です(ホットメールでさえも)問題は最後のものです..そしてURLはまったく同じ長さですそれら。 =( – Andy

11

、任意の違いを生むんそして

$message = chunk_split(base64_encode($message)); 

、これはあなたのヘッダ付加:BASE64を使用して、メッセージ全体をコード

$headers .= "Content-Transfer-Encoding: base64\r\n\r\n"; 

これは、メッセージがbase64でエンコードされていることをメールクライアントに通知します。

+1

これも私のために働いた –

+1

@ karancanありがとうございました、あなたの答えは素晴らしいです:) htmlの電子メールのリンケージではうんざりのスペースで問題があった - 彼らは行ってしまった。よくやった!! –

+0

私のために働いた、ありがとう男。乾杯。 – user3636476

10

カランカンの解答はおそらく働きますが、根本的な原因はホーボーが言っていたことです。 mail関数は、900文字ごとに改行を挿入します(私は思う)。だから$message .= "more text";の束であなたの$メッセージを構築しているなら、その行が900文字を超えるとこのエラーが発生します。スペースが断続的に見えるので混乱します。特にHTMLメッセージを作成する場合は、改行が完全に良心的な場所に表示されることがあります。

単純な解決策は、行末に\r\n\を追加することです。

興味深いことに、これらのフォームは仕事:

$message .= "<tr><td>1</td><td>2</td>\r\n"; 
$message .= '<tr><td>1</td><td>2</td>'."\r\n"; 

しかし、これはしていません:

$message .= '<tr><td>1</td><td>2</td>\r\n'; 

\r\nがそうでなければ、文字だけではなく、テキストに追加されます、二重引用符で囲む必要がありますキャリッジリターン/改行を作成します。

+1

これはSMTPサーバーではなく、PHPのメール機能ですか? PHPの場合 - > PHPバグが報告されていますか?私は何も見つけられませんでしたが、この振る舞いを変更する必要があります(つまり、この動作を省略するか、RFCが短い行を期待している場合は少なくとも通知する必要があります)。 –

+0

私はこれに遭遇してから2年経ちましたが、メール機能ではなくSMTPサーバである可能性が高いと思われます。 – Mordred

6

同じ問題に直面していて、これらのソリューションのほとんどを試してみましたが、うまくいきませんでした。メールの長さが長すぎると思われますが、900文字前後のスペースを追加するようです。だから、ワードラップを追加する以下の解決策が私のために働いた。

mail($ to、$ subject、wordwrap($ message)、$ headers);

+0

かなり簡単な解決策ですが、実際の内容のテキストを不要な '
'で埋めてしまう可能性があります。それがあなたにとって重要でない場合、または可変テキストのために '\ r \ n'を置く場所を保証できない場合、これは許容される解決策です。 – Mordred

関連する問題