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安装全攻略:APACHE
Oct 09 PHP
php更改目录及子目录下所有的文件后缀扩展名的代码
Oct 12 PHP
表格展示无限级分类(PHP版)
Aug 21 PHP
Codeigniter实现智能裁剪图片的方法
Jun 12 PHP
php cookie名使用点号(句号)会被转换
Oct 23 PHP
typecho插件编写教程(一):Hello World
May 28 PHP
WordPress中用于获取及自定义头像图片的PHP脚本详解
Dec 17 PHP
php远程下载类分享
Apr 13 PHP
PHP中set_include_path()函数相关用法分析
Jul 18 PHP
PHP + plupload.js实现多图上传并显示进度条加删除实例代码
Mar 06 PHP
实例说明js脚本语言和php脚本语言的区别
Apr 04 PHP
PHP设计模式(八)装饰器模式Decorator实例详解【结构型】
May 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
source.php查看源文件
2006/12/09 PHP
php入门学习知识点六 PHP文件的读写操作代码
2011/07/14 PHP
用php解析html的实现代码
2011/08/08 PHP
PHP使用DOMDocument类生成HTML实例(包含常见标签元素)
2014/06/25 PHP
让JavaScript的Alert弹出框失效的方法禁止弹出警告框
2014/09/03 Javascript
JavaScript 实现打印,打印预览,打印设置
2014/12/30 Javascript
javascript实现表单提交后,提交按钮不可用的方法
2015/04/18 Javascript
jQuery文件上传控件 Uploadify 详解
2016/06/20 Javascript
webpack教程之webpack.config.js配置文件
2017/07/05 Javascript
Vue0.1的过滤代码如何添加到Vue2.0直接使用
2017/08/23 Javascript
详解微信小程序-canvas绘制文字实现自动换行
2019/04/26 Javascript
js实现GIF图片的分解和合成
2019/10/24 Javascript
javascript贪吃蛇游戏设计与实现
2020/09/17 Javascript
vuex刷新后数据丢失的解决方法
2020/10/18 Javascript
python学习手册中的python多态示例代码
2014/01/21 Python
python爬虫常用的模块分析
2014/08/29 Python
利用Python代码实现数据可视化的5种方法详解
2018/03/25 Python
在python 不同时区之间的差值与转换方法
2019/01/14 Python
几行Python代码爬取3000+上市公司的信息
2019/01/24 Python
安装好Pycharm后如何配置Python解释器简易教程
2019/06/28 Python
python内置函数sorted()用法深入分析
2019/10/08 Python
python实现名片管理器的示例代码
2019/12/17 Python
调整Jupyter notebook的启动目录操作
2020/04/10 Python
Python程序慢的重要原因
2020/09/04 Python
python实现计算器简易版
2020/12/17 Python
CSS3中的常用选择器使用示例整理
2016/06/13 HTML / CSS
美国皮靴公司自1863年:The Frye Company
2016/11/30 全球购物
小型女装店的创业计划书
2014/01/09 职场文书
宣传口号大全
2014/06/16 职场文书
应用心理学专业求职信
2014/08/04 职场文书
平面设计师岗位职责
2014/09/18 职场文书
2014党员民主评议个人思想剖析发言
2014/09/19 职场文书
2015年手术室工作总结
2015/05/11 职场文书
2016国庆节67周年红领巾广播稿
2015/12/18 职场文书
大学生饮品店创业计划书范文
2019/07/10 职场文书
使用nginx动态转换图片大小生成缩略图
2021/03/31 Servers