PEAR邮件发送时身份验证失败

4
自从我发现PHP内置的邮件功能存在安全漏洞后,我尝试使用PEAR。我已经在本地主机(WAMP server 2.2)上安装并进行了必要的配置。但是每次我尝试发送电子邮件时,都会显示以下消息。
错误:身份验证失败[SMTP:从服务器接收到无效响应代码(代码:535,响应:5.7.8用户名和密码不被接受。在http://support.google.com/mail/bin/answer.py?answer=14257 gg10sm16772067pbc.46 - gsmtp了解更多信息)]。
我的用户名和密码都是正确的,我已经反复检查过了。我查看了在线文档和其他成员提出的类似问题,但我仍然卡在这个问题上。非常感谢任何关于此问题的见解。顺便说一下,这是我用来发送电子邮件的PHP代码。
    <?php
            require "Mail.php";
            $from   = "myemail@here.com";
            $to     = "mysender@here.com";
            $subject= "hiii";
            $body =     "\n\nEmail contents here";

            $host   = "ssl://smtp.gmail.com";//"smtp.gmail.com";
            $port   = "465";//"587";
            $user   = "my username";
            $pass   = "mypassword";
            $headers = array("From"=> $from, "To"=>$to, "Subject"=>$subject);
            $smtp   = @Mail::factory("smtp", array("host"=>$host, "port"=>$port, "auth"=> true, "username"=>$user, "password"=>$pass));
            $mail   = @$smtp->send($to, $headers, $body);

            if(PEAR::isError($mail)){
                echo "error: {$mail->getMessage()}";
            }else{
                echo "Message sent";
            }
     ?>
1个回答

3
创建SMTP对象时,用户名应该是你的完整gmail电子邮件地址,例如fred.flintstone@gmail.com,主机变量应该只是"smtp.gmail.com" - 不需要以"ssl://"开头。这将导致电子邮件无问题地发送。(我将您的代码放入名为20031009.php的文件中,修复了错误,进行了一些其他更改使其适用于我的gmail帐户,并运行它,以下是结果。)
$ php 20031009.php 
Message sent

另外,看起来你需要交换$from和$to的值。 :)

这是完整的工作代码(帐户和电子邮件详细信息已更改回来)

    require "Mail.php";
    $to      = "mysender@here.com";
    $from    = "myemail@here.com"; // the email address
    $subject = "hiii";
    $body    = "\n\nEmail contents here";

    $host    = "smtp.gmail.com";
    $port    =  "587";
    $user    = "my username";
    $pass    = "mypassword";
    $headers = array("From"=> $from, "To"=>$to, "Subject"=>$subject);
    $smtp    = @Mail::factory("smtp", array("host"=>$host, "port"=>$port, "auth"=> true, "username"=>$user, "password"=>$pass));
    $mail    = @$smtp->send($to, $headers, $body);

    if (PEAR::isError($mail)){
        echo "error: {$mail->getMessage()}";
    } else {
        echo "Message sent";
    }

谢谢。:).. 我已经尝试了好几天,尝试了很多组合,但用户名总是我的Gmail屏幕名称。 - codeGEN

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接