php通过smtp发送邮件需要通过一个类smtp

发邮件的代码如下:

require_once 'smtp.php';##########################################
$smtpserver = "smtp.sina.com";//SMTP服务器
$smtpserverport = 25;//SMTP服务器端口
$smtpusermail = "god_chen@sina.com";//SMTP服务器的用户邮箱
$smtpemailto = "45323333@qq.com";//发送给谁
$smtpuser = "name";//SMTP服务器的用户帐号
$smtppass = "123456";//SMTP服务器的用户密码
$mailsubject = "中文";//邮件主题
$mailbody = "<h1>中文</h1>测试下能淤泥新年感";//邮件内容
$mailtype = "HTML";//邮件格式(HTML/TXT),TXT为文本邮件
##########################################
$smtp = new smtp($smtpserver,$smtpserverport,true,$smtpuser,$smtppass);//这里面的一个true是表示使用身份验证,否则不使用身份验证.
$smtp->debug = FALSE;//是否显示发送的调试信息
$smtp->sendmail($smtpemailto, $smtpusermail, $mailsubject, $mailbody, $mailtype)

smtp类的源码如下:

<?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;/* Private Variables */var $sock;/* Constractor */function smtp($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 = 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";}$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");}#authif($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;
}
}}

php smtp发送邮件相关推荐

  1. Lumen / Laravel 使用网易邮箱 SMTP 发送邮件

    Laravel 是目前最流行的PHP框架,而Lumen 是 Laravel 的精简版,主要用于接口开发. Laravel 邮件发送服务基于 Symfony 组件 Swift Mailer. 本文记录了 ...

  2. Lumen / Laravel 5.5 使用网易邮箱 SMTP 发送邮件

    2019独角兽企业重金招聘Python工程师标准>>> Laravel 是目前最流行的PHP框架,而Lumen 是 Laravel 的精简版,主要用于接口开发. Laravel 邮件 ...

  3. Python使用SMTP发送邮件

    1.目标 使用SMTP发送邮件 2.系统环境 操作系统:Win7 64 Python版本:3.7.0 3.代码参考 #config:utf-8                         #强制使 ...

  4. Centos 配置mailx使用外部smtp发送邮件

    今天写定时脚本时,用到监控服务器是否备份成功,配置sentmail和postfix总是出问题,原本想只是接受个信息,没必要那么麻烦,直接配置mailx就能满足了,具体配置如下: 1.安装mailx y ...

  5. python发送qq邮件列表_Python SMTP发送邮件

    发送邮件是个很常用的功能.比如自己写个脚本获取并分析股票或期货数据,如果发现有交易机会.此时可以发个邮件来提醒自己. SMTP即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控 ...

  6. 在.NET中使用SMTP发送邮件

    这是一篇转载,可能对大家很有用啊,放首页看看是否有参考价值.本文提到的方案仍然不能算是完全解决所有问题,最佳的dotNET下通过SMTP(带验证)发送邮件的机制是什么,不知道大家有什么好的看法! 摘要 ...

  7. linux使用外部smtp发送邮件,Centos 配置mailx使用外部smtp发送邮件

    今天写定时脚本时,用到监控服务器是否备份成功,配置sentmail和postfix总是出问题,原本想只是接受个信息,没必要那么麻烦,直接配置mailx就能满足了,具体配置如下: 1.安装mailx y ...

  8. java使用smtp发送邮件问题

    原先使用smtp通过邮箱发送邮件不需要认证,但是后来发现如果使用的是QQ邮箱会报认证失败的异常.原来QQ邮箱是需要ssl认证的,需要先到QQ邮箱里的 设置--账户--POP3/IMAP/SMTP/Ex ...

  9. php mail laravel,Laravel框架实现的使用smtp发送邮件功能示例

    本文实例讲述了Laravel框架实现的使用smtp发送邮件功能.分享给大家供大家参考,具体如下: 1..env文件中配置 MAIL_DRIVER=smtp MAIL_HOST=smtp.邮箱后缀 MA ...

最新文章

  1. Redis在CentOS 6.8中的安装方法,JAVA初级使用Redis连接池
  2. 安装Live communication server 2005存档服务
  3. Oracle 11.2.0.3.7 PSU补丁升级
  4. linux下signal()函数超详细介绍
  5. java interface 函数_java8函数式接口(Functional Interface)
  6. phpcms移动端和pc端_移动端调试大法
  7. 为避免攻击,研究员把严重的比特币漏洞详情焐了两年
  8. [渝粤教育] 广东-国家-开放大学 21秋期末考试管理学原理★10013k1
  9. Python-正则表达式提取想要的内容
  10. 关于cocoa 运行时runtime
  11. Python办公自动化——8行代码实现文件去重
  12. 数学笔记——导数4(反函数的导数)
  13. Java-事务的传播特性和隔离级别
  14. 华三路由交换配置命令_华为-华三交换机路由器命令大全
  15. C语言 简单走迷宫小游戏
  16. 软件架构设计-大型网站技术架构于业务架构融合之道——部分知识点总结【未完】
  17. ActivityManager: Waited long enough for: ServiceRecord 问题解决
  18. 基因家族分析⑤:进化树构建
  19. GB/T28181国标视频直播平台LiveGBS支持录像回放吗云端录像录制在哪里
  20. 图像处理(3):深度学习之图像分类(垃圾分类案例)

热门文章

  1. 第四章 虚拟现实的计算体系结构
  2. 【2019年04月04日】股市指数估值排名
  3. T1 mapping的用途
  4. 项目配置不当引发了数据泄露,人已裂开!!(建议收藏)
  5. 数据分析之缺失值填充(重点讲解多重插值法Miceforest)
  6. mysql解析json_mysql解析简单json字符串
  7. 24年前他被余承东招入华为,现在掌舵第四大事业群,对垒阿里张建锋、百度王海峰,腾讯汤道生
  8. 舵机的使用方法和一些注意事项
  9. 《创新创业实训》网课答案解析
  10. GlobalSign 发布了即将要修改代码签名证书的重要通知