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获取某个目录大小的代码
Sep 10 PHP
php获取本地图片文件并生成xml文件输出具体思路
Apr 27 PHP
解决phpmyadmin中缺少mysqli扩展问题的方法
May 06 PHP
php中通过curl检测页面是否被百度收录
Sep 27 PHP
php缩放gif和png图透明背景变成黑色的解决方法
Oct 14 PHP
WordPress中调试缩略图的相关PHP函数使用解析
Jan 07 PHP
浅谈PHP Cookie处理函数
Jun 10 PHP
php注册和登录界面的实现案例(推荐)
Oct 24 PHP
总结一些PHP中好用但又容易忽略的小知识
Jun 02 PHP
PHP实现的简单在线计算器功能示例
Aug 02 PHP
PHP创建文件及写入数据(覆盖写入,追加写入)的方法详解
Feb 15 PHP
php模式设计之观察者模式应用实例分析
Sep 25 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分页函数
2006/10/09 PHP
php防注入,表单提交值转义的实现详解
2013/06/10 PHP
php图像处理类实例
2015/07/28 PHP
thinkphp如何获取客户端IP
2015/11/03 PHP
thinkPHP框架实现多表查询的方法
2018/06/14 PHP
wordpress自定义标签云与随机获取标签的方法详解
2019/03/22 PHP
用js实现上传图片前的预览(TX的面试题)
2007/08/14 Javascript
DOM Scripting中的图片切换[兼容Firefox]
2010/06/12 Javascript
js精度溢出解决方案
2012/12/02 Javascript
Javascript学习笔记之数组的构造函数
2014/11/23 Javascript
JavaScript转换与解析JSON方法实例详解
2015/11/24 Javascript
JavaScript中的Object对象学习教程
2016/05/20 Javascript
Bootstrap模态框(modal)垂直居中的实例代码
2016/08/18 Javascript
基于JS+Canves实现点击按钮水波纹效果
2016/09/15 Javascript
简单谈谈require模块化jquery和angular的问题
2017/06/23 jQuery
[01:59]游戏“zheng”当时试玩会
2019/08/21 DOTA
用Python的SimPy库简化复杂的编程模型的介绍
2015/04/13 Python
Python中函数的参数定义和可变参数用法实例分析
2015/06/04 Python
Python 中 Virtualenv 和 pip 的简单用法详解
2017/08/18 Python
python与caffe改变通道顺序的方法
2018/08/04 Python
Python如何调用外部系统命令
2019/08/07 Python
Tensorflow的常用矩阵生成方式
2020/01/04 Python
Python如何获取Win7,Win10系统缩放大小
2020/01/10 Python
Python中的__init__作用是什么
2020/06/09 Python
利用Python实现最小二乘法与梯度下降算法
2021/02/21 Python
HTML5 weui使用笔记
2019/11/21 HTML / CSS
Lulu Guinness露露·吉尼斯官网:红唇包
2019/02/03 全球购物
活动总结报告怎么写
2014/07/03 职场文书
匿名信格式范文
2015/05/27 职场文书
Python如何使用logging为Flask增加logid
2021/03/30 Python
Pytorch中Softmax与LogSigmoid的对比分析
2021/06/05 Python
springboot项目以jar包运行的操作方法
2021/06/30 Java/Android
Python 实现Mac 屏幕截图详解
2021/10/05 Python
WCG2010 星际争霸决赛 Flash vs Goojila 1 星际经典比赛回顾
2022/04/01 星际争霸
JavaScript声明变量和数据类型的转换
2022/04/12 Javascript
带你了解Java中的ForkJoin
2022/04/28 Java/Android