侯体宗的博客
  • 首页
  • 人生(杂谈)
  • 技术
  • 关于我
  • 更多分类
    • 文件下载
    • 文字修仙
    • 中国象棋ai
    • 群聊
    • 九宫格抽奖
    • 拼图
    • 消消乐
    • 相册

PHP实现发送邮件的方法(基于简单邮件发送类)

php  /  管理员 发布于 7年前   229

本文实例讲述了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 = $log_file; //邮件发送成功失败的日志记录文件    $this->sock = FALSE;  }  function mail_encode($str)  {   //return '=?utf-8?B?'.base64_encode(mb_convert_encoding($str, "GBK", "UTF-8")).'?=';   return "=?UTF-8?B?".base64_encode($str)."?="; }  /* 主函数,发送邮件 */  function sendmail($flag, $boundary, $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") {    if ($flag == 2) {     $header .= "Content-Type:multipart/mixed; boundary= $boundary\r\n";    } else {     $header .= "Content-Type:text/html; charset=\"UTF-8\" \r\n";    }   }   $header .= "To: " . $to . "\r\n";     if ($cc != "") {    $header .= "Cc: " . $cc . "\r\n";   }    $header .= "From: $from<" . $from . ">\r\n";   $subject = self::mail_encode($subject);   $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 . [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}quot;, "\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}quot;, "\1", $address );  return $address; } function smtp_debug($message) {  if ($this->debug) {   echo $message;  } }}?>

调用邮件发送类发送邮件

debug = TRUE;//是否显示发送的调试信息  if ($smtp->sendmail ( $flag, $boundary, $smtpemailto, $smtpmailfrom, $mailsubject, $mailbody, $mailtype, $cc, $bcc, $additional_headers )) {   echo ("发送成功");  } else {   echo ("发送失败");  } } ?>

希望本文所述对大家php程序设计有所帮助。

您可能感兴趣的文章:

  • Linux服务器下PHPMailer发送邮件失败的问题解决
  • PHP插件PHPMailer发送邮件功能
  • phpmailer简单发送邮件的方法(附phpmailer源码下载)
  • phplist及phpmailer(组合使用)通过gmail发送邮件的配置方法
  • PHP实现163邮箱自动发送邮件
  • php发送邮件的问题详解
  • PHP实现自动发送邮件功能代码(qq 邮箱)


  • 上一条:
    php提交post数组参数实例分析
    下一条:
    PHP响应post请求上传文件的方法
  • 昵称:

    邮箱:

    0条评论 (评论内容有缓存机制,请悉知!)
    最新最热
    • 分类目录
    • 人生(杂谈)
    • 技术
    • linux
    • Java
    • php
    • 框架(架构)
    • 前端
    • ThinkPHP
    • 数据库
    • 微信(小程序)
    • Laravel
    • Redis
    • Docker
    • Go
    • swoole
    • Windows
    • Python
    • 苹果(mac/ios)
    • 相关文章
    • Laravel从Accel获得5700万美元A轮融资(0个评论)
    • PHP 8.4 Alpha 1现已发布!(0个评论)
    • 用Time Warden监控PHP中的代码处理时间(0个评论)
    • 在PHP中使用array_pop + yield实现读取超大型目录功能示例(0个评论)
    • Property Hooks RFC在PHP 8.4中越来越接近现实(0个评论)
    • 近期文章
    • 在windows10中升级go版本至1.24后LiteIDE的Ctrl+左击无法跳转问题解决方案(0个评论)
    • 智能合约Solidity学习CryptoZombie第四课:僵尸作战系统(0个评论)
    • 智能合约Solidity学习CryptoZombie第三课:组建僵尸军队(高级Solidity理论)(0个评论)
    • 智能合约Solidity学习CryptoZombie第二课:让你的僵尸猎食(0个评论)
    • 智能合约Solidity学习CryptoZombie第一课:生成一只你的僵尸(0个评论)
    • 在go中实现一个常用的先进先出的缓存淘汰算法示例代码(0个评论)
    • 在go+gin中使用"github.com/skip2/go-qrcode"实现url转二维码功能(0个评论)
    • 在go语言中使用api.geonames.org接口实现根据国际邮政编码获取地址信息功能(1个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf分页文件功能(95个评论)
    • gmail发邮件报错:534 5.7.9 Application-specific password required...解决方案(0个评论)
    • 近期评论
    • 122 在

      学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..
    • 123 在

      Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..
    • 原梓番博客 在

      在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..
    • 博主 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..
    • 1111 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
    • 2016-10
    • 2016-11
    • 2017-06
    • 2017-07
    • 2017-08
    • 2017-09
    • 2017-11
    • 2017-12
    • 2018-01
    • 2018-02
    • 2018-03
    • 2020-03
    • 2020-04
    • 2020-05
    • 2020-06
    • 2020-07
    • 2020-09
    • 2021-02
    • 2021-03
    • 2021-04
    • 2021-05
    • 2021-06
    • 2021-07
    • 2021-08
    • 2021-09
    • 2021-10
    • 2021-11
    • 2021-12
    • 2022-01
    • 2022-02
    • 2022-05
    • 2022-06
    • 2022-07
    • 2022-08
    • 2022-09
    • 2022-10
    • 2022-11
    • 2022-12
    • 2023-01
    • 2023-02
    • 2023-03
    • 2023-04
    • 2023-05
    • 2023-06
    • 2023-07
    • 2023-08
    • 2023-09
    • 2023-10
    • 2023-11
    • 2023-12
    • 2024-01
    • 2024-02
    • 2024-03
    • 2024-04
    • 2024-05
    • 2024-06
    • 2024-07
    • 2024-09
    Top

    Copyright·© 2019 侯体宗版权所有· 粤ICP备20027696号 PHP交流群

    侯体宗的博客