php实现自动发送邮件pear Mail

php有个自带函数叫mail(),说是能发送邮件,看着很简单就试了一下,直接报错:

Warning: mail() [function.mail]: Failed to connect to mailserver at "localhost" port 25, verify your "SMTP" and "smtp_port" setting in php.ini or use ini_set() in E:\wamp\com\v4.0\email.php on line 11

说是要不能连接到本地的smtp服务器,如果配了邮件服务器,据说还不能通过smtp验证,用起来比较麻烦也不够灵活。

网上看了下,还有俩种比较可行的方法:

1.phpemail 开源邮件类

2.pear Mail ,php的扩展

前者用起来更方便,只要下载代码配置一下就可以使用;后者是php的扩展,C写的所以速度相对会快一些,但是新增模块较多;

phpemail

这是关于phpemail的简介:

PHPMailer是一个用于发送电子邮件的PHP函数包。它提供的功能包括:
*.在发送邮时指定多个收件人,抄送地址,暗送地址和回复地址
*.支持多种邮件编码包括:8bit,base64,binary和quoted-printable
*.支持SMTP验证
*.支持冗余SMTP服务器
*.支持带附件的邮件和Html格式的邮件
*.自定义邮件头
*.支持在邮件中嵌入图片
*.调试灵活
*.经测试兼容的SMTP服务器包括:Sendmail,qmail,Postfix,Imail,Exchange等
*.可运行在任何平台之上

先下载phpemail的源文件,百度一下还是很多,然后下面是一个实例贡大家参考下:

header("Content-type:text/html;charset=utf-8");
postmail('332490914@qq.com','My subject','哗啦啦');
function postmail($to,$subject = '',$body = ''){
	//Author:Jiucool WebSite: http://www.jiucool.com
	//$to 表示收件人地址 $subject 表示邮件标题 $body表示邮件正文
	//error_reporting(E_ALL);
	error_reporting(E_STRICT);
	date_default_timezone_set('Asia/Shanghai');//设定时区东八区
	require_once('email/class.phpmailer.php');
	include('email/class.smtp.php');
	$mail             = new PHPMailer(); //new一个PHPMailer对象出来
	$body            = eregi_replace("[\]",'',$body); //对邮件内容进行必要的过滤
	$mail->CharSet ="utf-8";//设定邮件编码,默认ISO-8859-1,如果发中文此项必须设置,否则乱码
	$mail->IsSMTP(); // 设定使用SMTP服务
	$mail->SMTPDebug  = 1;                     // 启用SMTP调试功能
	// 1 = errors and messages
	// 2 = messages only
	$mail->SMTPAuth   = true;                  // 启用 SMTP 验证功能
// 	$mail->SMTPSecure = "ssl";                 // 安全协议,可以注释掉
	$mail->Host       = 'smtp.qq.com';      // SMTP 服务器
	$mail->Port       = 25;                   // SMTP服务器的端口号
	$mail->Username   = '332490914';  // SMTP服务器用户名,PS:我乱打的
	$mail->Password   = 'xxxxx';            // SMTP服务器密码
	$mail->SetFrom('332490914@qq.com', 'who');
	$mail->AddReplyTo('332490914@qq.com','who');
	$mail->Subject    = $subject;
	$mail->AltBody    = 'To view the message, please use an HTML compatible email viewer!'; // optional, comment out and test
	$mail->MsgHTML($body);
	$address = $to;
	$mail->AddAddress($address, '');
	//$mail->AddAttachment("images/phpmailer.gif");      // attachment
	//$mail->AddAttachment("images/phpmailer_mini.gif"); // attachment
	if(!$mail->Send()) {
		echo 'Mailer Error: ' . $mail->ErrorInfo;
	} else {
		        echo "Message sent!恭喜,邮件发送成功!";
	}
}
简单的配置,就能实现邮件发送。


pearMail

来自百度百科:PEAR是PHP扩展与应用库(the PHP Extension and Application Repository)的缩写。它是一个PHP扩展及应用的一个代码仓库,简单地说,PEAR之于PHP就像是CPAN(Comprehensive Perl Archive Network)之于Perl。

下面是window环境下pear的扩展安装:

首先下载go-pear.phar   点击下载  ,放到php的根目录下,运行-》cmd-》跳转到php根目录下

E:\wamp\bin\php\php5.3.10>go-pear.phar
Are you installing a system-wide PEAR or a local copy?
(system|local) [system] :
如果这里不是选择管理员运行的cmd,则选择local再回车,不然要报错

PEAR_Config::writeConfigFile fopen(‘C:\Windows\pear.ini’,’w’) failed (fopen(C:\Windows\pear.ini): failed to open stream: Permission denied)
意思是没有写的权限。

之后一路回车就可以,安装好之后新增php的环境变量,php.ini

;;;;;;;;;;;;;;;;;;;;;;;;;
; Paths and Directories ;
;;;;;;;;;;;;;;;;;;;;;;;;;

; UNIX: "/path1:/path2"
;include_path = ".:/php/includes"
;
; Windows: "\path1;\path2"
include_path = ".;c:\php\includes;E:\wamp\com\Financial_live\library;E:\wamp\bin\php\php5.3.10\pear"
将E:\wamp\bin\php\php5.3.10\pear设为环境变量。

运行命令 pear list,会发现还没有Mail,这时候就要安装Mail,运行命令

pear install Mail-1.2.0
就会开始下载Mail,之后在运行pear list就会发现有Mail。

这时候就会发现php根目录下多了几个pear的文件夹,但是这时候要发送邮件还缺少俩包:NETWORKING 里面的 NET_SMTP 以及 NET_SOCKET 。

将这俩个文件夹里的NET文件夹拷贝到pear文件夹下面。

发送不同编码的邮件、发送带附件的邮件,还需要安装 MAIL_MIME 扩展包,下载后将 mime.php 拷贝到MAIL文件夹下即安装完成,使用时将 mime.php 包含近来即可,具体参见pear手册。

到这里pear和Mail的环境就配置好了,下面也是一个实例:

require_once('Mail.php');  
$from = "Sandra Sender <332490914@qq.com>";  
$to = "Ramona Recipient <623832952@qq.com>";  
$subject = "Hi!";  
$body = "Hi,\n\nHow are you?这是来自PHP发的邮件";  
   
$host = "smtp.qq.com";  
$username = "332490914";  
$password = "XXXXX";  
   mail($to, $subject, $body);
$headers = array (
	'From' => $from,  
	'To' => $to,  
	'Subject' => $subject);  
$smtp = Mail::factory('smtp',  
   array (
	'host' => $host,  
     	'auth' => true,  
    	'username' => $username,  
    	'password' => $password));  
   
$mail = $smtp->send($to, $headers, $body);  

if (PEAR::isError($mail)) 
{  
   echo("<p>" . $mail->getMessage() . "</p>");  
} else 
{  
    echo("<p>Message successfully sent!</p>");  
} 






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

李昂的数字之旅

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值