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 相关文章推荐
从康盛产品(discuz)提取出来的模板类
Jun 28 PHP
解析php入库和出库
Jun 25 PHP
PHP获取当前url的具体方法全面解析
Nov 26 PHP
codeigniter框架批量插入数据
Jan 09 PHP
Win7下手动安装apache2.2、php5.4笔记
Apr 03 PHP
基于PHP实现简单的随机抽奖小程序
Jan 05 PHP
Symfony2 session用法实例分析
Feb 04 PHP
PHP符合PSR编程规范的实例分享
Dec 21 PHP
PHP 7.0新增加的特性介绍
Jun 08 PHP
PHP实现链表的定义与反转功能示例
Jun 09 PHP
PHP-FPM 设置多pool及配置文件重写操作示例
Oct 02 PHP
TP框架实现上传一张图片和批量上传图片的方法分析
Apr 23 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
php获得文件扩展名三法
2006/11/25 PHP
ajax完美实现两个网页 分页功能的实例代码
2013/04/16 PHP
Symfony2使用Doctrine进行数据库查询方法实例总结
2016/03/18 PHP
深入解析PHP的Laravel框架中的event事件操作
2016/03/21 PHP
非常实用的php验证码类
2016/05/15 PHP
[原创]php常用字符串输出方法分析(echo,print,printf及sprintf)
2016/07/09 PHP
JavaScript 变量作用域分析
2011/07/04 Javascript
Js冒泡事件详解及阻止示例
2014/03/21 Javascript
易被忽视的js事件问题总结
2016/05/14 Javascript
Laydate时间组件在火狐浏览器下有多时间输入框时只能给第一个输入框赋值的解决方法
2016/08/18 Javascript
nodejs简单实现操作arduino
2016/09/25 NodeJs
js通过keyCode值判断单击键盘上某个键,然后触发指定的事件方法
2017/02/19 Javascript
详解vuelidate 对于vueJs2.0的验证解决方案
2017/03/09 Javascript
Vue项目添加动态浏览器头部title的方法
2018/07/11 Javascript
微信小程序支付前端源码
2018/08/29 Javascript
Vue中使用sass实现换肤功能
2018/09/07 Javascript
jQuery中DOM操作原则实例分析
2019/08/01 jQuery
在Node.js中将SVG图像转换为PNG,JPEG,TIFF,WEBP和HEIF格式的方法
2019/08/22 Javascript
Vue实现按钮级权限方案
2019/11/21 Javascript
Python基于ThreadingTCPServer创建多线程代理的方法示例
2018/01/11 Python
Python+matplotlib绘制不同大小和颜色散点图实例
2018/01/19 Python
浅谈django的render函数的参数问题
2018/10/16 Python
Python面向对象之私有属性和私有方法应用案例分析
2019/12/31 Python
Python numpy多维数组实现原理详解
2020/03/10 Python
解决django migrate报错ORA-02000: missing ALWAYS keyword
2020/07/02 Python
工地安全检查制度
2014/02/04 职场文书
人力资源总监工作说明
2014/03/03 职场文书
2014年妇联工作总结
2014/11/21 职场文书
客服专员岗位职责
2015/02/10 职场文书
中学教师个人总结
2015/02/10 职场文书
高一军训感想
2015/08/07 职场文书
四则混合运算教学反思
2016/02/23 职场文书
小学生作文写作技巧100例,非常实用!
2019/07/08 职场文书
Python基础之元类详解
2021/04/29 Python
SQL 窗口函数实现高效分页查询的案例分析
2021/05/21 SQL Server
springboot实现string转json json里面带数组
2022/06/16 Java/Android