PHP mail() функция не отправляет электронную почту

Я пытаюсь отправить электронное письмо, используя mail()PHP функция. У меня это работало до тех пор, пока я не попытался задать тему "Регистрация пользователя", тогда почта не отправлялась!

Вот код (значительно упростили его)

$to = $this->post_data['register-email'];
$message = 'Hello etc';
$headers = 'From: noreply@example.com' . "\r\n" ;
$headers .= 'Content-type: text/html; chareset=iso-8859-1\r\n';
$headers .= 'From: Website <admin@example.com>';
mail($to, 'User Registration', $message, $headers);

Я также попытался использовать переменную, содержащую строку текста, но это не сработало.

Почему это не отправка почты, когда я добавляю исключение темы?

Спасибо

РЕДАКТИРОВАТЬ: обновленный код, который все еще не работает

$to = $this->post_data['register-email'];
$message = 'Hello etc';

$headers  = 'MIME-Version: 1.0' . "\r\n";
$headers .= "Content-type: text/html; charset=iso-8859-1\r\n";
$headers .= 'From: Website <admin@example.com>';
mail($to, 'User Registration', $message, $headers);

3 ответа

На вашей 4-й строке вы используете ' который обрабатывает все внутри него как строку, так что измени

$headers .= 'Content-type: text/html; chareset=iso-8859-1\r\n';

Для того,чтобы:

$headers .= "Content-type: text/html; charset=iso-8859-1\r\n";

и как указано в комментариях изменения chareset в charset

Редактировать:

если вы отправляете почту в формате txt / html, в соответствии с документацией, вы также можете установить mime в заголовках, так что попробуйте это

    $to = $this->post_data['register-email'];
    $message = 'Hello etc';

    $headers  = 'MIME-Version: 1.0' . "\r\n";
    $headers .= "Content-type: text/html; charset=iso-8859-1\r\n";
    $headers .= 'From: Website <admin@example.com>' . "\r\n";
    mail($to, 'User Registration', $message, $headers);

Если это все еще не работает, вы можете попробовать отладить свой код, просто добавьте

error_reporting(E_ALL);
ini_set('display_errors', '1');

в верхней части страницы, и возьмите это оттуда, и если вы все еще не можете решить это самостоятельно, опубликуйте это здесь, и я сделаю все возможное, чтобы помочь вам.

Я использую этот код в большинстве своих проектов

$subject = 'subject';
$message = 'message';
$to = 'user@gmail.com';
$type = 'plain'; // or HTML
$charset = 'utf-8';

$mail     = 'no-reply@'.str_replace('www.', '', $_SERVER['SERVER_NAME']);
$uniqid   = md5(uniqid(time()));
$headers  = 'From: '.$mail."\n";
$headers .= 'Reply-to: '.$mail."\n";
$headers .= 'Return-Path: '.$mail."\n";
$headers .= 'Message-ID: <'.$uniqid.'@'.$_SERVER['SERVER_NAME'].">\n";
$headers .= 'MIME-Version: 1.0'."\n";
$headers .= 'Date: '.gmdate('D, d M Y H:i:s', time())."\n";
$headers .= 'X-Priority: 3'."\n";
$headers .= 'X-MSMail-Priority: Normal'."\n";
$headers .= 'Content-Type: multipart/mixed;boundary="----------'.$uniqid.'"'."\n\n";
$headers .= '------------'.$uniqid."\n";
$headers .= 'Content-type: text/'.$type.';charset='.$charset.''."\n";
$headers .= 'Content-transfer-encoding: 7bit';

mail($to, $subject, $message, $headers);

Я бы предложил использовать PHP_EOL вместо \r\n или \ n, поскольку разрыв строки будет определяться вашей средой...

$headers  = 'MIME-Version: 1.0' . PHP_EOL;

и т.д.. надеясь, что это, наконец, решит вашу проблему!

Другие вопросы по тегам