今天收到两条评论,发现没有收到邮件通知,转念一想自己也没设置过邮件相关的配置,查了一下文档发现wordpress是通过wp_mail函数发送邮件的。
源码分析
打开wordpress源码文件 wp-includespluggable.php
,定位到wp_mail函数:
<?php
//255行代码如下
global $phpmailer;
// (Re)create it, if it's gone missing.
if ( ! ( $phpmailer instanceof PHPMailerPHPMailerPHPMailer ) ) {
require_once ABSPATH . WPINC . '/PHPMailer/PHPMailer.php';
require_once ABSPATH . WPINC . '/PHPMailer/SMTP.php';
require_once ABSPATH . WPINC . '/PHPMailer/Exception.php';
$phpmailer = new PHPMailerPHPMailerPHPMailer( true );
$phpmailer::$validator = static function ( $email ) {
return (bool) is_email( $email );
};
}
看到了熟悉的PHPMainler。https://github.com/PHPMailer/PHPMailer ,继续往下:
代码语言:javascript复制<?php
//第467行代码
// Set to use PHP's mail().
$phpmailer->isMail();->isMail();
通过IDE追溯一下isMail,PHPMailer类如下:
代码语言:javascript复制<?php
/**
* Send messages using SMTP.
*/
public function isSMTP()
{
$this->Mailer = 'smtp';
}
/**
* Send messages using PHP's mail() function.
*/
public function isMail()
{
$this->Mailer = 'mail';
}
由此可知worpdress使用的是php自带的mail函数,继续拓展一下:
1.PHP Mail 简介
- mail() 函数允许您从脚本中直接发送电子邮件。
- 要使邮件函数可用,PHP 需要已安装且正在运行的邮件系统。要使用的程序是由 php.ini 文件中的配置设置定义的。
- Mail 函数是 PHP 核心的组成部分。无需安装即可使用这些函数。
- Mail 函数的行为受 php.ini 文件中的设置的影响。
我的PHP压根就没配置过这些玩意,理所当然,邮件发不出,但是讲道理,为什么不提供一个错误日志或者干脆抛致命错误