phpmailer使用gmail SMTP的方法

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

可是,因为gmail的smtp采用了ssl链接:web

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
改为
ide

$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()中,找到:ui

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

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

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

//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_includes\phpmailer_ssl\cla
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.\r\n”;echo “Error message: ” . $mail->ErrorInfo . “\r\n”;return false;}else{echo(”Send $attach to $to_name successed.\r\n”);return true;}//echo “Message has been sent”;//}

相关文章
相关标签/搜索