Почему я не отправлю электронное письмо через Wordpress, если смогу отправить его через скрипт PHP? - PullRequest
0 голосов
/ 14 сентября 2018

Я перенес сервер Wordpress под управлением версии 4.9.8 из Ubuntu в CentOS, и письма из Wordpress не отправляются должным образом.Я тестирую отправку электронных писем, создавая новых пользователей, связанных с различными адресами электронной почты.

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

Я могу отправлять электронные письма на различные адреса через командную строку и через скрипт PHP, размещенный на том же сервере (php-fpm), что и Wordpress.

Однако, когда я пытаюсьотправлять электронные письма (путем создания нового пользователя в wp-admin) по тем же адресам в Wordpress, что они не доходят до получателя.Я проверил файлы конфигурации Wordpress и не вижу ничего, что переопределяло бы почтовые операции по умолчанию.Нет новых записей в / var / log / maillog, когда электронная почта запускается через мой PHP-скрипт:

<?php
// the message
$msg = "First line of text\nSecond line of text";

// use wordwrap() if lines are longer than 70 characters
$msg = wordwrap($msg,70);

// send email
mail("me@{mydomain}","My subject",$msg);
?>

Также нет записей после запуска электронной почты из Wordpress.

РЕДАКТИРОВАТЬ:Я включил отладку в файл журнала и добавил функцию для обнаружения ошибок wp_mail.Это ошибка, с которой я сталкиваюсь при попытке:

(
            [wp_mail_failed] => Array
                (
                    [0] => Invalid address:  (setFrom) wordpress@{mydomain}
                )

        )

Адрес электронной почты от такой же, как и на исходном сервере.

EDIT2:

Я добавил еще несколько пользовательских кодов в functions.php для настройки отправителя и попробовал несколько разных адресов электронной почты отправителя, оба из которых являются действительными адресами электронной почты.Все они терпят неудачу с этой ошибкой «неверного адреса».Что странно, так это то, что почтовая функция PHP отправляет письмо как wordpress @ {mydomain}, и это прекрасно работает.

1 Ответ

0 голосов
/ 16 сентября 2018

Первоначально я решил изменить class-phpmaiiler.php непосредственно на noregex, но благодаря @diondesigns на форумах Wordpress я обнаружил, что могу добавить строку в functions моей темы: php:

add_filter( 'wp_mail_from', function($from){PHPMailer::$validator = 'noregex'; return $from;} );

Теперь письма отправляются нормально.

ОБНОВЛЕНИЕ:

Я хотел добавить, что главная проблема здесь заключалась в том, что PHP был скомпилирован с PCRE2, а не с PCRE.Это сломало validateAddress в PHPMailer.После перехода на версию PHP с скомпилированным PCRE я больше не вижу проблемы.Я рекомендую этот путь через обходной путь.

...