为何wp_mail()在XAMPP本地环境无法正常工作?
嘿,我看你在本地XAMPP环境折腾WordPress联系表单时,碰到wp_mail()死活发不出邮件的问题了。结合你的代码和本地环境的特性,我给你拆解下问题和解决办法:
一、先把代码里的坑填上
你的代码里有几个小问题,会直接导致邮件发送失败,先改了它们:
1. 邮件头格式错了!
你写的$headers拼接方式不对,From字段的正确格式应该是"网站名称 <发件人邮箱>",直接把网站名和邮箱拼一起会让邮件头不合法,邮件根本发不出去。
改完的headers代码应该是这样:
$headers = array( "From: " . get_option("blogname") . " <" . $email . ">", "Content-Type: text/html; charset=UTF-8" // 加这个还能支持HTML格式的邮件,可选 );
2. wp_mail()多传了个没用的参数
你调用wp_mail时最后加了个空数组array( '' ),这是用来传附件的,你既然没附件,直接删掉这个参数就行,省得搞出不必要的问题:
wp_mail( $to, $subject, $message, $headers );
3. 用户名验证可以用WordPress自带函数(可选优化)
你用正则验证用户名的写法有点老了,WordPress本身就有validate_username()函数,直接用它更靠谱:
if ( !validate_username( $name ) ) { echo sprintf( '<h5 class="form_erros">%s</h5>', __('Please Enter Valid Name!', 'promag') ); }
二、解决XAMPP本地没邮件服务器的问题
XAMPP默认是不带邮件发送服务的,这才是本地环境wp_mail()失效的核心原因!这里给你两个常用的解决办法,选一个顺手的就行:
方案1:用WP Mail SMTP插件(最简单,新手首选)
直接在WordPress后台装个WP Mail SMTP插件,它能替换默认的wp_mail()函数,通过第三方邮箱的SMTP服务发邮件。比如用QQ邮箱的话:
- 先去QQ邮箱的「设置-账户」里开启SMTP服务,拿到授权码
- 插件设置里选「Other SMTP」,填这些信息:
- SMTP主机:
smtp.qq.com - 端口:465(SSL加密)或者587(TLS加密)
- 加密方式:对应选SSL或TLS
- 用户名:你的QQ邮箱地址
- 密码:刚才拿到的授权码
- SMTP主机:
配置完保存,测试下邮件发送就行。
方案2:配置XAMPP的Sendmail(不用插件,适合喜欢折腾的)
- 找到XAMPP安装目录里的
sendmail\sendmail.ini,打开后修改这些配置(还是以QQ邮箱为例):
smtp_server=smtp.qq.com smtp_port=465 smtp_ssl=ssl auth_username=你的QQ邮箱地址 auth_password=你的QQ邮箱授权码 force_sender=你的QQ邮箱地址
- 再打开XAMPP的
php\php.ini,找到[mail function]部分,把sendmail_path改成:
sendmail_path = "\"C:\xampp\sendmail\sendmail.exe\" -t"
(注意路径要和你的XAMPP实际安装路径对应,别抄错了)
3. 重启XAMPP的Apache服务,这下wp_mail()就能通过Sendmail发邮件了。
三、最后测试注意点
改完代码和配置后,提交表单测试,如果显示发送成功但收不到邮件,先去垃圾邮件文件夹看看——很多测试邮件会被当成垃圾邮件拦下来。要是还没有,再检查下第三方邮箱的授权码对不对,或者Sendmail的配置路径有没有写错。
内容的提问来源于stack exchange,提问作者shadi

