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调用Webservice实例代码
Jul 29 PHP
PHP 第一节 php简介
Apr 28 PHP
ThinkPHP关联模型操作实例分析
Sep 23 PHP
记录mysql性能查询过程的使用方法
May 02 PHP
PHP的PSR规范中文版
Sep 28 PHP
php采用curl模仿登录人人网发布动态的方法
Nov 07 PHP
php+xml编程之SimpleXML的应用实例
Jan 24 PHP
php 三元运算符实例详细介绍
Dec 15 PHP
php+webSoket实现聊天室示例代码(附源码)
Feb 17 PHP
php使用curl实现ftp文件下载功能
May 16 PHP
php实现留言板功能(会话控制)
May 23 PHP
针对thinkPHP5框架存储过程bug重写的存储过程扩展类完整实例
Jun 16 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实现模仿socket请求返回页面的方法
2014/11/04 PHP
PHP框架Laravel学习心得体会
2015/10/28 PHP
PHP新建类问题分析及解决思路
2015/11/19 PHP
Redis构建分布式锁
2017/03/28 PHP
PHP实现下载远程图片保存到本地的方法
2017/06/19 PHP
Smarty模板变量与调节器实例详解
2019/07/20 PHP
PHP使用POP3读取邮箱接收邮件的示例代码
2020/07/08 PHP
js 实现无干扰阴影效果 简单好用(附文件下载)
2009/12/27 Javascript
ExtJS的拖拽效果示例
2013/12/09 Javascript
js弹出确认是否删除对话框
2014/03/27 Javascript
jQuery使用andSelf()来包含之前的选择集
2014/05/19 Javascript
jQuery实现的原图对比窗帘效果
2014/06/15 Javascript
js中的如何定位固定层的位置
2014/06/15 Javascript
jquery实现的Banner广告收缩效果代码
2015/09/02 Javascript
NodeJs的优势和适合开发的程序
2016/08/14 NodeJs
js实现日历的简单算法
2017/01/24 Javascript
node.js中express-session配置项详解
2017/05/31 Javascript
Python Requests安装与简单运用
2016/04/07 Python
python3+opencv3识别图片中的物体并截取的方法
2018/12/05 Python
Python中的异常处理try/except/finally/raise用法分析
2019/02/28 Python
Python面向对象程序设计类的多态用法详解
2019/04/12 Python
详解django实现自定义manage命令的扩展
2019/08/13 Python
Python操作excel的方法总结(xlrd、xlwt、openpyxl)
2019/09/02 Python
使用PyCharm进行远程开发和调试的实现
2019/11/04 Python
Django中FilePathField字段的用法
2020/05/21 Python
加拿大著名时装品牌:SOIA & KYO
2016/08/23 全球购物
美体小铺美国官网:The Body Shop美国
2017/11/10 全球购物
中餐厅主管的职责范文
2014/02/04 职场文书
公司接待方案
2014/03/08 职场文书
2014年高中班主任工作总结
2014/11/08 职场文书
合作合同协议书范本
2015/01/27 职场文书
置业顾问岗位职责
2015/02/09 职场文书
告诉你创业计划书的8个实用技巧
2019/07/12 职场文书
上手简单,功能强大的Python爬虫框架——feapder
2021/04/27 Python
Python趣味挑战之给幼儿园弟弟生成1000道算术题
2021/05/28 Python
MySQL 5.7常见数据类型
2021/07/15 MySQL