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多用户计数器代码
Mar 11 PHP
php中在PDO中使用事务(Transaction)
May 14 PHP
PHP中其实也可以用方法链
Nov 10 PHP
PHP运行环境配置与开发环境的配置(图文教程)
Jun 04 PHP
浅析PHP程序防止ddos,dns,集群服务器攻击的解决办法
Jun 18 PHP
thinkPHP实现表单自动验证
Dec 24 PHP
WordPress开发中的get_post_custom()函数使用解析
Jan 04 PHP
php实现word转html的方法
Jan 22 PHP
PHP生成推广海报的方法分享
Apr 22 PHP
YII分模块加载路由的实现方法
Oct 01 PHP
PHP 7.4中使用预加载的方法详解
Jul 08 PHP
PHP ElasticSearch做搜索实例讲解
Feb 05 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
自己前几天写的无限分类类
2007/02/14 PHP
PHP入门速成教程
2007/03/19 PHP
MySQL 日期时间函数常用总结
2012/06/12 PHP
使用迭代器 遍历文件信息的详解
2013/06/08 PHP
php返回当前日期或者指定日期是周几
2015/05/21 PHP
PHP中单例模式与工厂模式详解
2017/02/17 PHP
如何直接访问php实例对象中的private属性详解
2017/10/12 PHP
php实现socket推送技术的示例
2017/12/20 PHP
PHP7移除的扩展和SAPI
2021/03/09 PHP
javascript的onchange事件与jQuery的change()方法比较
2009/09/28 Javascript
juqery 学习之三 选择器 可见性 元素属性
2010/11/25 Javascript
JavaScript 和 Java 的区别浅析
2013/07/31 Javascript
json数据的列循环示例
2013/09/06 Javascript
Jquery模仿Baidu、Google搜索时自动补充搜索结果提示
2013/12/26 Javascript
在Javascript操作JSON对象,增加 删除 修改的简单实现
2016/06/02 Javascript
bootstrap学习笔记之初识bootstrap
2016/06/21 Javascript
Angularjs 设置全局变量的方法总结
2016/10/20 Javascript
基于JavaScript实现的希尔排序算法分析
2017/04/14 Javascript
H5手机端多文件上传预览插件
2017/04/21 Javascript
在Vant的基础上封装下拉日期控件的代码示例
2018/12/05 Javascript
微信小程序通过一个json实现分享朋友圈图片
2019/09/03 Javascript
nuxt 每个页面head标签内容设置方式
2020/11/05 Javascript
React服务端渲染原理解析与实践
2021/03/04 Javascript
编写Python脚本批量下载DesktopNexus壁纸的教程
2015/05/06 Python
基于Django的python验证码(实例讲解)
2017/10/23 Python
利用python3随机生成中文字符的实现方法
2017/11/24 Python
python决策树之CART分类回归树详解
2017/12/20 Python
python实现翻译word表格小程序
2020/02/27 Python
python 制作网站小说下载器
2021/02/20 Python
Python xlwings插入Excel图片的实现方法
2021/02/26 Python
英文版餐饮业求职信
2013/10/18 职场文书
婚礼新人答谢词
2015/01/04 职场文书
《窃读记》教学反思
2016/02/18 职场文书
某某幼儿园的教育教学管理调研分析报告
2019/11/29 职场文书
Python 用户输入和while循环的操作
2021/05/23 Python
2022微信温控新功能上线
2022/05/09 数码科技