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>");
}