使用php发送电子邮件(phpmailer)
在项目开发过程中,经常会用到通过程序发送电子邮件,例如:注册用户通过邮件激活,通过邮件找回密码,发送报表等。这里介绍几种通过PHP发送电子邮件的 方式(1)通过mail()函数发送邮件(2)使用fsockopen方式连接smtp服务器发送(3)使用phpmailer邮件类发送。个人推荐使用 phpmailer邮件类发送,phpmailer比较方便使用且功能强大,接下来对这几种方式分别做一下介绍。
(1)通过mail()函数发送邮件
PHP中的mail() 函数允许从脚本中直接发送电子邮件,格式:
mail($to,$subject,$message,$headers,$parameters);
to 必需。规定邮件的接收者。
subject 必需。规定邮件的主题。该参数不能包含任何换行字符。
message 必需。规定要发送的消息。
headers 可选。规定额外的报头,比如 From(发件人), Cc(抄送) 以及 Bcc(密送)。
parameters 可选。规定 sendmail 程序的额外参数。
需要特别mail()函数用法相当简单,但并不我们使用mail()函数就可以直接发送邮件了,需要我们做一些配置,在Windows与Linux系统上的配置方式有些不同。我们发送邮件需邮件服务器,如果是Linux服务器需要在php.ini中的sendmail_path设置为服务器的路径,如果Linux在安装时安装了sendmail,可以这样设置:
sendmail_path = /usr/sbin/sendmail
如果安装的是Qmail等其他Mail服务器则填写对应的路径即可。
如果是Windwos操作系统则需要配置SMTP和smtp_port着两个参数,例如:
SMTP = localhost
smtp_port = 25
如果将SMTP设置为localhost则本机必须安装邮件服务器才能正常发信,当然也可以设置其他邮件服务器的域名或IP地址,还有一个可选参数是sendmail_from可以设置默认的发件人邮箱。看一下php.ini的配置项:
(2)使用fsockopen方式连接smtp服务器发送
首先需要有一个smtp邮件服务器,可以自己搭建也可以使用网易,新浪等免费的邮件服务器,发送的过程大致如下:
1.建立TCP连接
2.客户端发送HELO命令以标识发件人自己的身份,然后客户端发送MAIL命令,服务器端正希望以OK作为响应,表明准备接收
3.客户端发送RCPT命令,以标识该电子邮件的计划接收人,可以有多个RCPT行,服务器端则表示是否愿意为收件人接受邮件
4.协商结束,发送邮件,用命令DATA发送
目前绝大多数的服务商都提供SMTP服务,如果我们要使用的MTA需要用户认证(绝大多数的邮件服务商都需要认证)那就需要我们使用有效的用户名密码登
陆。以网易的163邮箱为例,首先注册一个邮箱账号比如:mytest@163.com,这里我们使用一个写好的email.class.php来实现与
SMTP服务器实现通信并发送邮件的功能,使用前需要在配置文件config.php中配置一下各项参数,详细说明可以参考附件中的示例代码。
(3)使用phpMailer邮件类发送电子邮件(特别推荐)
先来几句废话:
phpMailer是一个非常强大的php发送邮件类,可以设定发送邮件地址、回复地址、邮件主题、html网页,上传附件,并且使用起来非常方便。
phpMailer的特点:
1、在邮件中包含多个 TO、CC、BCC 和 REPLY-TO。
2、平台应用广泛,支持的 SMTP 服务器包括 Sendmail、qmail、Postfix、Gmail、Imail、Exchange 等等。
3、支持嵌入图像,附件,HTML 邮件。
4、可靠的强大的调试功能。
5、支持 SMTP 认证。
6、自定义邮件头。
7、支持 8bit、base64、binary 和 quoted-printable 编码。
使用phpMailer发送邮件需要class.phpmailer.php和class.smtp.php两个文件,比较简单的代码片段:
- <?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协议发送邮件了。
使用php发送电子邮件(phpmailer)的更多相关文章
- WordPress ”无法发送电子邮件,可能原因:您的主机禁用了mail()函数“的解决办法
WordPress网站中出现 "无法发送电子邮件,可能原因:您的主机禁用了mail()函数"的情况一般都是因为所在主机环境不支持在线邮件收发功能导致,如果不支持的话,那么像类似 N ...
- JAVA实现发送电子邮件
相信大家对于网站也好,手机app也好,用户注册时,需要进行邮箱验证的功能特别好奇吧,本篇我将带领大家一起实现一下这个简单而又神奇的小功能,让我们的应用也可以加入这些神奇的元素.废话不多说,下面开始我们 ...
- javamail模拟邮箱功能发送电子邮件-基础实战篇(javamail API电子邮件实例)
引言: JavaMail 是一种可选的.能用于读取.编写和发送电子消息的包 JavaMail jar包下载地址:http://java.sun.com/products/javamail/downlo ...
- javamail模拟邮箱功能发送电子邮件-中级实战篇【新增附件发送方法】(javamail API电子邮件实例)
引言: JavaMail jar包下载地址:http://java.sun.com/products/javamail/downloads/index.html 此篇是紧随上篇文章而封装出来的,阅读本 ...
- 在ASP.NET中发送电子邮件的实例教程
首先.导入命名空间: 代码如下 复制代码 using System.Net.Mail; 定义发送电子邮件的方法[网上很多不同的,可以对比着看一下,WinForm的也适用]: 代码如下 复制代码 /// ...
- ASP.NET 发送电子邮件简介
1.补充知识 (1)POP3和SMTP服务器是什么? 简单点来说:POP3 用于接收电子邮件 ,SMTP 用于发送电子邮件. (1)POP3具体指什么? POP3(Post Office Protoc ...
- 利用Excel批量高速发送电子邮件
利用Excel批量高速发送电子邮件,分两步: 1. 准备待发送的数据: a.) 打开Excel,新建Book1.xlsx b.) 填入以下的内容, 第一列:接收人,第二列:邮件标题,第三列:正文,第四 ...
- Spring发送电子邮件
Spring提供了发送电子邮件的功能,它向用户屏蔽了底层邮件系统的一些细节,同时代表客户端负责底层的资源处理. Spring的邮件服务支持主要是通过JavaMailSender这个接口实现的: p ...
- 在iOS当中发送电子邮件和短信
iOS实现发送电子邮件的方法很简单,首先导入MessageUI.framework框架,然后代码如下: #import "RPViewController.h" //添加邮件头文件 ...
随机推荐
- Mysql中查看表的类型InnoDB
问题描述: MySQL 数据表主要支持六种类型 ,分别是:BDB.HEAP.ISAM.MERGE.MYISAM.InnoBDB. 这六种又分为两类,一类是“事务安全型”(transaction-s ...
- HighCharts 后台加载数据的时候去掉默认的 series
var chart; var options = { chart: { renderTo: 'container', type:'line' }, title: { text: '历史趋势时序图', ...
- TimeSpan XML序列化
/// <summary> /// 刷新时间 默认为1秒 /// </summary> /// <value>The refresh time.</value ...
- .Net 笔记(二) 泛型和集合
前言: 本文中介绍 泛型和集合的区别.也算是自己的一个知识点的回顾,并且把它们写在自己的笔记中. 1.集合: 在讲到集合之前,我们先来回顾下数组的知识点吧,因为集合和数组的关系也是比较微妙的各有利弊, ...
- mongodb基本操作及存储图片显示方案
先介绍下mongodb的基本操作及使用 第一部:开启安全性验证 如果需要给MongoDB数据库使用安全验证,则需要用--auth开启安全性检查,则只有数据库认证的用户才能执行读写操作,开户安全性检查, ...
- jquery validate.js表单验证的基本用法入门
这里转载一篇前辈写的文章,在我自己的理解上修改了一下,仅作记录. 先贴一个国内某大公司的代码: 复制代码 代码如下: <script type="text/javascript&quo ...
- 指纹增强程序Hong_enhancement
本算法是基于Lin Hong et al 的论文“Fingerprint ImageEnhancement: Algorithm and Performance Evaluation”编写而成.其中一 ...
- Image控件播放 GIF文件
uses Vcl.Imaging.GIFImg;procedure TForm1.Button2Click(Sender: TObject);begin Image1.Picture.LoadF ...
- 项目中发现的一些关于JavaScript中JSON的注意点
一个是怎样创建JSON: var obj = {}; obj['name'] = value; obj['anotherName'] = anotherValue; 假设要创建多级的JSON,则: i ...
- LayoutInflater的inflate函数用法
LayoutInflater作用是将layout的xml布局文件实例化为View类对象. 获取LayoutInflater的方法有如下三种: LayoutInflater inflater=(Layo ...