php中通过curl smtp发送邮件


Posted in PHP onJune 05, 2012

先google了一下,发现很多问相关问题的但没有相关的解答,在phpclasses里也没有找到相关的类于是自己边看stmp的相关协议边开始尝试curl
SMTP协议
这个在网上可以找到多相关的例子,可以自己实验一下使用telnet去连接mail服务器

$ telnet 邮箱SMTP服务地址 25 
Trying 邮箱服务IP地址... 
Connected to 邮箱SMTP服务地址. 
Escape character is '^]'. 
exchange邮箱服务器地址 Microsoft ESMTP MAIL Service ready at Sat, 2 Jun 2012 15:02:12 +0800 
EHLO 127.0.0.1 
-exchange邮箱服务器地址 Hello [邮箱服务IP地址] 
-SIZE 
-PIPELINING 
-DSN 
-ENHANCEDSTATUSCODES 
-X-ANONYMOUSTLS 
-AUTH NTLM LOGIN 
-X-EXPS GSSAPI NTLM 
-8BITMIME 
-BINARYMIME 
-CHUNKING 
-XEXCH50 
XRDST 
AUTH LOGIN 
VXNlcm5hbWU6 
用户名(base64_encode) 
UGFzc3dvcmQ6 
密码(base64_encode) 
2.7.0 Authentication successful 
MAIL FROM:发件箱地址 
2.1.0 Sender OK 
RCPT TO:收件箱地址 
2.1.5 Recipient OK 
DATA 
Start mail input; end with <CRLF>.<CRLF> 
要发送的内容(这里的相关的规范有很多) 
. 
2.6.0 <0b476f30-3b96-4e3d-84d2-395a96d34000@exchange邮箱服务器地址> Queued mail for delivery 
QUIT 
2.0.0 Service closing transmission channel 
Connection closed by foreign host.

php测试代码:
<?php 
header("content-type:text/html;charset=utf-8"); 
$smtp = array( 
"url" => "邮箱SMTP服务器地址", 
"port" => "邮箱SMTP服务器端口", // 一般为25 
"username" => "用户名", 
"password" => "密码", 
"from" => "发件地址", 
"to" => "收件地址", 
"subject" => "测试一下标题", 
"body" => "测试一下内容" 
); 
$CRLF = "\r\n"; 
$test = ""; 
$curl = curl_init(); 
curl_setopt($curl, CURLOPT_URL, $smtp['url']); 
curl_setopt($curl, CURLOPT_PORT, $smtp['port']); 
curl_setopt($curl, CURLOPT_TIMEOUT,10); 
function inlineCode($str){ 
$str = trim($str); 
return $str?'=?UTF-8?B?'.base64_encode($str).'?= ':''; 
} 
function buildHeader($headers){ 
$ret = ''; 
foreach($headers as $k=>$v){ 
$ret.=$k.': '.$v."\n"; 
} 
return $ret; 
} 
// 
$header = array( 
'Return-path'=>'<'.$smtp['from'].'>', 
'Date'=>date('r'), 
'From'=> '<'.$smtp['from'].'>', 
'MIME-Version'=>'1.0', 
'Subject'=>inlineCode($smtp['subject']), 
'To'=>$smtp['to'], 
'Content-Type'=>'text/html; charset=UTF-8; format=flowed', 
'Content-Transfer-Encoding'=>'base64' 
); 
$data = buildHeader($header).$CRLF.chunk_split(base64_encode($smtp['body'])); 
$content = "EHLO ".$smtp["url"].$CRLF; // 先得hello一下 
$content .= "AUTH LOGIN".$CRLF.base64_encode($smtp["username"]).$CRLF.base64_encode($smtp["password"]).$CRLF; // 验证登陆 
$content .= "MAIL FROM:".$smtp["from"].$CRLF; // 发件地址 
$content .= "RCPT TO:".$smtp["to"].$CRLF; // 收件地址 
$content .= "DATA".$CRLF.$data.$CRLF.".".$CRLF; // 发送内容 
$content .= "QUIT".$CRLF; // 退出 
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); // curl接收返回数据 
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, $content); 
$test = curl_exec($curl); 
var_dump($test); 
echo "<br/>\r\n"; 
var_dump($content); 
// 结束 
curl_close($curl);

以上只是测试的php
包测试+修改花了近6个小时让产品的代码兼容了fsockopen和curl
以后有空写个兼容fsockopen和curl简单发送邮件的smtp类
PHP 相关文章推荐
深入分析php中接口与抽象类的区别
Jun 08 PHP
php创建基本身份认证站点的方法详解
Jun 08 PHP
通过curl模拟post和get方式提交的表单类
Apr 23 PHP
PHP+MYSQL会员系统的开发实例教程
Aug 23 PHP
PHP处理Json字符串解码返回NULL的解决方法
Sep 01 PHP
php去除数组中重复数据
Nov 18 PHP
php实现用于删除整个目录的递归函数
Mar 16 PHP
Yii控制器中操作视图js的方法
Jul 04 PHP
php监测数据是否成功插入到Mysql数据库的方法
Nov 25 PHP
php微信公众平台示例代码分析(二)
Dec 06 PHP
完美解决在ThinkPHP控制器中命名空间的问题
May 05 PHP
PHP设计模式之工厂方法设计模式实例分析
Apr 25 PHP
Smarty的配置与高级缓存技术分享
Jun 05 #PHP
PHP Parse Error: syntax error, unexpected $end 错误的解决办法
Jun 05 #PHP
php中json_decode()和json_encode()的使用方法
Jun 04 #PHP
php安全之直接用$获取值而不$_GET 字符转义
Jun 03 #PHP
PHP版网站缓存加快打开速度的方法分享
Jun 03 #PHP
PHP仿盗链代码
Jun 03 #PHP
PHP通过session id 实现session共享和登录验证的代码
Jun 03 #PHP
You might like
火影忍者:这才是千手柱间和扉间的真正死因,角都就比较搞笑了!
2020/03/10 日漫
PHP实现分页的一个示例
2006/10/09 PHP
PHP 常用函数库和一些实用小技巧
2009/01/01 PHP
为IP查询添加GOOGLE地图功能的代码
2010/08/08 PHP
PHP计算一年多少个星期和每周的开始和结束日期
2014/07/01 PHP
深入剖析PHP中printf()函数格式化使用
2016/05/23 PHP
PHP操作mysql数据库分表的方法
2016/06/09 PHP
PHP进阶学习之反射基本概念与用法分析
2019/06/18 PHP
JavaScript 对Cookie 操作的封装小结
2009/12/31 Javascript
JavaScript通过字典进行字符串翻译转换的方法
2015/03/19 Javascript
jQuery实现横向带缓冲的水平运动效果(附demo源码下载)
2016/01/29 Javascript
AngularJS中指令的四种基本形式实例分析
2016/11/22 Javascript
深入理解JavaScript继承的多种方式和优缺点
2017/05/12 Javascript
vue-cli打包后本地运行dist文件中的index.html操作
2020/08/12 Javascript
Vue+Bootstrap收藏(点赞)功能逻辑与具体实现
2020/10/22 Javascript
用webAPI实现图片放大镜效果
2020/11/23 Javascript
[43:53]OG vs EG 2019国际邀请赛淘汰赛 胜者组 BO3 第三场 8.22
2019/09/05 DOTA
Python模块学习 filecmp 文件比较
2012/08/27 Python
Python的字典和列表的使用中一些需要注意的地方
2015/04/24 Python
Python解析最简单的验证码
2016/01/07 Python
python 网络编程常用代码段
2016/08/28 Python
Python简单实现socket信息发送与监听功能示例
2018/01/03 Python
python删除过期log文件操作实例解析
2018/01/31 Python
python打包压缩、读取指定目录下的指定类型文件
2018/04/12 Python
Python多进程方式抓取基金网站内容的方法分析
2019/06/03 Python
python-tkinter之按钮的使用,开关方法
2019/06/11 Python
pytorch-RNN进行回归曲线预测方式
2020/01/14 Python
PyTorch: Softmax多分类实战操作
2020/07/07 Python
python使用dlib进行人脸检测和关键点的示例
2020/12/05 Python
Trip.com香港网站:Ctrip携程旗下,全球最大的网上旅游社之一
2016/08/01 全球购物
Ibatis中如何提高SQL Map的性能
2013/05/11 面试题
上海雨人软件技术开发有限公司测试题
2015/07/14 面试题
会计电算化专业毕业生求职信范文
2013/12/10 职场文书
Python爬虫中urllib3与urllib的区别是什么
2021/07/21 Python
AJAX实现省市县三级联动效果
2021/10/16 Javascript
Golang ort 中的sortInts 方法
2022/04/24 Golang