Странные вещи случаются со мной. Я пытаюсь отправить 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
Я рекомендую вам использовать класс почтовой программы. Они дают вам возможность использовать smtp auth, поэтому каждая почта будет передана. Несколько примеров: