利用php怎么站点中添加一个邮件发送功能
创始人
2024-12-10 13:01:29
0次

首先需要下载一个smtp 的 php 邮件发送类,代码如下:

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"); 
  } 
  echo "
";    //echo $header;    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."
";    }   }    function get_attach_type($image_tag) { //     $filedata = array();      $img_file_con=fopen($image_tag,"r");   unset($image_data);   while ($tem_buffer=AddSlashes(fread($img_file_con,filesize($image_tag))))   $image_data.=$tem_buffer;   fclose($img_file_con);     $filedata['context'] = $image_data;   $filedata['filename']= basename($image_tag);   $extension=substr($image_tag,strrpos($image_tag,"."),strlen($image_tag)-strrpos($image_tag,"."));   switch($extension){    case ".gif":     $filedata['type'] = "image/gif";     break;    case ".gz":     $filedata['type'] = "application/x-gzip";     break;    case ".htm":     $filedata['type'] = "text/html";     break;    case ".html":     $filedata['type'] = "text/html";     break;    case ".jpg":     $filedata['type'] = "image/jpeg";     break;    case ".tar":     $filedata['type'] = "application/x-tar";     break;    case ".txt":     $filedata['type'] = "text/plain";     break;    case ".zip":     $filedata['type'] = "application/zip";     break;    default:     $filedata['type'] = "application/octet-stream";     break;   }   return $filedata;   }    } // end class  ?>

这类的邮件发送类网上有许多,可以挑一款自己喜欢的就行,将以上的代码保存为 ZC_Email.class.php 文件,然后在使用的时候直接 include_once("ZC_Email.class.php") 就可以了,代码如下:

这是将邮件的发送类已经嵌入到页面中了,下一步就要在页面进行内容的发送了,我这里的系统是用户购买成功后进行发送,实例代码如下:

//空间购买成功发送邮件
  $smtpserver = "smtp.163.com";//SMTP服务器 
  $smtpserverport =25;//SMTP服务器端口 
  $smtpusermail = "xiariboke@163.com";//SMTP服务器的用户邮箱 
  $smtpemailto = "xiariboke@qq.com";//发送给谁 
  $smtpuser = "xiariboke@163.com";//SMTP服务器的用户帐号 
  $smtppass = "xiariboke";//SMTP服务器的用户密码 
  $mailsubject = "精品门业网香港空间购买";//邮件主题 
  $mailbody = "成功购买香港空间 $size M空间,购买域名为:$domain 购买时间为:".format_date(time(),2)." 到期时间为: $lasttime ".format_date(time(),5);//邮件内容 
  $mailtype = "TXT";//邮件格式(HTML/TXT),TXT为文本邮件 
  ########################################## 
  $smtp = new smtp($smtpserver,$smtpserverport,true,$smtpuser,$smtppass);//这里面的一个true是表示使用身份验证,否则不使用身份验证. 
  $smtp->debug = false;//是否显示发送的调试信息 
  $smtp->sendmail($smtpemailto, $smtpusermail, $mailsubject, $mailbody, $mailtype); 
  //邮件发送结束
 
  showmsg('购买成功!','ZC_Link_List.php?sort=2');

相关内容

热门资讯

空调连续工作多久需要停机休息 空调连续工作的时间取决于多个因素,包括空调的型号、功率、使用环境和维护情况等。一般来说,空调可以连续...
空调哪个符号是除湿的 空调除湿功能通常用一个水滴形状的符号表示。不同品牌和型号的空调遥控器可能会有所差异,但一般来说,除湿...
格力空调多长时间加一次氟利昂 1、一般情况下,空调对氟利昂的使用量是非常小的,所以在空调使用了四年左右的时候再考虑加也没问题。2、...
空调用多长时间需要加氟一次 一般情况下是五年。当出现以下这几种情况时,空调才需要加氟。1、空调的室内机和室外机各有两个接口,当接...
格调生活·C标思享荟:卡萨帝在... 9月12日的郑州龙湖金融岛,夜风轻拂,灯光璀璨。“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑...
品牌价值破千亿、高端份额持续领... 9月12日,“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑州站”在郑州龙湖金融岛举办。2026...
空调主板坏了修800还是换新的 空调主板坏了是修还是换新,需要考虑多个因素,以下是一些建议:1. 维修成本:如果维修费用较低,比如 ...
空调开多久需要休息多长时间 问题:空调开多久需要休息多长时间回答:1、在使用空调的过程中,一般空调开7~8个小时左右需要休息2~...
中央空调多长时间清洗一次 1、一般空调开机前清洗一次即可,空调开机中间时段再清洗一次,空调关机时清洗一次,这样比较合理。2、空...
中央空调氟利昂多久加一次 看空调制热和制冷程度,很多人的观点认为氟利昂必须一年放一次,其实这个观点是错误的,理解上面有点偏差,...