2011-07-04 19 views
1

私には奇妙なことが起こっています。私は、mail()関数を使用してHTMLメールを送信しようとしていますが、ここで運がありません。コードの一部を文字通りコピー&ペーストしても、機能しません。私は間違って何をしていますか?PHPメールを使用してHTMLメールを送信できませんでした。

 $message = "<html><body>"; 
     $message .= "<table rules='all' style='border-color: #666;' cellpadding='10'>"; 
     $message .= "<tr style='background: #eee;'><td><strong>Name:</strong> </td></tr>"; 
     $message .= "<tr><td><strong>Email:</strong> </td></tr>"; 
     $message .= "</table>"; 
     $message .= "</body></html>";  

     $to = '[email protected]'; 

     $subject = 'Website Change Reqest'; 

     $headers = "From: " . $email . "\r\n"; 
     $headers .= "Reply-To: ". $email . "\r\n"; 
     $headers .= "MIME-Version: 1.0\r\n"; 
     $headers .= "Content-Type: text/html; charset=ISO-8859-1\r\n"; 

     if (mail($to, $subject, $message, $headers)) { 
      echo 'Your message has been sent.'; 
     } else { 
      echo 'There was a problem sending the email.'; 
     } 

そして、これは私の電子メールが...どのように見えるかです::ここで私が使用したコードの一部です

Reply-To: [email protected] 

MIME-Version: 1.0 

Content-Type: text/html; charset=ISO-8859-1 
Message-Id: <[email protected]> 
Date: Mon, 4 Jul 2011 01:45:51 +0200 (CEST) 

<html><body><table rules="all" style="border-color: #666;" cellpadding="10"><tr style='background: #eee;'><td><strong>Name:</strong> </td></tr><tr><td><strong>Email:</strong> </td></tr><tr><td><strong>Type of Change:</strong> </td></tr><tr><td><strong>Urgency:</strong> </td></tr><tr><td><strong>URL To Change (main):</strong> </td></tr><tr><td><strong>NEW Content:</strong> </td></tr></table></body></html> 

は私が間違って何をしますか?

+0

あなたは、オペレーティングシステムを使用しないPHPでHTMLメールを送信することに役立ちリンクです? –

+0

Mac OS X 10.7と私の電子メールクライアントはSparrowです – Michiel

答えて

9

変数$emailがどこに設定されているかわかりませんが、$email変数の最後に余分な改行がある可能性があります。これは、From:ヘッダーの後とメッセージの本文の開始とヘッダーの完了を通知するReply-to:の前に2つの改行を入れるという効果があります。

試してみてください。

$email = trim($email); 

メッセージを構築する前に。 Reply-toヘッダーの後に余分な改行があるように見えるので、私のケースは余分な休憩のためにさらに$emailでより強力です。

UPDATE

また、コードが実行されるシステム上のPHPのネイティブフォーマットに改行を変更してみてください。これは、私はメーラークラスを使用することをお勧めいたしますPHP_EOL

$headers = "From: " . $email . PHP_EOL; 
    $headers .= "Reply-To: ". $email . PHP_EOL; 
    $headers .= "MIME-Version: 1.0" . PHP_EOL; 
    $headers .= "Content-Type: text/html; charset=ISO-8859-1" . PHP_EOL; 
+0

sendmailは、そのメールをヘッダに追加しますか? –

+1

@ Jarred Farrishはい、私は 'mail()'がsendmailに変更されていないヘッダーのブロックとそれに続くメッセージ本文を渡し、sendmailは正しく書式設定されていると仮定してsendmailを送ります。それがメールの注入に問題がある理由です。 http://www.phpsecure.info/v2/article/MailHeadersInject.en.php –

+0

ニースのリンク。私はいつもsendmailがlinebreaksまで真剣であると思っていました。 –

関連する問題