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
PHP CURL获取返回值的方法
May 04 PHP
php的XML文件解释类应用实例
Sep 22 PHP
thinkphp浏览历史功能实现方法
Oct 29 PHP
php实现cookie加密的方法
Mar 10 PHP
PHP实现的购物车类实例
Jun 17 PHP
Thinkphp框架开发移动端接口(1)
Aug 18 PHP
PHP中Trait及其应用详解
Feb 14 PHP
微信公众号实现会员卡领取功能
Jun 08 PHP
PHP crypt()函数的用法讲解
Feb 15 PHP
laravel 使用auth编写登录的方法
Sep 30 PHP
php实现统计IP数及在线人数的示例代码
Jul 22 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
社区(php&amp;&amp;mysql)二
2006/10/09 PHP
一个域名查询的程序
2006/10/09 PHP
一个简易需要注册的留言版程序
2006/10/09 PHP
关于PHP文件的自动运行方法分析
2016/05/13 PHP
PHP获取文件扩展名的常用方法小结【五种方式】
2018/04/27 PHP
PHP PDOStatement::fetchColumn讲解
2019/01/31 PHP
js判断生效时间不得大于失效时间的思路及代码
2013/04/23 Javascript
JQuery实现鼠标滑过显示导航下拉列表
2013/09/12 Javascript
EasyUI实现第二层弹出框的方法
2015/03/01 Javascript
js获取滚动距离的方法
2015/05/30 Javascript
用javascript实现自动输出网页文本
2015/07/30 Javascript
JavaScript焦点事件、鼠标事件和滚轮事件使用详解
2016/01/15 Javascript
JavaScript数组的栈方法与队列方法详解
2016/05/26 Javascript
Angular4学习笔记之新建项目的方法
2017/07/18 Javascript
基于jQuery实现手风琴菜单、层级菜单、置顶菜单、无缝滚动效果
2017/07/20 jQuery
jQuery事件对象的属性和方法详解
2017/09/09 jQuery
Vue添加请求拦截器及vue-resource 拦截器使用
2017/11/23 Javascript
Vue中父子组件通讯之todolist组件功能开发
2018/05/21 Javascript
详解django模板与vue.js冲突问题
2019/07/07 Javascript
Node.js系列之连接DB的方法(3)
2019/08/30 Javascript
vue实现购物车功能(商品分类)
2020/04/20 Javascript
python中使用OpenCV进行人脸检测的例子
2014/04/18 Python
python利用requests库进行接口测试的方法详解
2018/07/06 Python
Python字符串逆序输出的实例讲解
2019/02/16 Python
Python3 串口接收与发送16进制数据包的实例
2019/06/12 Python
numpy:np.newaxis 实现将行向量转换成列向量
2019/11/30 Python
浅析与CSS3的loading动画加载相关的transition优化
2015/05/18 HTML / CSS
GAZMAN官网:澳大利亚领先的男装品牌
2019/12/19 全球购物
专营店会计助理岗位职责
2013/11/29 职场文书
各营销点岗位职责范本
2014/03/05 职场文书
体育教师求职信
2014/06/30 职场文书
员工安全生产责任书
2014/07/22 职场文书
辞职信模板(中英文版)
2015/02/27 职场文书
2015年售票员工作总结
2015/04/29 职场文书
2015小学音乐教师个人工作总结
2015/07/21 职场文书
win11怎么用快捷键锁屏? windows11锁屏的几种方法
2021/11/21 数码科技