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.ini中文版(2)
Oct 09 PHP
PHP实现网上点歌(二)
Oct 09 PHP
php xfocus防注入资料
Apr 27 PHP
PHP 编写的 25个游戏脚本
May 11 PHP
PHP file_exists问题杂谈
May 07 PHP
php日期转时间戳,指定日期转换成时间戳
Jul 17 PHP
PHP中extract()函数的定义和用法
Aug 17 PHP
PHP写的资源下载防盗链类分享
May 12 PHP
ThinkPHP后台首页index使用frameset时的注意事项分析
Aug 22 PHP
php制作基于xml的RSS订阅源功能示例
Feb 08 PHP
PHP简单实现欧拉函数Euler功能示例
Nov 06 PHP
Yii框架分页技术实例分析
Aug 30 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
用Socket发送电子邮件(利用需要验证的SMTP服务器)
2006/10/09 PHP
php fseek函数读取大文件两种方法
2016/10/12 PHP
PHP XML和数组互相转换详解
2016/10/26 PHP
JavaScript实现QueryString获取GET参数的方法
2013/07/02 Javascript
javascipt匹配单行和多行注释的正则表达式
2013/11/20 Javascript
举例讲解JavaScript中关于对象操作的相关知识
2015/11/16 Javascript
JavaScript实现数据类型的相互转换
2016/03/06 Javascript
Bootstrap媒体对象的实现
2016/05/01 Javascript
全面了解javascript中的错误处理机制
2016/07/18 Javascript
详解springmvc 接收json对象的两种方式
2016/12/06 Javascript
如何给ss bash 写一个 WEB 端查看流量的页面
2017/03/23 Javascript
详谈构造函数加括号与不加括号的区别
2017/10/26 Javascript
webpack+vue中使用别名路径引用静态图片地址
2017/11/20 Javascript
vue 实现类似淘宝星级评分的示例
2018/03/01 Javascript
微信小程序点击view动态添加样式过程解析
2020/01/21 Javascript
python网络编程学习笔记(四):域名系统
2014/06/09 Python
Python中字符串的格式化方法小结
2016/05/03 Python
python如何查看系统网络流量的信息
2016/09/12 Python
Pycharm编辑器技巧之自动导入模块详解
2017/07/18 Python
Python实现的爬取小说爬虫功能示例
2019/03/30 Python
Python实现朴素贝叶斯的学习与分类过程解析
2019/08/24 Python
Python高级特性——详解多维数组切片(Slice)
2019/11/26 Python
15行Python代码实现免费发送手机短信推送消息功能
2020/02/27 Python
python+selenium 脚本实现每天自动登记的思路详解
2020/03/11 Python
解决python中import文件夹下面py文件报错问题
2020/06/01 Python
pycharm全局搜索的具体步骤
2020/07/28 Python
CSS3实现各种图形的示例代码
2016/10/19 HTML / CSS
安纳塔拉酒店度假村及水疗官方网站:Anantara Hotel
2016/08/25 全球购物
工商管理专业应届生求职信
2013/11/04 职场文书
个人党性剖析材料
2014/02/03 职场文书
感恩老师的演讲稿
2014/05/06 职场文书
学校个人对照检查材料
2014/08/26 职场文书
商务考察邀请函模板
2015/02/02 职场文书
运动会开幕式新闻稿
2015/07/17 职场文书
Redis延迟队列和分布式延迟队列的简答实现
2021/05/13 Redis
最新动漫情报:2022年7月新番定档超过30部, OVERLORD骨王第四季也在其中噢
2022/05/04 日漫