Некорректная отправка почты WordPress?

Ссылка скопирована
1 ответ

На сайте есть несколько точек отравки почты - Contact Form 7 + из кода wp_mail() (внути ajax экшенов + внутри вызовов rest api)
Отправка почты корректно работает на dev-сервере.
Работает при переносе на местный хостинг.

При переносе на веб-хостинг GoDaddy:
отправка CF7 - работает
обычный php mail() - работает
через wp_mail() - нет.

Какие возможные причины могут быть?

p.s. набор модулей и версии PHP на всех хостах совпадают

Дополнительно:

Ответы:

Какие возможные причины могут быть?

запрет на отправку ("закрыт 25 порт " и т.п.) - чтобы не спамили
может сниматься, а может и нет

поищите в FAQ или запросите саппорт

и да, гдедди выпирает с доменов пользователей РФ, письма поприходили, так что имейте в виду, если попадаете под

хостинг OVH например сильно не хуже, и не только

Нужно решить такую задачу?

Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

Заказать помощь
Лучший ответ
1
WordPress-редакция Ответ

Если Contact Form 7 и обычный mail() работают, а Ваши вызовы wp_mail() из Ajax/REST не работают только на GoDaddy, нужно смотреть не “WordPress вообще”, а окружение и контекст вызова. wp_mail() внутри WordPress использует PHPMailer и фильтры, поэтому результат может отличаться от прямого mail().

Проверьте по шагам:

  • попадает ли код в Ajax/REST callback;
  • что возвращает wp_mail() — true или false;
  • есть ли ошибки PHPMailer через hook wp_mail_failed;
  • какой From/Reply-To у письма;
  • разрешает ли GoDaddy отправку от указанного домена;
  • не режет ли хостинг отправку из REST/Ajax из-за security rules.

Добавьте логирование ошибки:

add_action('wp_mail_failed', function ($error) {
    error_log('WP mail failed: ' . print_r($error->get_error_message(), true));
    error_log(print_r($error->get_error_data(), true));
});

add_action('wp_mail_failed', function ($error) { error_log('WP mail failed: ' . print_r($error->get_error_message(), true)); error_log(print_r($error->get_error_data(), true)); });

И тестовый вызов:

$sent = wp_mail(
    'test@example.com',
    'Test email',
    'Test message',
    ['Content-Type: text/plain; charset=UTF-8']
);
 
error_log('wp_mail result: ' . ($sent ? 'yes' : 'no'));

$sent = wp_mail( 'test@example.com', 'Test email', 'Test message', ['Content-Type: text/plain; charset=UTF-8'] ); error_log('wp_mail result: ' . ($sent ? 'yes' : 'no'));

Частая причина на хостингах: письмо отправляется с From, который не принадлежит домену сайта. Например сайт example.com, а From стоит Gmail или произвольный адрес. Нужно ставить отправителя на домене сайта:

add_filter('wp_mail_from', function () {
    return 'noreply@example.com';
});
 
add_filter('wp_mail_from_name', function () {
    return get_bloginfo('name');
});

add_filter('wp_mail_from', function () { return 'noreply@example.com'; }); add_filter('wp_mail_from_name', function () { return get_bloginfo('name'); });

Надёжнее всего подключить SMTP через нормальный почтовый сервис или SMTP-ящик домена. Тогда CF7, REST, Ajax и кастомный код будут отправлять одинаково. На GoDaddy также стоит проверить лимиты исходящей почты и SPF/DKIM/DMARC, иначе письма могут “отправляться”, но не доходить.

Другие ответы (0)

Пока нет других ответов. Будьте первым, кто поможет автору.

Ответить на вопрос

комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Вам также может быть интересно