From 3586fd2c631f180e1d1e8ed6d2be7072518ca267 Mon Sep 17 00:00:00 2001 From: cyc Date: Mon, 16 Mar 2020 17:43:14 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9value=E9=82=AE=E4=BB=B6?= =?UTF-8?q?=E5=8F=91=E9=80=81=E6=96=B9=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dingmail/controllers/email.class.php | 232 ++++++++++++++++++ .../dingmail/controllers/index.php | 53 +++- 2 files changed, 283 insertions(+), 2 deletions(-) create mode 100644 webht/third_party/dingmail/controllers/email.class.php diff --git a/webht/third_party/dingmail/controllers/email.class.php b/webht/third_party/dingmail/controllers/email.class.php new file mode 100644 index 00000000..ab5dc05a --- /dev/null +++ b/webht/third_party/dingmail/controllers/email.class.php @@ -0,0 +1,232 @@ +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, $fromUser, $replyToAddress) + { + $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; charset=utf-8\r\n"; + } + $header .= "To: ".$to."\r\n"; + if ($cc != "") { + $header .= "Cc: ".$cc."\r\n"; + } + $header .= "From: $fromUser<".$from.">\r\n"; + $header .= "Subject: ".$subject."\r\n"; + $header .= "Reply-To: ".$replyToAddress."\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 . [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; + } + 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; + } + } +} \ No newline at end of file diff --git a/webht/third_party/dingmail/controllers/index.php b/webht/third_party/dingmail/controllers/index.php index ff3da510..5e952b52 100644 --- a/webht/third_party/dingmail/controllers/index.php +++ b/webht/third_party/dingmail/controllers/index.php @@ -251,7 +251,7 @@ class Index extends CI_Controller { //执行邮件发送功能 public function do_sendmail($fromuser, $tolist_array, $cclist_array, $subject, $mailbody) { - $this->load->library('Phpmailer_lib'); + /*$this->load->library('Phpmailer_lib'); $mail = new PHPMailer(); $mail->IsSMTP(); $mail->Host = 'smtp.mxhichina.com';//smtp.sendgrid.net @@ -297,7 +297,56 @@ class Index extends CI_Controller { } else { $result = true; } - return $result; + return $result;*/ + require 'email.class.php'; + $mailto = 'admin@hainatravel.com'; + $mailsubject = $subject; + $mailbody = $mailbody; + $smtpserver = "smtp.qiye.aliyun.com"; + $smtpserverport = 25; + $smtpusermail = "发信地址"; + // 发件人的账号,填写控制台配置的发信地址,比如xxx@xxx.com + $smtpuser = "admin@hainatravel.com"; + // 访问SMTP服务时需要提供的密码(在控制台选择发信地址进行设置) + $smtppass = "Guilinhaina2019"; + $mailsubject = "=?UTF-8?B?" . base64_encode($mailsubject) . "?="; + $mailtype = "HTML"; + //可选,设置回信地址 + $smtpreplyto = "***"; + $smtp = new smtp($smtpserver, $smtpserverport, true, $smtpuser, $smtppass); + $smtp->debug = true; + $cc =""; + $bcc = ""; + $additional_headers = ""; + //设置发件人名称,名称用户可以自定义填写。 + $sender = "发件人"; + $smtp->sendmail($mailto,$smtpusermail, $mailsubject, $mailbody, $mailtype, $cc, $bcc, $additional_headers, $sender, $smtpreplyto); + } + + public function do_sendmailtest($fromuser, $tolist_array, $cclist_array, $subject, $mailbody) { + require 'email.class.php'; + $mailto = 'admin@hainatravel.com'; + $mailsubject = $subject; + $mailbody = $mailbody; + $smtpserver = "smtp.qiye.aliyun.com"; + $smtpserverport = 25; + $smtpusermail = "发信地址"; + // 发件人的账号,填写控制台配置的发信地址,比如xxx@xxx.com + $smtpuser = "admin@hainatravel.com"; + // 访问SMTP服务时需要提供的密码(在控制台选择发信地址进行设置) + $smtppass = "Guilinhaina2019"; + $mailsubject = "=?UTF-8?B?" . base64_encode($mailsubject) . "?="; + $mailtype = "HTML"; + //可选,设置回信地址 + $smtpreplyto = "***"; + $smtp = new smtp($smtpserver, $smtpserverport, true, $smtpuser, $smtppass); + $smtp->debug = true; + $cc =""; + $bcc = ""; + $additional_headers = ""; + //设置发件人名称,名称用户可以自定义填写。 + $sender = "发件人"; + $smtp->sendmail($mailto,$smtpusermail, $mailsubject, $mailbody, $mailtype, $cc, $bcc, $additional_headers, $sender, $smtpreplyto); } //钉邮群体点赞功能