zoukankan      html  css  js  c++  java
  • phpmailer使用gmail SMTP的方法

    终于能够通过phpmailer使用gmail账号发送邮件了
    phpmailer(现在的版本是1.73)是一个很好用的工具,可以很方便的使用php语言发送邮件,支持smtp及验证,我们一直都用它。

    但是,由于gmail的smtp采用了ssl连接:

    Outgoing Mail (SMTP) Server – requires TLS: smtp.gmail.com (use authentication)
    Use Authentication: Yes
    Use STARTTLS: Yes (some clients call this SSL)
    Port: 465 or 587
    使用phpmailer就无法正常连接gmail的发信服务器了,并且这个问题一直没有得到phpmailer的官方解决,不过在sf.net上面的讨论里倒是找到了一点资料,采用下面这种方法就可以连接gmail了。

    修改class.smtp.php,第101行,把

    $this->smtp_conn = fsockopen($host, # the host of the server
    改成

    $this->smtp_conn = fsockopen(’ssl://’ . $host, # the host of the server
    这样就可以了,就是制定使用ssl协议连接主机,当然php的openssl模块必须打开:

    extension=php_openssl.dll
    但是这样就不能使用非ssl的主机了,我也不像在include目录下面放两份phpmailer,于是,又琢磨出了一种更好的方式:

    打开class.phpmailer.php,在大概543行附近,函数SmtpConnect()中,找到:

    $this->smtp->do_debug = $this->SMTPDebug;
    $hosts = explode(”;”, $this->Host);
    $index = 0;
    $connection = ($this->smtp->Connected());

    // Retry while there is no connection
    while($index Port;
    }

    这一段的部分功能就是,如果你输入的主机名中带有端口号,自动的识别出来,设想虽好,但就是这部分让我们无法直接在调用的时候使用ssl格式的主机 名,因为“ssl://xxx”的形式会被误认为是主机:端口号的形式,另外端口号一般都比较固定,我们手工设置好了,也不必一定要和主机一起赋值,所以 在上面的代码后面添加:

    //Modify by Fwolf @ 2006-4-14, to enable ssl mail connection
    $host = $this->Host;
    $port = $this->Port;
    就可以了,使用正常smtp主机的时候,用法不变,使用gmail的时候,使用ssl://smtp.gmail.com作为主机名就可以了,唯一稍微麻烦一些的就是端口需要手工指定——其实也不麻烦。

    按照上面的配置更改后,使用gmail账号发送邮件时还会有一条警告信息:

    Warning: fgets(): SSL: fatal protocol error in H:php_includesphpmailer_sslcla
    ss.smtp.php on line 1024
    这各警告信息在php的帮助里面有,好像是在使用ssl连接的时候,读文件读到文件尾的时候出现的问题,需要手工屏蔽,或者人为控制读的长度,我们用最简 单的方式禁止警告信息显示就可以了,找到class.smtp.php的1024行,在fgets($this->smtp_conn,515)函 数前面加上个@就可以了。

    下面是一个完整的使用phpmailer发送邮件的函数:

    function send_mail($to_address, $to_name ,$subject, $body, $attach = ‘’)
    {
    //使用phpmailer发送邮件
    require_once(”phpmailer/class.phpmailer.php”);
    $mail = new PHPMailer();
    $mail->IsSMTP(); // set mailer to use SMTP
    $mail->CharSet = ‘utf-8′;
    $mail->Encoding = ‘base64′;
    $mail->From = ‘fwolf.mailagent@gmail.com’;
    $mail->FromName = ‘Fwolf’;
    //$mail->Sender = ‘fwolf.mailagent@gmail.com’;
    //$mail->ConfirmReadingTo = ‘fwolf.mailagent@gmail.com’; //回执?

    $mail->Host = ’ssl://smtp.gmail.com’;
    $mail->Port = 465; //default is 25, gmail is 465 or 587
    $mail->SMTPAuth = true;
    $mail->Username = “fwolf.mailagent@gmail.com”;
    $mail->Password = “xxx”;

    $mail->>ddAddress($to_address, $to_name);
    //$mail->AddReplyTo(’fwolf.aide@gmail.com’, “Fwolf”); //针对gmail无用,gmail是In-Reply-To:,phpmailer默认生成的是Reply-to:
    $mail->WordWrap = 50;
    if (!empty($attach))
    $mail->AddAttachment($attach);
    $mail->IsHTML(false);
    $mail->Subject = $subject;
    $mail->Body = $body;
    //$mail->AltBody = “This is the body in plain text for non-HTML mail clients”;

    if(!$mail->Send())
    {
    echo “Mail send failed. ”;
    echo “Error message: ” . $mail->ErrorInfo . “ ”;
    return false;
    }
    else
    {
    echo(”Send $attach to $to_name successed. ”);
    return true;
    }
    //echo “Message has been sent”;
    //
    }

  • 相关阅读:
    南京航空航天大学软件著作权申请办法
    CoDel Test Script
    [编辑中] 免费的Internet流量发生器 | Free Internet Traffic Generators
    关于Java LDAP登录集成
    sonar + ieda实现提交代码前代码校验
    sonar+Jenkins代码覆盖率检测
    定义自己的代码风格CheckStyle简单使用
    HAProxy简单使用
    读取大文件性能测试
    使用HtmlUnit登录百度
  • 原文地址:https://www.cnblogs.com/xingmeng/p/3317112.html
Copyright © 2011-2022 走看看