Mailer 错误:无法实例化邮件功能

问题描述 投票:0回答:2

我尝试过以下脚本通过phpmailer发送邮件

 <?php
        $sendfrm_name = 'Balakumar B';
        $sendfrm_id = '[email protected]';

        $sendtoname = 'myself';
        $sendto = '[email protected]';

        //$cc = '';

        include("mail/PHPMailerAutoload.php");
        include("mail/class.PHPMailer.php");
        include("mail/class.smtp.php");

        $mail = new PHPMailer;
        //$mail-> isSMTP();
        $mail-> Host = 'mail.mydomain.com'; //smtp.gmail.com
        $mail->SMTPDebug   = 2;
        $mail-> SMTPAuth = true;
        $mail->smtpConnect = array(
        'ssl' => array(
        'verify_peer' => false,
        'verify_peer_name' => false,
        'allow_self_signed' => true
        )
        );
        $mail-> Username = '[email protected]';
        $mail-> Password = 'balakumar1`2345';
        $mail-> SMTPSecure = 'tls';
        $mail-> Port = 465; //587
        $mail-> setFrom($sendfrm_id, $sendfrm_name);
        $mail-> addAddress($sendto, $sendtoname);
        $mail-> addReplyTo($sendto, $sendtoname);
        //$mail->addCC($cc);
        $mail->WordWrap = 50;
        $mail->isHTML(true);
        $mail->Subject = "Test Mail";
        $mail->Body = "Name: ".$sendfrm_name ."<br /> Email: ".$sendfrm_id;
        if(!$mail->send())
        {
            echo "Mailer Error: ".$mail->ErrorInfo;
        }
        else
        {
            echo ("<p>Message successfully sent!</p>");
                echo "E-mail: ", $sendto, "<br />";
                echo "Name: ", $sendtoname, "<br />";
                echo "Subject: Test Mail<br />";
                echo "Body: Body Of the Mail<br />";

        } 
 ?>

但我收到邮件错误:

无法实例化邮件功能。

如何修复这个错误?上面我提到了我的邮件服务器 (mail.mydomain.com) 和端口 465。

php email phpmailer
2个回答
0
投票

您使用的代码是 php 的默认

mail()
函数。您需要使用 SMTP。

您已禁用 SMTP。

$mail = new PHPMailer;
//$mail-> isSMTP(); <----------- Here it is disabled.
$mail-> Host = 'mail.mydomain.com'; //smtp.gmail.com
$mail->SMTPDebug   = 2;
$mail-> SMTPAuth = true;

因为 SMTP 被禁用,所以它正在使用

mail()
功能。您的机器配置不正确。

只需取消注释该行即可。

完整代码在这里:

$mail = new PHPMailer;
$mail-> isSMTP(); # SMTP is enabled now.
$mail-> Host = 'mail.mydomain.com'; //smtp.gmail.com
$mail->SMTPDebug   = 2;
$mail-> SMTPAuth = true;

希望这有帮助。


0
投票

你在这里做了很多错误的事情,我看不出有什么特别的原因。

当您使用自动加载器时,您不需要加载其他类 - 这就是自动加载器的用途。您似乎已将

class.phpmailer.php
的文件名更改为
class.PHPMailer.php
,这是非标准的,在区分大小写的文件系统上会遇到问题,并且在更新库时可能会中断。

如果您不调用

isSMTP()
,您将不会使用 SMTP,因此不会使用任何 SMTP 设置(默认情况下将使用 PHP
mail()
函数)。

如果您使用

SMTPSecure = 'tls'
,则需要
Port = 587
,而不是 465。

为什么要禁用证书验证?您应该仅出于非常具体的原因才这样做,而不仅仅是作为“使其发挥作用”的随机措施。它存在安全风险,因此除非绝对必要,否则不要这样做,并且您知道确切的原因 - 如果您不知道,请不要这样做。

无需调用

WordWrap
- 它还表明您的代码基于旧示例,并且可能正在运行旧版本的 PHPMailer,因此 获取最新版本

为什么要将收件人地址和回复地址设置为相同?

© www.soinside.com 2019 - 2024. All rights reserved.