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 相关文章推荐
一个程序下载的管理程序(二)
Oct 09 PHP
PHP通过COM使用ADODB的简单例子
Dec 31 PHP
php 空格,换行,跳格使用说明
Dec 18 PHP
PHP XML操作的各种方法解析(比较详细)
Jun 17 PHP
基于magic_quotes_gpc与magic_quotes_runtime的区别与使用介绍
Apr 22 PHP
PHP实现递归无限级分类
Oct 22 PHP
php中namespace use用法实例分析
Jan 22 PHP
PHP数组函数知识汇总
May 12 PHP
php性能分析之php-fpm慢执行日志slow log用法浅析
Oct 17 PHP
ThinkPHP框架表单验证操作方法
Jul 19 PHP
CI框架简单分页类用法示例
Jun 06 PHP
通过PHP实现用户注册后邮箱验证激活
Nov 10 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循环输出数据库内容的代码
2008/05/24 PHP
php+ajax无刷新分页实例详解
2015/12/07 PHP
PHP字符串与数组处理函数用法小结
2020/01/07 PHP
js中使用DOM复制(克隆)指定节点名数据到新的XML文件中的代码
2011/07/27 Javascript
jQuery+css实现图片滚动效果(附源码)
2013/03/18 Javascript
js 单击式的下拉菜单效果实例
2013/08/13 Javascript
jQuery实现公告文字左右滚动的实例代码
2013/10/29 Javascript
jQuery过滤选择器:not()方法使用介绍
2014/04/20 Javascript
自己使用jquery写的一个无缝滚动的插件
2014/04/30 Javascript
jQuery切换所有复选框选中状态的方法
2015/07/02 Javascript
js鼠标点击图片切换效果代码分享
2015/08/26 Javascript
Node.js模块封装及使用方法
2016/03/06 Javascript
javascript比较语义化版本号的实现代码
2016/09/09 Javascript
jQuery中checkbox反复调用attr('checked', true/false)只有第一次生效的解决方法
2016/11/16 Javascript
Ajax跨域实现代码(后台jsp)
2017/01/21 Javascript
zTree获取当前节点的下一级子节点数实例
2017/09/05 Javascript
Bootstrap导航菜单点击后无法自动添加active的处理方法
2018/08/10 Javascript
vue 项目 iOS WKWebView 加载
2019/04/17 Javascript
微信小程序常用赋值方法小结
2019/04/30 Javascript
微信小程序new Date()方法失效问题解决方法
2019/07/29 Javascript
微信小程序中使用 async/await的方法实例分析
2020/05/06 Javascript
phpsir 开发 一个检测百度关键字网站排名的python 程序
2009/09/17 Python
教你如何在Django 1.6中正确使用 Signal
2014/06/22 Python
python服务器端收发请求的实现代码
2014/09/29 Python
python根据出生年份简单计算生肖的方法
2015/03/27 Python
Python 装饰器使用详解
2017/07/29 Python
Python学习pygal绘制线图代码分享
2017/12/09 Python
Django实现列表页商品数据返回教程
2020/04/03 Python
python 使用while循环输出*组成的菱形实例
2020/04/12 Python
python操作链表的示例代码
2020/09/27 Python
详解Django中的FBV和CBV对比分析
2021/03/01 Python
Python读写Excel表格的方法
2021/03/02 Python
护士的自我鉴定
2014/02/07 职场文书
汽车转让协议书
2015/01/29 职场文书
技术员个人工作总结
2015/03/03 职场文书
物业前台接待岗位职责
2015/04/03 职场文书