用Socket发送电子邮件,发送邮件与发送邮件类

2019-09-30 03:26栏目:网络时代
TAG:

<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=gb2312" />
<title>使用php发送电子邮件</title>
<style type="text/css教程">
<!--
.style1 {font-size: 12px}
.style2 {
 font-size: 24px;
 font-weight: bold;
}
-->
</style>
</head>

int fsockopen(string hostname, int port, int [errno], string [errstr], int [timeout]);

/*邮件发送类
*功能:php教程 socket 使用smtp服务器发送邮件
*作者:longlong
*时间:2007-11-26
*转帖请加本贴援用地址:showpost.asp教程?threadid=1345 
*/
class smtp
{
/* 全局变量 */
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;

/* 构造函数 */

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;
}

/* 主函数,发送邮件 */

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("(^|(rn))(.)", "1.3", $body);
  $header = "mime-version:1.0rn";
   
  //*
  if($mailtype=="html"){
  //echo $boundary;exit;
if($flag==2)
{
  $header .= "content-type:multipart/mixed; boundary= $boundaryrn";
  //$header .= "content-type:text/htmlrn";
}
else

  $header .= "content-type:text/htmlrn";
}
  }
  //*/

  $header .= "to: ".$to."rn";

  if ($cc != "") {
  $header .= "cc: ".$cc."rn";
  }

  $header .= "from: $from<".$from.">rn";
  $header .= "subject: ".$subject."rn";
  $header .= $additional_headers;
  $header .= "date: ".date("r")."rn";
  $header .= "x-mailer:by redhat (php/".phpversion().")rn";

  //$header.=$body;//edit by shaolong
  
  list($msec, $sec) = explode(" ", microtime());

  $header .= "message-id: <".date("ymdhis", $sec).".".($msec*1000000).".".$mail_from.">rn";

  $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 hostn");
  }
  return $sent;
}

/* 私有函数 */

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."rn".$body);
  $this->smtp_debug("> ".str_replace("rn", "n"."> ", $header."n> ".$body."n> "));
  return true;
}


function smtp_eom()
{
  fputs($this->sock, "rn.rn");

  $this->smtp_debug(". [eom]n");

  return $this->smtp_ok();
}


function smtp_ok()
{
  $response = str_replace("rn", "", fgets($this->sock, 512));
  $this->smtp_debug($response."n");

  if (!ereg("^[23]", $response)) {
  fputs($this->sock, "quitrn");
  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."rn");
  $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("([ trn])+", "", $address);
  $address = ereg_replace("^.*<(.+)>.*$", "1", $address);
  return $address;
}


function smtp_debug($message)
{
  if ($this->debug) {
  echo $message;
  }
}
}

if(empty($sendto) || empty($subject) || empty($emailcontent))
{
    echo '<b>请填入收件人email地址、邮件主旨和邮件正文。</b><br/>';
    exit;
}

这正是局地SMTP的大约知识。相关内容能够查阅科雷傲FC。

//mail.php

类的布局

 代码如下

?>

第1行,装入send_mail类。
第3行,创制三个类的实例,且设置彰显调示音讯,要是不想显示,能够
$sendmail=new send_mail("smtp.263.net");。
第4行,发送邮件。

很简单,不是吧?下边再给合以前的发送MIME邮件的事例,给出叁个发送HTML附件的例证。


<?php

include "MIME.class.php3";
//注,在出殡和埋葬MIME邮件一文中,这一个类公事名称叫MIME.class,在这里作者改成这么的

$to = 'chatme@263.net'; //改为收信人的信箱
$str = "Newsletter for ".date('M Y', time());

//信息被本人改少了
$html_data = '<html><head><title>'. $str. '</title></head>
<body bgcolor="#ffffff">
Hello! This is a test!
</body>
</html>';

//生成MIME类实例
$mime = new MIME_mail("chatme@263.net", $to, $str);

//添加HTML附件
$mime->attach($html_data, "", HTML, BASE64);

//注释掉,选用作者的出殡和埋葬邮件管理
//$mime->send_mail();

//生成邮件
$mime->gen_email();

//呈现邮件新闻
//echo $mime->email."<br>";

//包含sendmail文件
include "sendmail.class.php3";

//成立实例
$sendmail=new send_mail("smtp.263.net", "limodou", true);

//发送邮件
$sendmail->send("chatme@263.net", "chatme@263.net", $str, $mime->email);

 代码如下

LANDFC 821概念了收/发电子邮件的连锁指令。
福睿斯FC 822则拟定了邮件內容的格式。
帕杰罗FC 2045-2048拟订了多媒体邮件內容的格式,
EscortFC 1113, 1422-1424则是座谈哪边进步电子邮件的保密性。

send_mail.php

客商端一些常用的SMTP指令为:

 

var $lastmessage; //记录最后回来的响应音信
var $lastact; //最后的动作,字符串情势
var $welcome; //用在HELO前面,招待客户
var $debug; //是还是不是出示调节和测量检验音信
var $smtp; //smtp服务器
var $port; //smtp端口号
var $fp; //socket句柄

<?php
class smtp_mail
{
    var $lastmessage;                            //记录最终回来的响应消息
    var $lastact;                                //最终的动作,字符串形式
    var $welcome;                                //用在helo后边,款待客商
    var $debug;                                  //是不是出示调试消息
    var $smtp;                                   //smtp服务器
    var $port;                                   //smtp端口号
    var $fp;                                     //socket句柄
   
    function smtp_mail($smtp, $welcome="", $debug=false)
    {
        if(empty($smtp)) die("smtp cannt be null!");
       
        $this->smtp=$smtp;
        if(empty($welcome))
        {
            $this->welcome=gethostbyaddr("localhost");
        }
        else
            $this->welcome=$welcome;
        $this->debug=$debug;
       
        $this->lastmessage="";
        $this->lastact="";
        $this->port="25";
    }

运用fsockopen函数张开三个Internet连接,函数语法格式:

 代码如下

14 }

在编排socket管理局地意识,一些下令的管理很相像,如HELO,MAIL FROM,RCPT TO,QUIT,DATA命令,
都务求依照是还是不是出示调节和测验音讯将有关内容展现出来,同期对于再次回到的响应码,假设是希望的,则应持续管理,
倘使不是意在的,则应暂停出理。所感到了清晰与简化,特意对那几个命令的管理编写了一个通用管理函数。
函数的参数中$code为期待的响应码,纵然响应码与之一样则意味管理成功,不然出错。

第3行,记录最终推行命令。
第4行,将上传命令展现出来。
第5行,则选拔fputs真正向服务器传换指令。
第6行,从服务器收到响应音信将放在最终响应音讯变量中。
第7行,将响应消息展现出来。
第8行,剖断响应新闻是还是不是愿意的,如若是则第13行再次回到成功(true),不然在第10行再次回到战败(false)。

这么,这些函数一方面达成指令及信息的出殡呈现效果,别一方濒临回到的响应剖断是还是不是成功。

邮件发送管理

下边是的确的机要了,可要看稳重了。:)


1 function send( $to,$from,$subject,$message)
2 {
3
4 //连接服务器
5 $this->lastact="connect";
6
7 $this->show_debug("Connect to SMTP server : ".$this->smtp, "out");
8 $this->fp = fsockopen ( $this->smtp, $this->port );
9 if ( $this->fp )
10 {
11
12 set_socket_blocking( $this->fp, true );
13 $this->lastmessage=fgets($this->fp,512);
14 $this->show_debug($this->lastmessage, "in");
15
16 if (! ereg ( "^220", $this->lastmessage ) )
17 {
18 return false;
19 }
20 else
21 {
22 $this->lastact="HELO " . $this->welcome . "n";
23 if(!$this->do_command($this->lastact, "250"))
24 {
25 fclose($this->fp);
26 return false;
27 }
28
29 $this->lastact="MAIL FROM: $from" . "n";
30 if(!$this->do_command($this->lastact, "250"))
31 {
32 fclose($this->fp);
33 return false;
34 }
35
36 $this->lastact="RCPT TO: $to" . "n";
37 if(!$this->do_command($this->lastact, "250"))
38 {
39 fclose($this->fp);
40 return false;
41 }
42
43 //发送正文
44 $this->lastact="DATAn";
45 if(!$this->do_command($this->lastact, "354"))
46 {
47 fclose($this->fp);
48 return false;
49 }
50
51 //处理Subject头
52 $head="Subject: $subjectn";
53 if(!empty($subject) && !ereg($head, $message))
54 {
55 $message = $head.$message;
56 }
57
58 //处理From头
59 $head="From: $fromn";
60 if(!empty($from) && !ereg($head, $message))
61 {
62 $message = $head.$message;
63 }
64
65 //处理To头
66 $head="To: $ton";
67 if(!empty($to) && !ereg($head, $message))
68 {
69 $message = $head.$message;
70 }
71
72 //加上截至串
73 if(!ereg("n.n", $message))
74 $message .= "n.n";
75 $this->show_debug($message, "out");
76 fputs($this->fp, $message);
77
78 $this->lastact="QUITn";
79 if(!$this->do_command($this->lastact, "250"))
80 {
81 fclose($this->fp);
82 return false;
83 }
84 }
85 return true;
86 }
87 else
88 {
89 $this->show_debug("Connect failed!", "in");
90 return false;
91 }

 

Socket编制程序介绍
向我们注解,本身不是二个TCP/IP编制程序专家,故在此只是讲出了本人的少数驾驭和认识。

 

参数的情趣笔者想不用讲了,这里由于要运用SMTP合同,所以端口号为25。在张开连接成功后,会重临一
个socket句柄,使用它就足以象使用文件句柄同样的。可利用的操作有fputs(),fgets(),feof(),fclose()
等。

                if(!ereg(" . ", $message))    //加上得了串
                    $message .= " . ";
                $this->show_debug($message, "out");
                fputs($this->fp, $message);
           
                $this->lastact="quit ";
                if(!$this->do_command($this->lastact, "250"))
                {
                    fclose($this->fp);
                    return false;
                }
            }
            return true;
        }
        else
        {
            $this->show_debug("connect failed!", "in");
            return false;
        }
    }
}

您可能感兴趣的篇章:

  • C#编写发送邮件组件
  • C#福寿年高异步发送邮件的艺术
  • Java Mail与Apache Mail发送邮件示例
  • C#兑现SMTP邮件发送程序实例
  • C#.NET采纳HTML模板发送电子邮件完整实例
  • C# 邮件发送和收受完毕代码
  • C# 邮件地址是不是合法的印证
  • C++实现邮件群发的主意

    function show_debug($message, $inout)
    {
        $b = false;
        if ($this->debug)
        {
            if($inout=="in")                     //响应信息
            {
                $m='<< ';
                $b = true;
            }
            else                                 //诉求指令
                $m='>> ';
            if(!ereg(" $", $message))
                $message .= "";
            $message=nl2br($message);
            if($b)
                echo "<b>${m}${message}</b>";
            else
                echo "${m}${message}";
        }
    }
   
    function do_command($command, $code)
    {
        $this->lastact=$command;
        $this->show_debug($this->lastact, "out");
        fputs ( $this->fp, $this->lastact );
       
        $this->lastmessage = fgets ( $this->fp, 512 );
        $this->show_debug($this->lastmessage, "in");
       
        if(!ereg("^$code", $this->lastmessage))
        {
            return false;
        }
        else
            return true;
    }
   
    function send($from,$to,$subject,$message)
    {
        $this->show_debug("connect to smtp server : ".$this->smtp." ", "out");
        $this->fp = fsockopen ( $this->smtp, $this->port );
        if ( $this->fp )
        {
            set_socket_blocking( $this->fp, true );
            $this->lastmessage=fgets($this->fp,512);
            $this->show_debug($this->lastmessage, "in");
           
            if (! ereg ( "^220", $this->lastmessage ) )
            {
                return false;
            }
            else
            {
                $this->lastact="helo " . $this->welcome . " ";
                if(!$this->do_command($this->lastact, "250"))
                {
                    fclose($this->fp);
                    return false;
                }
               
                $this->lastact="mail from:<$from>". " ";
                if(!$this->do_command($this->lastact, "250"))
                {
                    fclose($this->fp);
                    return false;
                }
           
                $this->lastact="rcpt to:<$to>" . " ";
                if(!$this->do_command($this->lastact, "250"))
                {
                    fclose($this->fp);
                    return false;
                }

HELO limodou
250 smtp.263.net
MAIL FROM: chatme@263.net
250 Ok
RCPT TO: chatme@263.net
250 Ok
DATA
354 End data with .
To: chatme@263.net
From: chatme@263.net
Subject: test
From: chatme@263.net
test
.
QUIT
250 Ok: queued as C46411C5097E0

if(isset($_post['emailcontent']))
    $emailcontent = $_post['emailcontent'];
else
    $emailcontent = '';

220 服务就绪(在socket连接成功时,会回到此音讯)
221 正在管理
250 央浼邮件动作不利,完毕(HELO,MAIL FROM,RCPT TO,QUIT指令实践成功会回来此音信)
354 最初发送数据,甘休以 .(DATA指令实践成功会重临此消息,客商端应发送音信)
500 语法错误,命令无法鉴定分别
550 命令不能够施行,邮箱无效
552 中断管理:客户当先文件空间
上边给出八个简短的命令头(那是在开采socket之后做的),是自身向stmp.263.net发邮件的测量检验结果:

 

function send_mail($smtp, $welcome="", $debug=false)
{
if(empty($smtp)) die("SMTP cannt be NULL!");
$this->smtp=$smtp;
if(empty($welcome))
{
$this->welcome=gethostbyaddr("localhost");
}
else
$this->welcome=$welcome;
$this->debug=$debug;
$this->lastmessage="";
$this->lastact="";
$this->port="25";

if(isset($_post['sendto']))
    $sendto = $_post['sendto'];
else
    $sendto = '';

HELO hostname: 与服务器打招呼并告诉客商端应用的机器名字,能够随意填写
MAIL FROM: sender_id : 告诉服务器发信人的地点
RCPT TO: receiver_id : 告诉服务器收信人的地址
DATA : 上边初叶传输信件内容,且最后要以只含有.的奇特行终止
RESET: 打消刚才的指令,从新开始
VECR-VIFY userid: 校验帐号是不是存在(此命令为可选指令,服务器大概不援助)
QUIT : 退出连接,结束
服务器重返的响应音讯为(格式为:响应码+空格+解释):

                $this->lastact="data ";         //发送正文
                if(!$this->do_command($this->lastact, "354"))
                {
                    fclose($this->fp);
                    return false;
                }


 

SMTP的基础
遵照TCP/IP的因特网合同常常的一声令下格式都以因而伏乞/ 应答格局实现的,采纳的都以文本音信,所以
拍卖起来要轻松一些。SMTP是简约邮件传输公约的简称,它能够兑现顾客端向服务器发送邮件的法力。所以
下边所讲的授命是指客商端向服务器发出诉求指令,而响应则是指服务器再次来到给顾客端的音讯。

</body>
</html>

很简短地介绍就到此处吧。

<?php
include "mail.php";

16 }

这些函数用来体现调节和测量检验音信。能够在$inout中内定是上传的命令照旧回到的响应,假使为上传指令,则
行使"out";借使为回去的响应则选取"in"。

第3行,推断是还是不是要出口调试音信。
第5行,判断是或不是为响应音信,倘使是,则在第7行将音讯的先头加上"<< "来差距新闻;不然在第10行加上
">> "来分别上传指令。
第11-12行,推断音讯串最终是或不是为换行符,如不是则增长HTML换行标志。第13行将据此的换行符转成HTML
的换行标志。
第14行,输出整条音信,同不常候将音信颜色置为浅米灰以示不一样。

试行一个下令


1 function do_command($command, $code)
2 {
3 $this->lastact=$command;
4 $this->show_debug($this->lastact, "out");
5 fputs ( $this->fp, $this->lastact );
6 $this->lastmessage = fgets ( $this->fp, 512 );
7 $this->show_debug($this->lastmessage, "in");
8 if(!ereg("^$code", $this->lastmessage))
9 {
10 return false;
11 }
12 else
13 return true;

                $head="to: $to ";               //处理to
                if(!empty($to) && !ereg($head, $message))
                {
                    $message = $head.$message;
                }

}

这几个构造函数主要形成都部队分起首值的判别及安装。$welcome用于HELO指令中,告诉服务器客户的名字。
HELO指令供给为机器名,不过不用也得以。假若客商并未有交给$welcome,则自动寻找本地的机械名。

来得调节和测量检验新闻


1 function show_debug($message, $inout)
2 {
3 if ($this->debug)
4 {
5 if($inout=="in") //响应消息
6 {
7 $m='<< ';
8 }
9 else
10 $m='>> ';
11 if(!ereg("n$", $message))
12 $message .= "<br>";
13 $message=nl2br($message);
14 echo "<font color=#999999>${m}${message}</font>";
15 }

if(isset($_post['subject']))
    $subject = $_post['subject'];
else
    $subject = '';

内部,$lastmessage和$lastact用于记录最终一回响应消息及实践的通令,当出错开上下班时间,客商能够动用它
们。为了测量试验要求,作者还定义了$debug变量,当其值为true时,会在运作进程中展现一些推行新闻,不然无
别的输出。$fp用于保存展开后的socket句柄。

                $head="subject: $subject ";     //处理subject
                if(!empty($subject) && !ereg($head, $message))
                {
                    $message = $head.$message;
                }
           
               
                $head="from: $from ";           //处理from
                if(!empty($from) && !ereg($head, $message))
                {
                    $message = $head.$message;
                }

92 }

稍加意思很领悟的自个儿就不说了。

本条函数一共有多少个参数,分别是$to表示收信人,$from代表发信人,$subject表求邮件宗旨和$message
代表邮件体。假设管理成功则赶回true,失利则赶回false。

第8行,连接邮件服务器,如若成功响应码应该为220。
第12行,设置阻塞形式,表示音讯必须回到技能持续。详细表明看手册吧。
第16行,决断响应码是不是为220,假设是,则持续管理,不然出错重回。
第22-27行,管理HELO指令,期望响应码为250。
第29-34行,管理MAIL FROM指令,期待响应码为250。
第36-41行,管理RCPT TO指令,期待响应码为250。
第44-49行,管理DATA指令,期待响应码为354。
第51-76行,生成邮件体,并发送。
第52-56行,假若$subject不为空,则查找邮件体中是或不是有焦点部分,若无,则增进核心部分。
第59-63行,如若$from不为空,则查找邮件体中是不是有发信人部分,若无,则增进头发信人部分。
第66-70行,如若$to不为空,则查找邮件体中是或不是有收信人部分,若无,则增加收信人部分。
第73-74行,查找邮件体是或不是有了结束行,若无则增加邮件体的甘休行(以"."作为单身的一站式的差异日常行)。
第76行,发送邮件体。
第78-83行,试行QUIT结否与服务器的一而再,期待响应码为250。
第85行,重返管理成功申明(true)。
第81-91行,与服务器连接战败的管理。

如上为一切send_mail类的兑现,应该不是很难的。上边给出一个实例。

邮件发送实例

 

?>

评释写的很精晓,就不再做越来越多的表明了。若是实在运用中,请将send_mail构造函数中的debug设为
false或不写就能够。

$sendmail=new smtp_mail("smtp.sina.com", "sina", false);
if($sendmail->send("macbooks@sina.com", $sendto, $subject, $emailcontent))
{
    echo "发送成功!";
}
else
{
    echo "www.111cn.net出殡失利!";
}
?>

send_mail类的兑现
今后开班介绍本人所编写的发送邮件类。有了上面包车型地铁筹算知识了,下面正是达成了。

<body>
<p align="center" class="style2">使用php发电子邮件</p>
<form name="form1" method="post" action="send_mail.php">
<table width="444" height="347" border="0" align="center">
    <tr>
        <td width="71" height="23" bgcolor="#d6b1e9">
        <div align="right" class="style1">
            <div align="left"> 收件人</div>
        </div>
        </td>
        <td width="363">
            <label> <input type="text" name="sendto"></label>
        </td>
    </tr>
    <tr>
        <td height="27" bgcolor="#d6b1e9">
        <div align="right" class="style1">
            <div align="left"> 邮件标题</div>
        </div></td>
        <td>
            <label> <input type="text" name="subject"></label>
        </td>
    </tr>
    <tr>
        <td height="23" colspan="2" bgcolor="#d6b1e9">
        <div align="right" class="style1">
            <div align="left"> 邮件正文</div>
        </div>
        </td>
    </tr>
    <tr>
        <td colspan="2" bgcolor="#d6b1e9">
        <div align="right">www.111cn.net
            <label>
            <div align="left">
                <textarea name="emailcontent" cols="60" rows="18"></textarea>
            </div>
            </label>
        </div>
          <div align="right"></div>
        <div align="right"></div>
        </td>
    </tr>
    <tr>
        <td colspan="2">
            <label><input type="submit" name="submit" value="提交"></label>
        </td>
    </tr>
</table>
</form>

先交付二个最轻巧易行的实例:

<?
1 include "sendmail.class.php3";
2 $email="Hello, this is a test letter!";
3 $sendmail=new send_mail("smtp.263.net", "limodou", true); //展现调示消息
4 if($sendmail->send("chatme@263.net", "chatme@263.net", "test", $email))
5 {
6 echo "发送成功!<br>";
7 }
8 else
9 {
10 echo "发送失利!<br>";
11 }

用Socket发送电子邮件 在笔者所申请的多少个PHP 主页空间中,能够提供mail功用的莫过于非常少,总是调用完mail()函数之后就毫
无下文了。可是电子邮件在英特网生活中的效用越来越大。想一想网虫上网不收邮件能叫真正的蜘蛛吗?邮件
的效果作者不想再说了,不过一旦主页空间不辅助mail()发送那么怎么做呢?作者也想过通过socket来贯彻邮件
发送,但迫于对用php 进行socket编程不熟知,再加多发送邮件要用到SMTP公约,又要读不菲的英语了,所
以直接也绝非去研究过。终于有一天作者发掘了一篇作品,关于用socket编程发送邮件。笔者如获珍宝般将其拷
贝下来,何况将其改动成了二个php 可用的类,供我们使用。原本的小说只是二个简单的例子,並且还可能有一
些错误,在小编通过一再的试验、改动终于将其改成了三个直接采纳socket,向内定的邮箱发送邮件的类,如
果大家和前面关于发送MIME的稿子结合起来,就能够达成在不协理mail()函数的网址上发送邮件了。因为发
送邮件的长河必要时间,大概与mail()的管理机制还不完全一致,所以速度要慢一些,但是足以缓和必要发
送邮件功用的急切,同期您也可以学习用php 进行socket编制程序。下边就将以此类的完成原理介绍给我们,
再就是向咱们讲授一些关于SMTP的基本知识。

类的分子变量

SMTP分为命令头和信息体两片段。命令头重要成就客商端与服务器的连接,验证等。整个经过由多条命
令组成。每一个命令发到服务器后,由服务器交由响应新闻,日常为3 位数字的响应码和响应文件。区别的服
务器重临的响应码是信守公约的,不过响应正文本则不必。各类命令及响应的结尾都有三个回车符,那样使
用fputs()和fgets()就可以展开指令与响应的管理了。SMTP的指令及响应新闻都以单行的。音信体则是邮件
的正文部分,最后的结束行应以单独的"."作为完成行。

版权声明:本文由澳门新葡亰平台游戏发布于网络时代,转载请注明出处:用Socket发送电子邮件,发送邮件与发送邮件类