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 相关文章推荐
第十四节--命名空间
Nov 16 PHP
MySQL相关说明
Jan 15 PHP
坏狼的PHP学习教程之第1天
Jun 15 PHP
php 页面执行时间计算代码
Dec 04 PHP
php中检查文件或目录是否存在的代码小结
Oct 22 PHP
PHP类与对象中的private访问控制的疑问
Nov 01 PHP
深入eAccelerator与memcached的区别详解
Jun 06 PHP
ThinkPHP基本的增删查改操作实例教程
Aug 22 PHP
php中call_user_func函数使用注意事项
Nov 21 PHP
thinkphp中session和cookie无效的解决方法
Dec 19 PHP
PHP异常处理Exception类
Dec 11 PHP
PHP的imageTtfText()函数深入详解
Mar 03 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执行sql语句的写法
2009/03/10 PHP
CI(CodeIgniter)模型用法实例分析
2016/01/20 PHP
PHP生成及获取JSON文件的方法
2016/08/23 PHP
PHP常用操作类之通信数据封装类的实现
2017/07/16 PHP
Laravel接收前端ajax传来的数据的实例代码
2017/07/20 PHP
Javascript this指针
2009/07/30 Javascript
Js获取事件对象代码
2010/08/05 Javascript
封装的原生javascript弹出层代码
2010/09/24 Javascript
JQuery中getJSON的使用方法
2010/12/13 Javascript
jQuery中:focus选择器用法实例
2014/12/30 Javascript
javascript中for/in循环及使用技巧
2015/09/01 Javascript
javascript常用函数(2)
2015/11/05 Javascript
Webwork 实现文件上传下载代码详解
2016/02/02 Javascript
JavaScript利用Date实现简单的倒计时实例
2017/01/12 Javascript
NodeJS测试框架mocha入门教程
2017/03/28 NodeJs
Vue之Watcher源码解析(1)
2017/07/19 Javascript
JS计算距当前时间的时间差实例
2017/12/29 Javascript
浅谈node模块与npm包管理工具
2018/01/03 Javascript
JavaScript实现构造json数组的方法分析
2018/08/17 Javascript
koa源码中promise的解读
2018/11/13 Javascript
js实现蒙版效果
2020/01/11 Javascript
Pytorch Tensor的统计属性实例讲解
2019/12/30 Python
Selenium基于PIL实现拼接滚动截图
2020/04/10 Python
Python函数__new__及__init__作用及区别解析
2020/08/31 Python
Python操作PostgreSql数据库的方法(基本的增删改查)
2020/12/29 Python
浅析HTML5 Landmark
2020/09/11 HTML / CSS
日本土著品牌,综合型购物网站:Cecile
2016/08/23 全球购物
欧洲品牌瓷器餐具网上商店:Porzellantreff.de
2018/04/04 全球购物
The Body Shop美体小铺西班牙官网:天然化妆品
2019/06/21 全球购物
巴西最大的玩具连锁店:Ri Happy
2020/06/17 全球购物
2014升学宴答谢词
2014/01/26 职场文书
三方股份合作协议书
2014/10/13 职场文书
2015年大学辅导员工作总结
2015/05/12 职场文书
使用 JavaScript 制作页面效果
2021/04/21 Javascript
mybatis3中@SelectProvider传递参数方式
2021/08/04 Java/Android
详解Vue项目的打包方式(生成dist文件)
2022/01/18 Vue.js