<?php
/**
//******************************
//发送示例
require ("smtp.php");
$smtpserver = "smtp.163.com";//SMTP服务器
$smtpserverport =25;//SMTP服务器端口
$smtpusermail = "XXXXX@163.com";//SMTP服务器的用户邮箱
$smtpemailto = "XXX@XXX.net";//发送给谁
$smtpuser = "XXXXX";//SMTP服务器的用户帐号
$smtppass = "XXXXX";//SMTP服务器的用户密码
$mailsubject = "Test Subject";//邮件主题
$mailbody = "<h1>This is a test mail</h1>";//邮件内容
$mailtype = "HTML";//邮件格式(HTML/TXT),TXT为文本邮件
$smtp = new smtp($smtpserver,$smtpserverport,true,$smtpuser,$smtppass);//这里面的一个true是表示使用身份验证,否则不使用身份验证.
$smtp->debug = TRUE;//是否显示发送的调试信息
$smtp->sendmail($smtpemailto, $smtpusermail, $mailsubject, $mailbody, $mailtype);
//******************************
*/
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");
        }
        #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 = 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;

}

}

}

?>

在线邮件发送,SMTP类相关推荐

  1. Java 基于mail.jar 和 activation.jar 封装的邮件发送工具类

    准备工作 发送邮件需要获得协议和支持! 开启服务 POP3/SMTP 服务 如何开启 POP3/SMTP 服务:https://blog.csdn.net/weixin_44953227/articl ...

  2. 封装一个邮件发送工具类,一个字,巴适

    系列文章目录 文章目录 系列文章目录 前言 一. 介绍 二.二话不说开始干 1.引入库 2. 邮件发送实体(Mail) 3. 邮件发送类型枚举(MailType ) 4.邮件发送抽象类(Abstrac ...

  3. JAVA 邮件发送工具类

    1.封装邮件接收地址MODEL和邮件信息MODEL package com.sicdt.jnzxgzc.common.mail.model;import java.io.Serializable; / ...

  4. C# 邮件发送帮助类

    引用 using Microsoft.Extensions.Configuration; using System; using System.Collections.Generic; using S ...

  5. SMTP 协议邮件发送工具封装

    文章目录 1. 前言 1.1 说明 1.2 建议 1.3 源码 2. 发件人邮箱开通smtp 服务 2.1 为什么开通smtp 服务 2.2 开启服务的步骤 2.3 普通邮箱开启服务图文 3. 工具类 ...

  6. php yeah 发送邮箱,ThnikPHP 3.2 整合PHPmailer 发送SMTP邮件

    网站使用TP3.2开发,需要使用SMTP邮件注册验证功能,网上研究很多内容,自己尝试并且整理如下 postbrid : There I am , in the world more exciting! ...

  7. exchange无法收发邮件_SpringBoot2.x系列教程69--SpringBoot中整合邮件发送

    SpringBoot2.x系列教程69--SpringBoot中整合邮件发送 作者:一一哥 注: 本文案例以QQ邮箱发送的实现为例! 一. 邮件发送概述 1. 概述 在Spring框架中提供了一个Ja ...

  8. [Java工具] 邮件发送工具

    注册邮箱 去163邮箱(或其他邮箱)注册一个邮箱,并开启SMTP授权码. 程序 需要注意的是,由于阿里云服务器不让使用默认的25端口,所以会出现Windows下测试发送邮件成功,Linux服务器下发送 ...

  9. exchange无法收发邮件_SpringBoot2.x系列教程69--SpringBoot中整合Mail实现邮件发送

    SpringBoot2.x系列教程69--SpringBoot中整合邮件发送 作者:一一哥 注: 本文案例以QQ邮箱发送的实现为例! 一. 邮件发送概述 1. 概述 在Spring框架中提供了一个Ja ...

最新文章

  1. Docker核心技术之镜像
  2. java web学习项目20套源码完整版
  3. CCNp笔记(EIGRP)
  4. FFmpeg4.1 视频解码,保存原始YUV数据
  5. 72. Leetcode 99. 恢复二叉搜索树 (二叉搜索树-中序遍历类)
  6. Material Master_物料类型后台配置
  7. 经典mysql语句_经典MYSQL语句
  8. YII CDbCriteria 的一些常用方法记录
  9. ad转换器工作原理_AD转换中参考电压的作用
  10. “CSDN 2021年度IT技术影响力之星评选”正式开启报名!
  11. 渗透测试入门17之一次完整的渗透测试流程
  12. Android获取设备隐私 忽略6.0权限管理
  13. mysql里的各种锁
  14. ScheduleJobFactory
  15. 云小课 | 华为云KYON之VPC终端节点
  16. C++伪(pseudo)随机数生成及简单应用
  17. 计算机二级知识普及挑战赛答案,全国计算机二级试题库
  18. 计算机体系架构未来趋势(深度)
  19. Javascript 实现汉字简繁体互相转换
  20. C# MemCached

热门文章

  1. androidStudio 4.0 打包jar、找不到jar一系列问题、classes.jar位置
  2. 程序员拓展人脉的重要性
  3. 微信分享到朋友圈java_微信开发(三)微信分享朋友朋友圈
  4. 关于Undefined symbol ‘_VCI_Transmit@20’ referenced in XXX 解决办法
  5. 我要是儿子的同班同学
  6. Python程序设计之 —— 简易学生信息管理系统
  7. H7-TOOL发布V2.10, RTT增加搜索范围, 脱机烧录增加华大, 雅特力, 航顺,复旦微和nRF51新型号, 一键下载, HEX分段等(2021-12-29)
  8. Chapter11.1:离散控制系统基本概念
  9. 调用JShaman的Web API接口,实现JS代码加密。
  10. Unexpected token ‘ in JSON