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 图片上添加透明度渐变的效果
Jun 29 PHP
Godaddy空间Zend Optimizer升级方法
May 10 PHP
php 目录与文件处理-郑阿奇(续)
Jul 04 PHP
理解和运用PHP中的多态性[译]
Aug 02 PHP
php上传图片存入数据库示例分享
Mar 11 PHP
实用的PHP带公钥加密类分享(每次加密结果都不一样哦)
Aug 20 PHP
PHP防盗链代码实例
Aug 27 PHP
php定义参数数量可变的函数用法实例
Mar 16 PHP
php实现的mongodb操作类实例
Apr 03 PHP
php for 循环使用的简单实例
Jun 02 PHP
ThinkPHP的SAE开发相关注意事项详解
Oct 09 PHP
浅谈ThinkPHP5.0版本和ThinkPHP3.2版本的区别
Jun 17 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
怎样在UNIX系统下安装MySQL
2006/10/09 PHP
基于mysql的bbs设计(五)
2006/10/09 PHP
php 中奖概率算法实现代码
2017/01/25 PHP
一个JavaScript变量声明的知识点
2013/10/28 Javascript
jquery 缓存问题的几个解决方法
2013/11/11 Javascript
node.js中的fs.writeFile方法使用说明
2014/12/14 Javascript
jQuery验证插件validate使用详解
2016/05/11 Javascript
用jQuery获取table中行id和td值的实现代码
2016/05/19 Javascript
jQuery中fadein与fadeout方法用法示例
2016/09/16 Javascript
JS实现拖动滚动条评分的效果代码分享
2016/09/29 Javascript
jquery实现文本框的禁用和启用
2016/12/07 Javascript
Angular的自定义指令以及实例
2016/12/26 Javascript
VueJS 集成 Medium Editor的示例代码 (自定义编辑器按钮)
2017/08/24 Javascript
基于Vue的移动端图片裁剪组件功能
2017/11/28 Javascript
JS实现关键词高亮显示正则匹配
2018/06/22 Javascript
微信小程序实现图片选择并预览功能
2019/07/25 Javascript
[28:57]EG vs VGJ.T 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/16 DOTA
python命令行参数sys.argv使用示例
2014/01/28 Python
详细分析python3的reduce函数
2017/12/05 Python
儿童学习python的一些小技巧
2018/05/27 Python
浅析python中numpy包中的argsort函数的使用
2018/08/30 Python
安装PyInstaller失败问题解决
2019/12/14 Python
python第三方库学习笔记
2020/02/07 Python
python一些性能分析的技巧
2020/08/30 Python
澳大利亚在线百货商店:Real Smart
2017/08/13 全球购物
大学生个人总结的自我评价
2013/10/05 职场文书
消防安全汇报材料
2014/02/08 职场文书
《陋室铭》教学反思
2014/02/26 职场文书
超市促销活动方案
2014/03/05 职场文书
工作决心书
2014/03/11 职场文书
男性健康日的活动方案
2014/08/18 职场文书
领导批评与自我批评范文
2014/10/16 职场文书
新闻稿标题
2015/07/18 职场文书
2016年“我们的节日·端午节”活动总结
2016/04/01 职场文书
nginx请求限制配置方法
2021/07/09 Servers
postgresql如何找到表中重复数据的行并删除
2023/05/08 MySQL