php邮件发送,php发送邮件的类


Posted in PHP onMarch 24, 2011

smtp.class.php 这个是类把他做保存到一个文件中.

<?php 
class smtp 
{ 
/* Public Variables */ 
var $smtp_port; 
var $time_out; 
var $host_name; 
var $log_file; 
var $relay_host; 
var $debug; 
var $auth; 
var $user; 
var $pass; 
/* Private Variables */ 
var $sock; 
/* Constractor */ 
function smtp($relay_host = "", $smtp_port = 25,$auth = false,$user,$pass) 
{ 
$this->debug = FALSE; 
$this->smtp_port = $smtp_port; 
$this->relay_host = $relay_host; 
$this->time_out = 30; //is used in fsockopen() 
# 
$this->auth = $auth;//auth 
$this->user = $user; 
$this->pass = $pass; 
# 
$this->host_name = "localhost"; //is used in HELO command 
$this->log_file = ""; 
$this->sock = FALSE; 
} 
/* Main Function */ 
function sendmail($to, $from, $subject = "", $body = "", $mailtype, $cc = "", $bcc = "", $additional_headers = "") 
{ 
$mail_from = $this->get_address($this->strip_comment($from)); 
$body = ereg_replace("(^|(\r\n))(\\.)", "\\1.\\3", $body); 
$header .= "MIME-Version:1.0\r\n"; 
if($mailtype=="HTML"){ 
$header .= "Content-Type:text/html\r\n"; 
} 
$header .= "To: ".$to."\r\n"; 
if ($cc != "") { 
$header .= "Cc: ".$cc."\r\n"; 
} 
$header .= "From: $from<".$from.">;\r\n"; 
$header .= "Subject: ".$subject."\r\n"; 
$header .= $additional_headers; 
$header .= "Date: ".date("r")."\r\n"; 
$header .= "X-Mailer:By Redhat (PHP/".phpversion().")\r\n"; 
list($msec, $sec) = explode(" ", microtime()); 
$header .= "Message-ID: <".date("YmdHis", $sec).".".($msec*1000000).".".$mail_from.">;\r\n"; 
$TO = explode(",", $this->strip_comment($to)); 
if ($cc != "") { 
$TO = array_merge($TO, explode(",", $this->strip_comment($cc))); 
} 
if ($bcc != "") { 
$TO = array_merge($TO, explode(",", $this->strip_comment($bcc))); 
} 
$sent = TRUE; 
foreach ($TO as $rcpt_to) { 
$rcpt_to = $this->get_address($rcpt_to); 
if (!$this->smtp_sockopen($rcpt_to)) { 
$this->log_write("Error: Cannot send email to ".$rcpt_to."\n"); 
$sent = FALSE; 
continue; 
} 
if ($this->smtp_send($this->host_name, $mail_from, $rcpt_to, $header, $body)) { 
$this->log_write("E-mail has been sent to <".$rcpt_to.">;\n"); 
} else { 
$this->log_write("Error: Cannot send email to <".$rcpt_to.">;\n"); 
$sent = FALSE; 
} 
fclose($this->sock); 
$this->log_write("Disconnected from remote host\n"); 
} 
return $sent; 
} 
/* Private Functions */ 
function smtp_send($helo, $from, $to, $header, $body = "") 
{ 
if (!$this->smtp_putcmd("HELO", $helo)) { 
return $this->smtp_error("sending HELO command"); 
} 
#auth 
if($this->auth){ 
if (!$this->smtp_putcmd("AUTH LOGIN", base64_encode($this->user))) { 
return $this->smtp_error("sending HELO command"); 
} 
if (!$this->smtp_putcmd("", base64_encode($this->pass))) { 
return $this->smtp_error("sending HELO command"); 
} 
} 
# 
if (!$this->smtp_putcmd("MAIL", "FROM:<".$from.">;")) { 
return $this->smtp_error("sending MAIL FROM command"); 
} 
if (!$this->smtp_putcmd("RCPT", "TO:<".$to.">;")) { 
return $this->smtp_error("sending RCPT TO command"); 
} 
if (!$this->smtp_putcmd("DATA")) { 
return $this->smtp_error("sending DATA command"); 
} 
if (!$this->smtp_message($header, $body)) { 
return $this->smtp_error("sending message"); 
} 
if (!$this->smtp_eom()) { 
return $this->smtp_error("sending <CR>;<LF>;.<CR>;<LF>; [EOM]"); 
} 
if (!$this->smtp_putcmd("QUIT")) { 
return $this->smtp_error("sending QUIT command"); 
} 
return TRUE; 
} 
function smtp_sockopen($address) 
{ 
if ($this->relay_host == "") { 
return $this->smtp_sockopen_mx($address); 
} else { 
return $this->smtp_sockopen_relay(); 
} 
} 
function smtp_sockopen_relay() 
{ 
$this->log_write("Trying to ".$this->relay_host.":".$this->smtp_port."\n"); 
$this->sock = @fsockopen($this->relay_host, $this->smtp_port, $errno, $errstr, $this->time_out); 
if (!($this->sock && $this->smtp_ok())) { 
$this->log_write("Error: Cannot connenct to relay host ".$this->relay_host."\n"); 
$this->log_write("Error: ".$errstr." (".$errno.")\n"); 
return FALSE; 
} 
$this->log_write("Connected to relay host ".$this->relay_host."\n"); 
return TRUE; 
} 
function smtp_sockopen_mx($address) 
{ 
$domain = ereg_replace("^.+@([^@]+)$", "\\1", $address); 
if (!@getmxrr($domain, $MXHOSTS)) { 
$this->log_write("Error: Cannot resolve MX \"".$domain."\"\n"); 
return FALSE; 
} 
foreach ($MXHOSTS as $host) { 
$this->log_write("Trying to ".$host.":".$this->smtp_port."\n"); 
$this->sock = @fsockopen($host, $this->smtp_port, $errno, $errstr, $this->time_out); 
if (!($this->sock && $this->smtp_ok())) { 
$this->log_write("Warning: Cannot connect to mx host ".$host."\n"); 
$this->log_write("Error: ".$errstr." (".$errno.")\n"); 
continue; 
} 
$this->log_write("Connected to mx host ".$host."\n"); 
return TRUE; 
} 
$this->log_write("Error: Cannot connect to any mx hosts (".implode(", ", $MXHOSTS).")\n"); 
return FALSE; 
} 
function smtp_message($header, $body) 
{ 
fputs($this->sock, $header."\r\n".$body); 
$this->smtp_debug(">; ".str_replace("\r\n", "\n".">; ", $header."\n>; ".$body."\n>; ")); 
return TRUE; 
} 
function smtp_eom() 
{ 
fputs($this->sock, "\r\n.\r\n"); 
$this->smtp_debug(". [EOM]\n"); 
return $this->smtp_ok(); 
} 
function smtp_ok() 
{ 
$response = str_replace("\r\n", "", fgets($this->sock, 512)); 
$this->smtp_debug($response."\n"); 
if (!ereg("^[23]", $response)) { 
fputs($this->sock, "QUIT\r\n"); 
fgets($this->sock, 512); 
$this->log_write("Error: Remote host returned \"".$response."\"\n"); 
return FALSE; 
} 
return TRUE; 
} 
function smtp_putcmd($cmd, $arg = "") 
{ 
if ($arg != "") { 
if($cmd=="") $cmd = $arg; 
else $cmd = $cmd." ".$arg; 
} 
fputs($this->sock, $cmd."\r\n"); 
$this->smtp_debug(">; ".$cmd."\n"); 
return $this->smtp_ok(); 
} 
function smtp_error($string) 
{ 
$this->log_write("Error: Error occurred while ".$string.".\n"); 
return FALSE; 
} 
function log_write($message) 
{ 
$this->smtp_debug($message); 
if ($this->log_file == "") { 
return TRUE; 
} 
$message = date("M d H:i:s ").get_current_user()."[".getmypid()."]: ".$message; 
if (!@file_exists($this->log_file) || !($fp = @fopen($this->log_file, "a"))) { 
$this->smtp_debug("Warning: Cannot open log file \"".$this->log_file."\"\n"); 
return FALSE; 
} 
flock($fp, LOCK_EX); 
fputs($fp, $message); 
fclose($fp); 
return TRUE; 
} 
function strip_comment($address) 
{ 
$comment = "\\([^()]*\\)"; 
while (ereg($comment, $address)) { 
$address = ereg_replace($comment, "", $address); 
} 
return $address; 
} 
function get_address($address) 
{ 
$address = ereg_replace("([ \t\r\n])+", "", $address); 
$address = ereg_replace("^.*<(.+)>;.*$", "\\1", $address); 
return $address; 
} 
function smtp_debug($message) 
{ 
if ($this->debug) { 
echo $message; 
} 
} 
} 
function sendmail($smtpserver,$smtpuser,$smtppass,$smtpemailto,$smtpusermail, $mailsubject, $mailbody){ 
$smtp = new smtp($smtpserver,25,true,$smtpuser,$smtppass); 
//$smtp->debug = TRUE; 
$smtp->sendmail($smtpemailto, $smtpusermail, $mailsubject, $mailbody, "HTML"); 
} 
//such as 
//sendmail("smtp.126.com","test@126.com","password","1034555083@qq.com","test@126.com","title","body"); 
?>

测试代码:
<? 
//ok的邮箱发送。 
include "smtp.class.php"; 
//$smtpserver = "SMTP.163.com"; //您的smtp服务器的地址 
$smtpserver="smtp.163.com"; 
$port =25; //smtp服务器的端口,一般是 25 
$smtpuser = "你的邮箱@163.com"; //您登录smtp服务器的用户名 
$smtppwd = "你邮箱的密码"; //您登录smtp服务器的密码 
$mailtype = "TXT"; //邮件的类型,可选值是 TXT 或 HTML ,TXT 表示是纯文本的邮件,HTML 表示是 html格式的邮件 
$sender = "你的邮箱@163.com"; 
//发件人,一般要与您登录smtp服务器的用户名($smtpuser)相同,否则可能会因为smtp服务器的设置导致发送失败 
$smtp = new smtp($smtpserver,$port,true,$smtpuser,$smtppwd,$sender); 
$smtp->debug = true; //是否开启调试,只在测试程序时使用,正式使用时请将此行注释 
$to = "你要发给的那个人的邮箱地址"; //收件人 
$subject = "你好"; 
$body = "你发送的内容 "; 
$send=$smtp->sendmail($to,$sender,$subject,$body,$mailtype); if($send==1){ 
echo "邮件发送成功"; 
}else{ 
echo "邮件发送失败<br/>"; 
//echo "原因:".$this->smtp->logs; 
} 
?>
PHP 相关文章推荐
剖析 PHP 中的输出缓冲
Dec 21 PHP
dedecms模版制作使用方法
Apr 03 PHP
用PHP读取和编写XML DOM的实现代码
Feb 03 PHP
php 伪造本地文件包含漏洞的代码
Nov 03 PHP
如何在smarty中增加类似foreach的功能自动加载数据
Jun 26 PHP
PHP里8个鲜为人知的安全函数分析
Dec 09 PHP
php析构函数的简单使用说明
Aug 24 PHP
PHP实现连接设备、通讯和发送命令的方法
Oct 13 PHP
深入浅析php中sprintf与printf函数的用法及区别
Jan 08 PHP
浅谈php数组array_change_key_case() 函数和array_chunk()函数
Oct 22 PHP
thinkPHP5 tablib标签库自定义方法详解
May 10 PHP
详解cookie验证的php应用的一种SSO解决办法
Oct 20 PHP
php 数组排序 array_multisort与uasort的区别
Mar 24 #PHP
一个基于PDO的数据库操作类
Mar 24 #PHP
Zend Studio (eclipse)使用速度优化方法
Mar 23 #PHP
常见的PHP五种设计模式小结
Mar 23 #PHP
PHP中MVC模式的模板引擎开发经验分享
Mar 23 #PHP
PHP面向接口编程 耦合设计模式 简单范例
Mar 23 #PHP
PHP中用接口、抽象类、普通基类实现“面向接口编程”与“耦合方法”简述
Mar 23 #PHP
You might like
11个PHP 分页脚本推荐
2011/08/15 PHP
PHP扩展CURL的用法详解
2014/06/20 PHP
PHP彩蛋信息介绍和阻止泄漏的方法(隐藏功能)
2014/08/06 PHP
利用PHP实现一个简单的用户登记表示例
2017/04/25 PHP
获取body标签的两种方法
2011/10/13 Javascript
javascript date格式化示例
2013/09/25 Javascript
js截取小数点后几位的写法
2013/11/14 Javascript
javascript日期对象格式化为字符串的实现方法
2014/01/14 Javascript
javascript单例模式的简单实现方法
2015/07/25 Javascript
js实现图片上传并正常显示
2015/12/19 Javascript
js字符串截取函数slice、substring和substr的比较
2016/05/17 Javascript
vue-cli构建项目下使用微信分享功能
2018/05/28 Javascript
JS 实现获取验证码 倒计时功能
2018/10/29 Javascript
vue与原生app的对接交互的方法(混合开发)
2018/11/28 Javascript
vuex存储复杂参数(如对象数组等)刷新数据丢失的解决方法
2019/11/05 Javascript
vue项目中在可编辑div光标位置插入内容的实现代码
2020/01/07 Javascript
js实现左右轮播图
2020/01/09 Javascript
JavaScript enum枚举类型定义及使用方法
2020/05/15 Javascript
浅谈vue的第一个commit分析
2020/06/08 Javascript
nuxt.js 在middleware(中间件)中实现路由鉴权操作
2020/11/06 Javascript
在Windows中设置Python环境变量的实例讲解
2018/04/28 Python
详解Python安装scrapy的正确姿势
2018/06/26 Python
python版本五子棋的实现代码
2018/12/11 Python
Python 3.8 新功能大揭秘【新手必学】
2020/02/05 Python
Python的collections模块真的很好用
2021/03/01 Python
CSS3 icon font完全指南(CSS3 font 会取代icon图标)
2013/01/06 HTML / CSS
瑞贝卡·明可弗包包官网:Rebecca Minkoff
2016/07/21 全球购物
Joe Fresh官网:加拿大时尚品牌和零售连锁店
2016/11/30 全球购物
库存图片、照片、矢量图、视频和音乐:Shutterstock
2021/02/12 全球购物
广州喜创信息技术有限公司JAVA软件工程师笔试题
2012/10/17 面试题
小学生感恩演讲稿
2014/04/25 职场文书
社会实践活动总结报告
2014/04/29 职场文书
单位接收函格式
2015/01/30 职场文书
给朋友的赠语
2015/06/23 职场文书
2015初中政教处工作总结
2015/07/21 职场文书
实用干货:敬酒词大全,帮你应付各种场合
2019/11/21 职场文书