介绍几种通过PHP发送电子邮件的 方式(1)通过mail()函数发送邮件(2)使用fsockopen方式连接smtp服务器发送(3)使用phpmailer邮件类发送。个人推荐使用 phpmailer邮件类发送,phpmailer比较方便使用且功能强大,接下来对这几种方式分别做一下介绍。
如果安装的是Qmail等其他Mail服务器则填写对应的路径即可。
如果是Windwos操作系统则需要配置SMTP和smtp_port着两个参数,例如:
如果将SMTP设置为localhost则本机必须安装邮件服务器才能正常发信,当然也可以设置其他邮件服务器的域名或IP地址,还有一个可选参数是sendmail_from可以设置默认的发件人邮箱。看一下php.ini的配置项:
(2)使用fsockopen方式连接smtp服务器发送
首先需要有一个smtp邮件服务器,可以自己搭建也可以使用网易,新浪等免费的邮件服务器,发送的过程大致如下:
(3)使用phpMailer邮件类发送电子邮件(特别推荐)
- <?php
-
require_once('./class.phpmailer.php');
- include_once("class.smtp.php");
- $mail
= new PHPMailer(true); //实例化PHPMailer类,true表示出现错误时抛出异常 - $mail->IsSMTP();
// 使用SMTP - try
{ -
$mail->CharSet ="UTF-8";//设定邮件编码 -
$mail->Host = "smtp.163.com"; // SMTP server -
$mail->SMTPDebug = 1;// 启用SMTP调试 1 = errors 2 = messages -
$mail->SMTPAuth = true;// 服务器需要验证 -
$mail->Port = 25;//默认端口 -
$mail->Username = "testuser"; //SMTP服务器的用户帐号 -
$mail->Password = "testpwd";//SMTP服务器的用户密码 -
$mail->AddReplyTo('****@com133.com', '回复'); //收件人回复时回复到此邮箱 -
$mail->AddAddress('****@test.com', '李明'); //收件人如果多人发送循环执行AddAddress()方法即可 还有一个方法时清除收件人邮箱ClearAddresses() - $mail->SetFrom('li1209@163.com',
'发件人');//发件人的邮箱 - $mail->Subject
= '这里是邮件的标题'; - $mail->Body
= '邮件内容'; - $mail->IsHTML(true);
-
$mail->Send(); -
echo "Message Sent OK"; - }
catch (phpmailerException $e) { -
echo $e->errorMessage();//从PHPMailer捕获异常 - }
catch (Exception $e) { -
echo $e->getMessage(); - }
- ?>
- 如果使用phpMailer发送html网页只需添加代码:
$body = file_get_contents('tpl.html'); //获取html网页内容
$mail->MsgHTML(eregi_replace("[\]",'',$body));
注:使用MsgHTML()方法时发送的邮件内容不仅仅是html代码,而且可以将html代码中的图片等内容作为附件嵌入到页面中一起发送,这在发送图 文并茂的信息时比较常用。并且使用该方法时无需对Body属性赋值也无需使用IsHTML()方法(即使使用也没有效果)。
通过SSL安全连接发送邮件
目前很多邮箱使用SLL加密方式连接发信,例如谷歌的GMAIL目前只支持加密连接,网易、腾讯等服务商目前也支持SLL加密方式连接。SSL协议端口号通常是465(具体视服务商而定),如果通过SSL方式发送邮件只需增加一个属性即可:
$mail->SMTPSecure = "ssl";
同时端口号更改为SSL的端口号,例如:
$mail->Port = 465;
这样就可以通过SSL协议发送邮件了。