Intereting Posts

Не удалось отправить HTML-письма с помощью PHP mail ()

Странные вещи случаются со мной. Я пытаюсь отправить HTML-почту, используя функцию php mail() , но вам не повезло. Даже когда я копирую / вставляю фрагмент кода буквально, это не работает. Что я делаю не так? Вот фрагмент кода, который я использую:

  $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 = 'me@gmail.com'; $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: me@gmail.com MIME-Version: 1.0 Content-Type: text/html; charset=ISO-8859-1 Message-Id: <20110703234551.A9D6153DAB@apache10.hostbasket.com> 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> 

Что я делаю неправильно?

Мы не можем видеть, где была задана переменная $email , но я предполагаю, что в конце переменной $email может возникнуть дополнительный разрыв строки. Это могло бы привести к тому, что после заголовка From: и перед Reply-to: который сигнализирует о начале тела сообщения и завершении заголовков, это приведет к появлению двух строк.

Пытаться:

 $email = trim($email); 

перед конструированием сообщения. Поскольку после заголовка Reply-to появляется лишний разрыв строки, мое дело еще сильнее для дополнительного перерыва в $email .

ОБНОВИТЬ

Также попробуйте изменить linebreaks на собственный формат PHP в системе, где будет работать код. Это делается путем замены \r\n на 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; 

Вот полезная ссылка на отправку html-писем в php

http://blog.twigahost.com/how-to-send-html-email-with-php/

Я рекомендую вам использовать класс почтовой программы. Они дают вам возможность использовать smtp auth, поэтому каждая почта будет передана. Несколько примеров: