PHP实现163邮箱自动发送邮件


Posted in PHP onMarch 29, 2016

163邮箱大家都使用过吧,那么基于php如何实现163邮箱自动发送邮件功能呢,下面三水点靠木小编给大家分享具体实现代码:

想给大家展示下效果图:

PHP实现163邮箱自动发送邮件

demo.html

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<meta charset="utf-8"> 
<title>PHP利用smtp类发送邮件范例</title> 
</head> 
<body> 
<form action="sendmail.php" method="post"> 
<p>收件人:<input type="text" name="toemail" /></p> 
<p>标  题:<input type="text" name="title" /></p> 
<p>内  容:<textarea name="content" cols="50" rows="5"></textarea></p> 
<p><input type="submit" value="发送" /></p> 
</form> 
</body> 
</html>

sendmail.php

<meta charset="utf-8"> 
<?php 
/** 
* 注:本邮件类都是经过我测试成功了的,如果大家发送邮件的时候遇到了失败的问题,请从以下几点排查: 
* 1. 用户名和密码是否正确; 
* 2. 检查邮箱设置是否启用了smtp服务; 
* 3. 是否是php环境的问题导致; 
* 4. 将26行的$smtp->debug = false改为true,可以显示错误信息,然后可以复制报错信息到网上搜一下错误的原因 
*/ 
require_once "email.class.php"; 
//******************** 配置信息 ******************************** 
$smtpserver = "smtp.163.com";//SMTP服务器 
$smtpserverport =25;//SMTP服务器端口 
$smtpusermail = "onestopweb@163.com";//SMTP服务器的用户邮箱 
$smtpemailto = $_POST['toemail'];//发送给谁 
$smtpuser = "onestopweb";//SMTP服务器的用户帐号 
$smtppass = "123456";//SMTP服务器的用户密码 
$mailtitle = $_POST['title'];//邮件主题 
$mailcontent = "<h1>".$_POST['content']."</h1>";//邮件内容 
$mailtype = "HTML";//邮件格式(HTML/TXT),TXT为文本邮件 
//************************ 配置信息 **************************** 
$smtp = new smtp($smtpserver,$smtpserverport,true,$smtpuser,$smtppass);//这里面的一个true是表示使用身份验证,否则不使用身份验证. 
$smtp->debug = false;//是否显示发送的调试信息 
$state = $smtp->sendmail($smtpemailto, $smtpusermail, $mailtitle, $mailcontent, $mailtype); 
echo "<div style='width:300px; margin:36px auto;'>"; 
if($state==""){ 
echo "对不起,邮件发送失败!请检查邮箱填写是否有误。"; 
echo "<a href='index.html'>点此返回</a>"; 
exit(); 
} 
echo "恭喜!邮件发送成功!!"; 
echo "<a href='index.html'>点此返回</a>"; 
echo "</div>"; 
?>

email.class.php

<?php 
class Smtp 
{ 
var $smtp_port; 
var $time_out; 
var $host_name; 
var $log_file; 
var $relay_host; 
var $debug; 
var $auth; 
var $user; 
var $pass; 
var $sock; 
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 = 3600; 
$this->auth = $auth; 
$this->user = $user; 
$this->pass = $pass; 
$this->host_name = "localhost"; 
$this->log_file = ""; 
$this->sock = FALSE; 
} 
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; 
} 
function smtp_send($helo, $from, $to, $header, $body = "") 
{ 
if (!$this->smtp_putcmd("HELO", $helo)) { 
return $this->smtp_error("sending HELO command"); 
} 
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; 
} 
} 
} 
?>

有关PHP实现163邮箱自动发送邮件功能小编就到此给大家介绍完了,希望对大家有所帮助!

PHP 相关文章推荐
php判断字符以及字符串的包含方法属性
Aug 30 PHP
php ajax 静态分页过程形式
Sep 02 PHP
PHP新手NOTICE错误常见解决方法
Dec 07 PHP
php一个找二层目录的小东东
Aug 02 PHP
解析smarty模板中类似for的功能实现
Jun 18 PHP
PHP常用编译参数中文说明
Sep 27 PHP
php中socket通信机制实例详解
Jan 03 PHP
PHP获取POST数据的几种方法汇总
Mar 03 PHP
PHP中strpos、strstr和stripos、stristr函数分析
Jun 11 PHP
PHP使用FFmpeg获取视频播放总时长与码率等信息
Sep 13 PHP
Mac系统完美安装PHP7详细教程
Jun 06 PHP
PHP实现超简单的SSL加密解密、验证及签名的方法示例
Aug 28 PHP
Laravel5.1数据库连接、创建数据库、创建model及创建控制器的方法
Mar 29 #PHP
PHP创建word文档的方法(平台无关)
Mar 29 #PHP
PHP中key和current,next的联合运用实例分析
Mar 29 #PHP
CodeIgniter基于Email类发邮件的方法
Mar 29 #PHP
PHP中抽象类、接口的区别与选择分析
Mar 29 #PHP
php实现图片缩略图的方法
Mar 29 #PHP
YII动态模型(动态表名)支持分析
Mar 29 #PHP
You might like
php实现统计网站在线人数的方法
2015/05/12 PHP
PHP基于XMLWriter操作xml的方法分析
2017/07/17 PHP
Yii2框架自定义类统一处理url操作示例
2019/05/25 PHP
Laravel5.1 框架Middleware中间件基本用法实例分析
2020/01/04 PHP
线路分流自动跳转代码;希望对大家有用!
2006/12/02 Javascript
Ajax::prototype 源码解读
2007/01/22 Javascript
浅谈checkbox的一些操作(实战经验)
2013/11/20 Javascript
js几秒以后倒计时跳转示例
2013/12/26 Javascript
探寻Javascript执行效率问题
2014/11/12 Javascript
JavaScript中遍历对象的property的3种方法介绍
2014/12/30 Javascript
jQuery中prevAll()方法用法实例
2015/01/08 Javascript
jQuery实现可关闭固定于底(顶)部的工具条菜单效果
2015/11/06 Javascript
json的使用小结
2016/06/08 Javascript
ion content 滚动到底部会遮住一部分视图的快速解决方法
2016/09/06 Javascript
JavaScript动态绑定详解
2017/09/14 Javascript
Vue 换肤的示例实践
2018/01/23 Javascript
详解Vue CLI3配置解析之css.extract
2018/09/14 Javascript
angularjs使用div模拟textarea文本框的方法
2018/10/02 Javascript
使用Vue CLI创建typescript项目的方法
2019/08/09 Javascript
vue draggable resizable gorkys与v-chart使用与总结
2019/09/05 Javascript
ES2020让代码更优美的运算符 (?.) (??)
2021/01/04 Javascript
js简单粗暴的发布订阅示例代码
2021/01/23 Javascript
js实现简单图片拖拽效果
2021/02/22 Javascript
浅谈Python爬取网页的编码处理
2016/11/04 Python
Windows下安装python2和python3多版本教程
2017/03/30 Python
Python模块的加载讲解
2019/01/15 Python
python实现两个dict合并与计算操作示例
2019/07/01 Python
Pandas中DataFrame基本函数整理(小结)
2020/07/20 Python
通过代码简单了解django model序列化作用
2020/11/12 Python
matplotlib 使用 plt.savefig() 输出图片去除旁边的空白区域
2021/01/05 Python
美国知名奢侈美容品牌零售商:Cos Bar
2017/04/21 全球购物
公司同意接收函
2014/01/13 职场文书
打架赔偿协议书范本
2014/10/26 职场文书
2014年市场部工作总结
2014/11/25 职场文书
2015年学校教科室工作总结
2015/07/20 职场文书
《狼王梦》读后感:可怜天下父母心
2019/11/01 职场文书