Я получаю восклицательные знаки в случайных точках в результате этой функции электронной почты PHP. Я читал, что это потому, что мои строки слишком длинны или мне нужно закодировать электронную почту в Base64, но я не знаю, как это сделать.
Это то, что у меня есть:
$to = "you@you.you"; $subject = "Pulling Hair Out"; $from = "me@me.me"; $headers = "From:" . $from; $headers .= "MIME-Version: 1.0\r\n"; $headers .= "Content-Type: text/html; charset=ISO-8859-1\r\n"; $headers .= "Content-Transfer-Encoding: 64bit\r\n"; mail($to,$subject,$message,$headers);
Как исправить это, чтобы не было случайных! в результате? Благодаря!
Как указано здесь: восклицательный знак в HTML-письме
Проблема в том, что ваша строка слишком длинная. Подайте HTML-строку длиной более 78 символов в почтовую функцию, и вы получите в итоге! (bang) в вашей строке.
Это связано с ограничениями длины строки в RFC2822 http://tools.ietf.org/html/rfc2822#section-2.1.1
Попробуйте использовать этот фрагмент кода:
$to = "you@you.you"; $subject = "Pulling Hair Out"; $from = "me@me.me"; $headers = "From:" . $from; $headers .= "MIME-Version: 1.0\r\n"; $headers .= "Content-Type: text/html; charset=ISO-8859-1\r\n"; $headers .= "Content-Transfer-Encoding: 64bit\r\n"; $finalMessage = wordwrap( $message, 75, "\n" ); mail($to,$subject,$finalMessage,$headers);
Проблема в том, что одна строка не должна превышать 998 символов. (см. также https://stackoverflow.com/a/12840338/2136148 )
В ответах здесь есть правильная информация о длине строки, однако ни один из них не предоставил мне достаточный фрагмент кода для исправления проблемы. Я оглянулся и нашел лучший способ сделать это, вот оно;
<?php // send base64 encoded email to allow large strings that will not get broken up // ============================================== $eol = "\r\n"; // a random hash will be necessary to send mixed content $separator = md5(time()); $headers = "MIME-Version: 1.0".$eol; $headers .= "From: Me <info@example.com>".$eol; $headers .= "Content-Type: multipart/alternative; boundary=\"$separator\"".$eol; $headers .= "--$separator".$eol; $headers .= "Content-Type: text/html; charset=utf-8".$eol; $headers .= "Content-Transfer-Encoding: base64".$eol.$eol; // message body $body = rtrim(chunk_split(base64_encode($html))); mail($email, $subject, $body, $headers); // ==============================================
Вы правы, потому что ваша электронная почта слишком длинная. Попробуйте заменить эту строку в своем почтовом заголовке.
Content-Transfer-Encoding: quoted-printable