PHP用于发邮件的类与类的用法

操作方法

  • 01

    某些时候,我们可能会需要将某些信息通过PHP用邮件的形式发送到指定的用户邮箱。 其实这种功能现在已经很常见了,本文主要是分享一个用户发送邮件的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;var $from;var $test=“test”;/* Private Variables */var $sock;/* Constractor */ function smtp($relay_host =“”, $smtp_port =25,$auth =false,$user,$pass,$from){$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->from = $from; # $this->host_name =“localhost”; //is used in HELO command $this->log_file =“”;$this->sock =FALSE;}/* Main Function */ function sendmail($to,$fromname=“”,$subject =“”, $body =“”, $mailtype, $cc =“”, $bcc =“”, $additional_headers =“”){$mail_from = $this->get_address($this->strip_comment($this->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”;}if ($fromname!=“”) $header .=“From: “.$fromname.“<”.$this->from.“>\r\n”;if ($fromname==“”) $header .=“From:<”.$this->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”;$utfheader=iconv(“GBK”,“UTF-8//IGNORE”,$header);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, $utfheader, $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;}}}?> 类的使用方法 <?phpif(empty($_REQUEST['val0']) ||empty($_REQUEST['val1']) ||empty($_REQUEST['val2']) ||empty($_REQUEST['val3']) ||empty($_REQUEST['val5'])){die(“提交失败,请确认是否已按要求填写表格”);}?><?phpinclude_once(“mail.inc.php”);include_once(“mailbody.php”); $smtp =new smtp(“smtp.exmail.qq.com”,465,true,“xxx@frontopen.com”,“password”,“xxx@frontopen.com”);//发件人www.hnzwz.com信箱信息$smtp->debug =false;//是否显示发送的调试信息 FALSE or TRUE$mailto=“user@frontopen.com”;//收件人信箱$mailsubject=“来自前端开拓者的邮件类!’;$mailfrom=“www.frontopen.com”;//其他的表单项目以此类推$mailtype =“HTML”;//邮件格式(HTML/TXT),TXT为文本邮件$mailsubject =‘=?UTF-8?B?’.base64_encode($mailsubject).‘?=’;//邮件主题$mailfrom =‘=?UTF-8?B?’.base64_encode($mailfrom).‘?=’;//发件人$smtp->sendmail($mailto, $mailfrom, $mailsubject, $maBody, $mailtype);echo“申请已提交!请耐心等待回访。”; exit();?>

(0)

相关推荐

  • 从买家差异看B类&C类电商体验设计创新(文略长,慎点!)

    [前言] @舒舟2017年,回顾我的职业生涯,已积累了超过10年的企业(To Business,以下简称B类)产品服务经历.从早期的企业产品数据管理(Product Data Management)软 ...

  • 用word发邮件的方法教程

    有的时候对于一些办公人员因为工作需要需要再word文档中的发送电子邮件,可能如果用qq或者新浪等发送邮件的方法大家都知道,那么在word的是如何发送电子邮件的呢?小编就来教教大家怎么用word发邮件的 ...

  • Outlook Express只能收邮件而不能发邮件的解决方法

    如果在用outlook express收发邮件时只能收到邮件,但在发送邮件时就会出现“由于服务器拒绝接受发件人的电子邮件地址,这封邮件无法发送”的错误提示时,按照下面的方法就可以解决。 在保证发送邮件 ...

  • foxmail不能发邮件是什么原因?

    foxmail不能发邮件,一般有以下几种情况,可以用以下方法进行处理: 1、发送邮件时显示错误信息:“解析服务器IP地址失败”。 这种情况可能是因为以下的某个原因造成的: (1)发送邮件(SMTP)服 ...

  • Outlook Express只能收邮件不能发邮件的解决方法

    你的outlook express有没有在发送邮件时出现“由于服务器拒绝接受发件人的电子邮件地址,这封邮件无法发送”的错误提示?不用担心,按照下面的方法就可以解决。 在保证发送邮件地址输入正确的情况下 ...

  • 解决Outlook Express只能收不能发邮件

    你的outlook express有没有在发送邮件时出现“由于服务器拒绝接受发件人的电子邮件地址,这封邮件无法发送”的错误提示?不用担心,按照下面的方法就可以解决。 在保证发送邮件地址输入正确的情况下 ...

  • lnmp能用mail()函数来发邮件

    mail() 函数在linux中需要安装一个sendmail组件才可以实现邮箱发送了,下面我来给各位介绍使用mail()发邮箱的同时解决mail()发邮件很慢的解决办法。 自动备份数据库的邮件好久没有 ...

  • 如何给自己的QQ邮箱发邮件

    每个人都有自己的QQ邮箱吧!QQ邮箱接收邮件还是很方便的,他和QQ连接在一起,有邮件来了及时提醒,那么今年教大家如何给自己发邮件。教程如下: 1、首先登录自己的QQ邮箱,开始“写信” 2、将重要文件上 ...

  • 别人把我的qq屏蔽了我还能给他发邮件吗?

    可以的,屏蔽了QQ消息,只是不能在qq聊天窗口上给对方发消息,只要知道对方的邮箱地址,并且对方没有在邮箱里将个人列入黑名单,就可以给对方发邮件,方法如下: 在电脑上登录qq之后,点击界面上方的QQ邮箱 ...