【问题标题】:Mailer Error: Could not instantiate mail function邮件程序错误:无法实例化邮件功能
【发布时间】:2017-09-07 20:00:58
【问题描述】:

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

 <?php
        $sendfrm_name = 'Balakumar B';
        $sendfrm_id = 'user1@gmail.com';

        $sendtoname = 'myself';
        $sendto = 'user2@mydomain.com';

        //$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 = 'balakumar@mydomain.com';
        $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


    【解决方案1】:

    您使用的代码是 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;
    

    希望这会有所帮助。

    【讨论】:

      【解决方案2】:

      你在这里做错了一大堆事情,我看不出有什么特别的原因。

      当您使用自动加载器时,您不需要加载其他类 - 这就是自动加载器的用途。您似乎已将 class.phpmailer.php 的文件名更改为 class.PHPMailer.php,这是非标准的,在区分大小写的文件系统上会出现问题,并且在您更新库时可能会中断。

      如果你不调用isSMTP(),你将不会使用 SMTP,因此不会使用任何 SMTP 设置(默认使用 PHP 的 mail() 函数)。

      如果你使用SMTPSecure = 'tls',你需要Port = 587,而不是465。

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

      无需调用WordWrap - 它还表明您的代码基于一个旧示例,并且可能正在运行旧版本的 PHPMailer,所以get the latest

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-07-24
        • 2015-08-19
        • 1970-01-01
        • 1970-01-01
        • 2011-08-08
        • 2015-01-17
        • 1970-01-01
        • 2017-10-04
        相关资源
        最近更新 更多