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实现ping
Oct 09 PHP
在apache下限制每个虚拟主机的并发数!!!!
Oct 09 PHP
在IIS上安装PHP4.0正式版
Oct 09 PHP
php中通过smtp发邮件的类,测试通过
Jan 22 PHP
安装PHP可能遇到的问题“无法载入mysql扩展” 的解决方法
Apr 16 PHP
php5 mysql分页实例代码
Apr 10 PHP
php中get_headers函数的作用及用法的详细介绍
Apr 27 PHP
PHP多线程类及用法实例
Dec 03 PHP
关于php 高并发解决的一点思路
Apr 16 PHP
PHP 中TP5 Request 请求对象的实例详解
Jul 31 PHP
在php的yii2框架中整合hbase库的方法
Sep 20 PHP
php 调用百度sms来发送短信的实现示例
Nov 02 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接收App端发送文件流的方法
2016/09/23 PHP
php + nginx项目中的权限详解
2017/05/23 PHP
几个比较经典常用的jQuery小技巧
2010/03/01 Javascript
JavaScript 原型与继承说明
2010/06/09 Javascript
C#中TrimStart,TrimEnd,Trim在javascript上的实现
2011/01/17 Javascript
JS显示表格内指定行html代码的方法
2015/03/31 Javascript
怎么通过onclick事件获取js函数返回值(代码少)
2015/07/28 Javascript
jquery+CSS3实现淘宝移动网页菜单效果
2015/08/31 Javascript
jQuery Ajax File Upload实例源码
2016/12/12 Javascript
微信小程序 封装http请求实例详解
2017/01/16 Javascript
js获取一组日期中最近连续的天数
2017/05/25 Javascript
Vue2.0 组件传值通讯的示例代码
2017/08/01 Javascript
JavaScript中一些特殊的字符运算
2017/08/17 Javascript
详解如何使用PM2将Node.js的集群变得更加容易
2017/11/15 Javascript
小程序关于请求同步的总结
2019/05/05 Javascript
vue使用axios实现excel文件下载的功能
2020/07/16 Javascript
React Ant Design树形表格的复杂增删改操作
2020/11/02 Javascript
原生JavaScript实现换肤
2021/02/19 Javascript
[04:26]DOTA2上海特锦赛小组赛第二日 TOP10精彩集锦
2016/02/27 DOTA
python根据文件大小打log日志
2014/10/09 Python
Python代码生成视频的缩略图的实例讲解
2019/12/22 Python
五分钟带你搞懂python 迭代器与生成器
2020/08/30 Python
scrapy与selenium结合爬取数据(爬取动态网站)的示例代码
2020/09/28 Python
Python tkinter实现日期选择器
2021/02/22 Python
Ariat英国官网:为世界顶级马术运动员制造最优质的鞋类和服装
2020/02/14 全球购物
C/C++ 笔试、面试题目大汇总
2015/11/21 面试题
质检的岗位职责
2013/11/17 职场文书
秋季开学典礼主持词
2014/03/19 职场文书
酒店管理专业毕业生求职自荐信
2014/04/28 职场文书
解除劳动合同证明书
2014/09/26 职场文书
2015年检验科工作总结
2015/04/27 职场文书
商场圣诞节活动总结
2015/05/06 职场文书
应届生个人的求职(自荐信范文2篇)
2019/08/23 职场文书
CSS filter 有什么神奇用途
2021/05/25 HTML / CSS
gateway与spring-boot-starter-web冲突问题的解决
2021/07/16 Java/Android
Android中View.post和Handler.post的关系
2022/06/05 Java/Android