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 相关文章推荐
新浪新闻小偷
Oct 09 PHP
加速XP搜索功能堪比vista
Mar 22 PHP
Gregarius中文日期格式问题解决办法
Apr 22 PHP
追求程序速度,而不是编程的速度
Apr 23 PHP
详解php的魔术方法__get()和__set()使用介绍
Sep 19 PHP
探讨如何把session存入数据库
Jun 07 PHP
单点登录 Ucenter示例分析
Oct 29 PHP
php pdo oracle中文乱码的快速解决方法
May 16 PHP
thinkphp整合系列之极验滑动验证码geetest功能
Jun 18 PHP
laravel框架查询数据集转为数组的两种方法
Oct 10 PHP
laravel 获取某个查询的查询SQL语句方法
Oct 12 PHP
Yii框架 session 数据库存储操作方法示例
Nov 18 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
追忆往昔!浅谈收音机的百年发展历史
2021/03/01 无线电
PHP遍历数组的几种方法
2012/03/22 PHP
php判断并删除空目录及空子目录的方法
2015/02/11 PHP
Laravel网站打开速度优化的方法汇总
2017/07/16 PHP
用document.documentElement取代document.body的原因分析
2009/11/12 Javascript
上传文件返回的json数据会被提示下载问题解决方案
2014/12/03 Javascript
Javascript常用小技巧汇总
2015/06/24 Javascript
解决js图片加载时出现404的问题
2020/11/30 Javascript
jQuery Validate插件实现表单强大的验证功能
2015/12/18 Javascript
分享有关jQuery中animate、slide、fade等动画的连续触发、滞后反复执行的bug
2016/01/10 Javascript
Vue.js组件使用开发实例教程
2016/11/01 Javascript
Vue和Bootstrap的整合思路详解
2017/06/30 Javascript
ligerUI---ListBox(列表框可移动的实例)
2017/11/28 Javascript
Vue中this.$router.push参数获取方法
2018/02/27 Javascript
详解微信小程序获取当前时间及日期的方法
2019/04/28 Javascript
js实现Element中input组件的部分功能并封装成组件(实例代码)
2021/03/02 Javascript
[01:08:32]DOTA2-DPC中国联赛 正赛 DLG vs PHOENIX BO3 第二场 1月18日
2021/03/11 DOTA
python调用windows api锁定计算机示例
2014/04/17 Python
Python获取服务器信息的最简单实现方法
2015/03/05 Python
初步介绍Python中的pydoc模块和distutils模块
2015/04/13 Python
python压缩文件夹内所有文件为zip文件的方法
2015/06/20 Python
Python实现全角半角字符互转的方法
2016/11/28 Python
python基础教程之匿名函数lambda
2017/01/17 Python
Python编程求质数实例代码
2018/01/31 Python
Python实现的FTP通信客户端与服务器端功能示例
2018/03/28 Python
Python if语句知识点用法总结
2018/06/10 Python
对python中Librosa的mfcc步骤详解
2019/01/09 Python
python3实现小球转动抽奖小游戏
2020/04/15 Python
PyQt5实现登录页面
2020/05/30 Python
python计算auc的方法
2020/09/09 Python
CSS实现进度条和订单进度条的示例
2020/11/05 HTML / CSS
浅析数据存储的三种方式 cookie sessionstorage localstorage 的异同
2020/06/04 HTML / CSS
3D空间设计学生找工作的自我评价
2013/10/28 职场文书
国旗下的演讲稿
2014/05/08 职场文书
研修心得体会
2014/09/04 职场文书
信息合作协议书
2014/10/09 职场文书