PHP发送邮件

来源:互联网 发布:淘宝店铺一键发布宝贝 编辑:程序博客网 时间:2024/06/02 04:07

网上搜索,PHP发送邮件主要有三种方法:

一、利用php自带的 mail() 函数

二、利用别人封装好的邮件类

三、利用第三方SMTP服务器

第一种方法需要本地有SMTP服务器,那就需要下载安装或自己搭建;第二钟方法是最简单的,直接下载配置引用;第三种是连接到第三方SMTP服务器,用命令行执行发邮件。因为第三种用命令行执行看起来挺好玩,所以用第三种了。


刚开始想直接用php的shell_exec()函数来执行命令行的,但发现这函数执行不了telnet命令(远程连接服务器)。

然后网上找到一个使用socket的例子,以163邮箱发送邮件到QQ邮箱为例,简单介绍下步骤:

1、先登录163邮箱,设置那里开启POP3和IMAP服务。此时会得到一个授权码,保存好,如果忘记了可以重置授权码

2、开始敲代码,先填写好基本属性:

$host = "smtp.163.com"; //163SMTP主机地址
$port = 25; //端口
$username = base64_encode("13477777777@163.com"); //账号邮箱,需要用base64编码
$password = base64_encode("777777"); //授权码,不是登录密码,需要用base64编码
$from_mail = "13477777777@163.com"; //要发送邮件的邮箱(与授权邮箱$username一样,目前没试过用不一样的邮箱)
$to_mail = "332777777@qq.com"; //要接收邮件的邮箱
$title = "邮件标题";
$content = "邮件内容";

3、利用socket连接到163SMTP服务器:

$socket = fsockopen($host, $port);

// fsockopen() 这函数貌似是socket做过处理的一个应用,使用的时候跳过创建socket的步骤,直接连接到服务器,详细的使用说明可以去百度下。

此时可以使用 fgets($socket) 来获取返回值,如果返回值有220这个字符,则连接成功。

4、利用命令行来执行发送邮件的操作:

fwrite($socket, $cmd); //写入命令,$cmd就是命令行,写入成功会返回写入的字符串长度,失败会返回FALSE。

需要写入的命令$cmd有下面几句:

"HELO {$host}\r\n", //向服务器表明身份?
"AUTH LOGIN \r\n", //授权登录
"{$username}\r\n", //邮箱账号
"{$password}\r\n", //授权码
"MAIL FROM:<{$from_mail}>\r\n", //要发送邮件的邮箱
"RCPT TO:<{$to_mail}>\r\n", //要接收邮件的邮箱
"DATA\r\n", //发送数据
"From:{$from_mail}\r\nTo:{$to_mail}\r\nSubject:{$title}\r\nContent-Type: Text/html;\r\ncharset=gb2312\r\n\r\n{$content}\r\n.\r\n", //内容
 "QUIT\r\n" //退出连接

注:\r\n这命令必须要写入,相当于执行回车键,尤其是第七句命令,很长很容易出错,最后的\r\n.\r\n,缺一个点都不行。

这八句命令可以逐条执行,也可以写个循环语句执行。

每条命令执行后都会有个返回信息,用 fgets($socket) 可获取,带有某个特定状态码说明执行成功,执行失败的话也会返回错误信息,更详细的说明操作可以百度搜索。

至于用QQ邮箱发邮件,步骤应该跟163的基本一样,但不知道为什么执行授权码验证时会报错说授权码错误……



原创粉丝点击