wp_mail() не работает на локальном сервере

28 июл. 2015 г., 10:17:53
Просмотры: 15.3K
Голосов: 2

Я пытаюсь протестировать wp_mail() на локальном сервере. Когда я делаю var_dump для wp_mail, я получаю Boolean false. Вот мой код:

    $to = "abcd@gmail.com";
    $subject = 'my subject';
    $message = 'I would like to work with you';
    $headers = '';


    $sent_message = wp_mail( $to, $subject, $message, $headers);
    var_dump($sent_message); // здесь я получаю boolean false
    if ( $sent_message ) {
        echo 'Тестовое сообщение было отправлено. Проверьте ваш почтовый ящик.';
    } else {
        echo 'Сообщение не было отправлено!'; // в итоге выводится это
    }

Буду благодарен за любую помощь.

0
Все ответы на вопрос 3
1

wp_mail() по умолчанию использует PHP-функцию mail(), для работы которой требуется настроенный MTA (агент передачи сообщений) на вашем хостинге. Вы можете установить и настроить такой MTA. Если у вас ОС на базе Linux, SSMTP — это простое решение, позволяющее использовать любого почтового провайдера для отправки системных писем через SMTP. Другой вариант MTA — Sendmail, мощный, но сложный в настройке агент передачи сообщений.

Или вы можете просто использовать плагин, например WP Mail SMTP, который реализует прямое SMTP-подключение в PHP, минуя использование mail().

28 июл. 2015 г. 10:38:06
Комментарии

Если вы хотите протестировать функциональность почты во время разработки, вы можете использовать mailcatcher: https://mailcatcher.me На Windows я его не тестировал, но на Mac OS он работает. На других Linux-системах он тоже должен работать.

Luckyfella Luckyfella
24 авг. 2017 г. 22:56:38
1

Если кто-то наткнётся на этот старый вопрос:

В моём случае причиной было то, что я указал для локального сайта имя без домена верхнего уровня. Например, "mysite" (вместо "mysite.com"). В результате WordPress использовал адрес отправителя "wordpress@mysite".

Phpmailer (который вызывается функцией wp_mail) затем выдавал ошибку: "Неверный адрес: (From): wordpress@mysite"

Решение заключалось в явном указании адреса отправителя через заголовок:

    $headers[] = 'From: Wordpress<wordpress@mysite.com>';
    $sent_message = wp_mail( $to, $subject, $message, $headers );

После этого wp_mail заработала.

4 мая 2021 г. 21:49:36
Комментарии

Отлично работает. Хорошее решение!

Christer Fernstrom Christer Fernstrom
7 мар. 2024 г. 20:12:35
0

Дополняя полезный ответ Ронни, вот как можно переопределить адрес From: для всей исходящей почты:

if (defined('WP_CLI')) {
    WP_CLI::add_wp_hook('wp_mail_from', function () {
        return 'my@addr.com';
    });
} else {
    add_filter('wp_mail_from', function () {
        return 'my@addr.com';
    });
}

Для локальной среды разработки я обнаружил, что удобно размещать этот код в wp-config.php, в самом конце, после require_once ABSPATH . 'wp-settings.php';.

Добавлен обходной путь для wp-cli, так как он не предоставляет функцию add_filter(), как это делает обычный WordPress.

30 сент. 2022 г. 06:47:31