分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 前端开发

PHP 发送邮件

发布时间:2023-09-06 01:51责任编辑:赖小花关键词:PHP邮件

最近呢,再捣鼓一个类似商城的商城,买东西肯定的给用户发一下,告诉他,嘿,兄得,你的手已经剁完了,233,纯属玩笑,可是呢,该做的还是要做的,本来寻思用mail()函数,但是呢,简单事简单,但是呢,出错啊,发不出去,没时间解决这么多问题,来个简单的吧

用smtp类发送邮件

1、首先我就写了一个方法,因为配置在后台,直接取就好了,有的需要表单提交过来,只需要接收一下,把对应的值写一下就好了

2、类函数,只需要调用就好了,不需要修改

1、在控制器里面写个方法

     header("Content-type:text/html;charset=utf-8");
        require_once "Smtp.class.php";
        $smtpserver = "ssl://smtp.qq.com";//SMTP服务器 ?其他的写stmp.xx.com就好了,QQ的不行,加了ssl://才可以
        $smtpserverport =465;//SMTP服务器端口
        $smtpusermail = "175787xxxx@qq.com";//SMTP服务器的用户邮箱
        $smtpemailto = "123456yyyy@qq.com";//发送给谁
        $smtpuser = "175787xxxx@qq.com";//SMTP服务器的用户帐号,注:部分邮箱只需@前面的用户名
        $smtppass = "qq邮箱使用秘钥";//SMTP服务器的用户密码    
        $mailtitle = "邮件主题";//邮件主题
        $mailcontent = "<h1>邮件内容</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);
        if($state==""){
            echo "error";
            echo "<a href=‘index.html‘>点此返回</a>";
            exit();
        }else{
            echo "ok";
        }

2、类文件 Smtp.class.php ,直接引入就好了,不需要修改

<?php/** * email smtp (support php7) * * Modified by: Reson 2017/06 * UPDATE: * 1、change ereg to preg_match;change ereg_replace to preg_replace. * 2、change var to public/private. * * More: http://www.daixiaorui.com * */class Smtp{ ???/* Public Variables */ ???public $smtp_port; ???public $time_out; ???public $host_name; ???public $log_file; ???public $relay_host; ???public $debug; ???public $auth; ???public $user; ???public $pass; ???/* Private Variables */ ???private $sock; ???/* Constractor */ ???function __construct($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 = preg_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 = preg_replace("/^.+@([^@]+)$/", "\1", $address); ???????if (!@getmxrr($domain, $MXHOSTS)) { ???????????$this->log_write("Error: Cannot resolve MX \"".$domain."\"\n"); ???????????return FALSE; ???????} ???????//专注与php学习 http://www.daixiaorui.com 欢迎您的访问 ???????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 (!preg_match("/^[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 (preg_match($comment, $address)) { ???????????$address = preg_replace($comment, "", $address); ???????} ???????return $address; ???} ???function get_address($address) ???{ ???????$address = preg_replace("/([ \t\r\n])+/", "", $address); ???????$address = preg_replace("/^.*<(.+)>.*$/", "\1", $address); ???????return $address; ???} ???function smtp_debug($message) ???{ ???????if ($this->debug) { ???????????echo $message; ???????} ???}}

文件有,如果需要可以联系我,直接给你源文件好了,我特么的竟然不知道在哪里可以放文件,又垃圾了。

PHP 发送邮件

原文地址:https://www.cnblogs.com/xbxxf/p/8963309.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved