phpMailer:无法实例化邮件函数


phpMailer: Could not instantiate mail function

我创建了一个表单,该表单使用phpMailer将结果通过电子邮件发送给网站所有者。当然,在我添加所有者的电子邮件地址之前,我使用我的电子邮件地址来测试表单是否有效。 当我使用我的电子邮件时,表单可以完美发送,但是,当我使用所有者的地址时,它会抛出错误"无法实例化邮件功能"并且不会发送表单。此错误仅发生在与所有者域关联的电子邮件地址上。 知道为什么会发生这种情况吗?

如果我在命令行中键入它,它可以正常工作:

echo 'test' | mail -s 'test' me@example.com

编辑:我最初没有使用 SMTP,但现在配置如下。 错误消息现在是"SMTP 错误:以下收件人 xxx@somedomain.com 失败",最终结果仍然相同。 它可以通过电子邮件发送到多个Gmail测试地址,但所有者的 email@hisdomain.com 存在问题。 此外,使用 SMTPDebug,它现在产生错误"RCPT TO 命令失败:550 这里没有这样的用户" 但是,所有者的电子邮件在通过 gmail、Outlook 等发送电子邮件时可以正常工作。

phpMailer代码:

$mail = new PHPMailer();
$mail->IsSMTP();
$mail->SMTPDebug = 1;
$mail->Debugoutput = "error_log";
$mail->Host = "mail.mydomain.com";
$mail->SMTPAuth = true;
$mail->Username = "admin@mydomain.com";
$mail->Password = "XXXXXXXXXXXXXXX";
$mail->CharSet = 'UTF-8';
$mail->AddReplyTo($emailAddress);
$mail->SetFrom("admin@mydomain.com");
$mail->AddAddress($toAddress,$toName);
$mail->Subject = $emailSubject;
$mail->isHTML(true);
$mail->Body = $emailBody;
$mail->AltBody = strip_tags($emailBody);
// Attempt to send the e-mail       
if (!$mail->send()) {
    //error handling
}

您应该尝试使用此特定错误消息进行检查:

确保你可以使用常规的 php mail() 函数。创建一个空白页并使用 php mail() 发送测试电子邮件。如果这有效,可能是您的 SMTP 与特定用户域有问题。设置 Gmail SMTP 或其他 SMTP 以发送电子邮件:

$mail->IsSMTP();
$mail->Host = "smtp.domain.com";
// optional
// used only when SMTP requires authentication  
$mail->SMTPAuth = true;
$mail->Username = 'smtp_username';
$mail->Password = 'smtp_password';

你能分享你的phpMailer源代码供我们查看吗?

设置$mail->SMTPDebug = 2;,以便您可以看到服务器要说的内容,并阅读故障排除指南。

您正在使用不加密的身份验证,这不是一个好的组合,许多服务器不允许这样做。添加这个:

$mail->SMTPSecure = 'tls';
$mail->Port = 587;

你的代码基于一个旧的例子,所以你可能也在使用旧版本的PHPMailer;从github获取最新版本。