为什么赢了';当我可以通过PHP脚本发送电子邮件时,我是否可以通过Wordpress发送电子邮件?

为什么赢了';当我可以通过PHP脚本发送电子邮件时,我是否可以通过Wordpress发送电子邮件?,php,wordpress,postfix-mta,Php,Wordpress,Postfix Mta,我已经将运行版本4.9.8的Wordpress服务器从Ubuntu迁移到CentOS,Wordpress的电子邮件似乎无法正常发送。我正在通过创建与各种电子邮件地址关联的新用户来测试发送电子邮件 我已经安装了Postfix,并将其配置为尽可能与原始配置匹配。我这样说是因为在Postfix的实现方式上存在一些细微的差异 我能够通过命令行和与Wordpress位于同一服务器(PHP fpm)上的PHP脚本向不同的地址发送电子邮件 然而,当我尝试发送电子邮件(通过在wp admin中创建一个新用户)到

我已经将运行版本4.9.8的Wordpress服务器从Ubuntu迁移到CentOS,Wordpress的电子邮件似乎无法正常发送。我正在通过创建与各种电子邮件地址关联的新用户来测试发送电子邮件

我已经安装了Postfix,并将其配置为尽可能与原始配置匹配。我这样说是因为在Postfix的实现方式上存在一些细微的差异

我能够通过命令行和与Wordpress位于同一服务器(PHP fpm)上的PHP脚本向不同的地址发送电子邮件

然而,当我尝试发送电子邮件(通过在wp admin中创建一个新用户)到Wordpress中的相同地址时,它们不会到达收件人。我已经检查了Wordpress配置文件,没有看到任何覆盖默认邮件操作的内容。通过我的PHP脚本触发电子邮件时,/var/log/maillog中没有新条目:

<?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);
?>
发件人电子邮件地址与原始服务器中的地址相同

编辑2:


我在functions.php中添加了更多的自定义代码来设置发件人,并尝试了两个不同的发件人电子邮件地址,这两个地址都是有效的电子邮件地址。由于出现此“无效地址”错误,它们都失败了。奇怪的是,PHP的邮件函数以wordpress@{mydomain}的形式发送电子邮件,效果很好。

我最初的解决方案是将class-phpmaiiler.PHP直接更改为“noregex”,但多亏了wordpress论坛上的@diondesigns,我发现我可以为主题的函数添加一行内容。PHP:

add_filter( 'wp_mail_from', function($from){PHPMailer::$validator = 'noregex'; return $from;} );
现在电子邮件发送很好

更新:


我想补充一点,这里的主要问题是PHP是用PCRE2编译的,而不是PCRE。这打破了PHPMailer的裙子。在使用PCRE编译的PHP版本后,我不再看到这个问题。我建议在解决方法中使用此路径。

使用Wordpress的内置功能。我不想在这里创建自定义代码……我想获得从管理控制台向正在工作的用户发送电子邮件的内置功能。您上面提供的代码是自定义的。我只是建议使用Wordpress的内置邮件功能来处理电子邮件的发送。如果你只是在谈论一个标准的PHP邮件功能,为什么要用Wordpress标记呢?PHP脚本就是一个不使用Wordpress从web服务器发送电子邮件的例子。这就是我要问的:为什么我可以用PHP的原生邮件功能发送邮件,但Wordpress本身不向同一地址发送邮件?我最终不得不破解validateAddress。不知道为什么它一直拒绝这些地址,但在将其锁定到noregex后,它工作正常,可以发送电子邮件。
add_filter( 'wp_mail_from', function($from){PHPMailer::$validator = 'noregex'; return $from;} );