php发送Email总结

最近帮助一个同事调试一个mail发送email程序,着实让我喝了一壶,现在针对php发送邮件做下总结:

php 发送邮件方式 php内置mail函数,需要邮件服务器:

函数说明如下:

mail(to,subject,message,headers,parameters)

如果你只需要简单的发送邮件那只需要用前三个参数,但如果你需要使用邮件的复杂功能,比如设置from、cc、附件等等那就得设置下邮件的header啦,举个例子:

 $headers = 'MIME-Version:1.0'."\r\n".
            'Content-type:text/html; charset=utf-8'."\r\n".
            'From: '.$sender . "\r\n". 
            'Reply-To:'. $sender . "\r\n"
 mail("towho@sina.com","test email","test body", $headers);

但是如果没有邮件服务器,需要借助企业邮箱发邮件的就可以使用fsockopen 发送smtp数据,实现邮件发送功能,具体发送数据的头如下:

MIME-Version:1.0
Content-Type:text/html;charset=utf-8
Content-Transfer-Encoding: base64
To: 596****2@qq.com
From: ancruna's message<info@dra***ations.com>
Subject: Hello world!这是一封测试邮件的标题
Date: Mon, 17 Feb 2014 16:15:58 +0800
X-Mailer:By Apache (PHP/5.2.3)
Message-ID: <20140217161558.760479.ancruna's message>

具体代码如下:

<?php
/**
 * SMTP邮件发送演示
 *
 * @author  ancruna
 **/
//包含SMTP类文件
include './Smtp.class.php';
 
$smtpserver   = "smtp.exmail.sina.com";   //SMTP服务器 
$smtpport     = 25;                     //SMTP服务器端口 
$smtpusermail = "info@dr**ons.com";     //SMTP服务器的用户邮箱 (企业邮箱)
$smtpuser     = "info@dr**ons.com";     //SMTP服务器的用户帐号 (企业邮箱)
$smtppass     = "*****";               //SMTP服务器的用户密码 
 
$mailfrom     = "ancruna's message";         //发送者名称
$mailto       = '59***02@qq.com';      //发送给谁(QQ邮箱情况下不能和上面的登录帐户一样,否则发不出去)
$mailsubject  = "Hello world!这是一封测试邮件的标题";  //邮件主题 
$mailbody     = '您好!这是一封测试邮件来自<a href="http://www.joychao.cc">Joychao\'Blog</a>';//邮件内容,支持HTML
$mailtype     = "HTML";                 //邮件格式(HTML/TXT),TXT为文本邮件 
########################################## 
//这里面的一个true是表示使用身份验证,否则不使用身份验证. 
$smtp = new Smtp($smtpserver,$smtpport,true,$smtpuser,$smtppass);//实例化SMTP类
//是否显示调试信息 
$smtp->debug = 1;
//发送邮件
$res=$smtp->sendmail($mailto, $mailfrom, $mailsubject, $mailbody, $mailtype);
if($res){
    echo '发送成功';
}else{
    echo '发送失败';
}
?>

<?php

class Smtp {
    public $smtp_host;  //SMTP主机,如: smtp.qq.com
    public $smtp_port = 25; //SMTP端口
    public $auth = TRUE;    //是否需要帐户认证
    public $user;       //帐户名
    public $pass;       //帐户密码
    public $debug = FALSE;  //开启调试
    public $time_out;
    public $host_name;
    public $log_file;
    public $sock;
 
    /**
     * 构造函数,连接smtp服务器
     * @param string    smtp服务器
     * @param int       smtp服务器端口
     * @param bool      smtp服务器是否需要认证
     * @param string    smtp服务器邮件帐号
     * @param string    smtp服务器邮件密码
     */
    function smtp($smtp_host, $smtp_port = 25, $auth = TRUE, $user = '', $pass = '') {
        $this->debug     = FALSE;
        $this->smtp_port = trim ( $smtp_port );
        $this->smtp_host = trim ( $smtp_host );
        $this->time_out  = 30; // is used in fsockopen()
        $this->auth      = trim ( $auth ); // auth
        $this->user      = trim ( $user );
        $this->pass      = trim ( $pass );
        $this->host_name = "localhost"; // is used in HELO command
        $this->log_file  = '';
        $this->sock      = FALSE;
    }
 
    /**
     * 发送邮件主方法
     * @param  string $to                 收件人
     * @param  string $mail_from          发件人
     * @param  string $subject            主题
     * @param  string $body               内容
     * @param  string $mailtype           邮件类型(HTML/TXT)
     * @param  string $cc                 抄送
     * @param  string $bcc                密送
     * @param  string $additional_headers 额外头信息
     * @return boolean                    成功或者失败
     */
    function sendmail($to, $mail_from, $subject = '', $body = '', $mailtype = "HTML", $cc = '', $bcc = '', $additional_headers = '') {
        $to           = trim ( $to );
        $stringEncode = mb_detect_encoding($body, array('UTF-8','GBK','ASCII','GB2312')); 
        $subject      = iconv($stringEncode,'UTF-8',$subject);
        $body         = iconv($stringEncode,'UTF-8',$body);
        $body         = preg_replace ( "/(^|(\r\n))(\.)/", "\\1.\\3", base64_encode($body));
        $header       = "MIME-Version:1.0\r\n";
        if (strtoupper ( $mailtype ) == "HTML") {
            $header .= "Content-Type:text/html;charset=utf-8\r\n";
        }
        $header .= "Content-Transfer-Encoding: base64\n";
        $header .= "To: " . $to . "\r\n";
        if ($cc != '') {
            $header .= "Cc: " . $cc . "\r\n";
        }
        $header .= "From: " . $this->get_mailfrom ( $this->user, $mail_from ) . "\r\n";
        $header .= "Subject: " . $subject . "\r\n";
        $header .= $additional_headers;
        $header .= "Date: " . date ( "r" ) . "\r\n";
        $header .= "X-Mailer:By Apache (PHP/" . phpversion() . ")\r\n";
        list ( $msec, $sec ) = explode ( ' ', microtime() );
        $header .= "Message-ID: <" . date ( 'YmdHis', $sec ) . "." . ($msec * 1000000) . "." . substr ( $mail_from, strpos ( $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, $this->user, $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;
    }
 
    /**
     * 发送邮件
     * @access public
     */
    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->smtp_host == '') {
            return $this->smtp_sockopen_mx ( $address );
        } else {
            return $this->smtp_sockopen_relay ();
        }
    }
 
    function smtp_sockopen_relay() {
        $this->log_write ( "Trying to " . $this->smtp_host . ":" . $this->smtp_port . "\n" );
        $this->sock = @fsockopen ( $this->smtp_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->smtp_host . "\n" );
            $this->log_write ( "Error: " . $errstr . " (" . $errno . ")\n" );
            return FALSE;
        }
        $this->log_write ( "Connected to relay host " . $this->smtp_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 (! 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) {
        return trim ( preg_replace ( "/(.*[<])?([^<>]+)[>]?/i", "$2", $address ) );
    }
 
    function get_mailfrom($address,$mail_from) {
        return $mail_from . "<{$address}>";
    }
 
    function smtp_debug($message) {
        if ($this->debug) {
            return $message;
        }
    }
}//CLASS SMTP END-----
?>



资源下载链接为: https://pan.quark.cn/s/abbae039bf2a 无锡平芯微半导体科技有限公司生产的A1SHB三极管(全称PW2301A)是一款P沟道增强型MOSFET,具备低内阻、高重复雪崩耐受能力以及高效电源切换设计等优势。其技术规格如下:最大漏源电压(VDS)为-20V,最大连续漏极电流(ID)为-3A,可在此条件下稳定工作;栅源电压(VGS)最大值为±12V,能承受正反向电压;脉冲漏极电流(IDM)可达-10A,适合处理短暂高电流脉冲;最大功率耗散(PD)为1W,可防止器件过热。A1SHB采用3引脚SOT23-3封装,小型化设计利于空间受限的应用场景。热特性方面,结到环境的热阻(RθJA)为125℃/W,即每增加1W功率损耗,结温上升125℃,提示设计电路时需考虑散热。 A1SHB的电气性能出色,开关特性优异。开关测试电路及波形图(图1、图2)展示了不同条件下的开关性能,包括开关上升时间(tr)、下降时间(tf)、开启时间(ton)和关闭时间(toff),这些参数对评估MOSFET在高频开关应用中的效率至关重要。图4呈现了漏极电流(ID)与漏源电压(VDS)的关系,图5描绘了输出特性曲线,反映不同栅源电压下漏极电流的变化。图6至图10进一步揭示性能特征:转移特性(图7)显示栅极电压(Vgs)对漏极电流的影响;漏源开态电阻(RDS(ON))随Vgs变化的曲线(图8、图9)展现不同控制电压下的阻抗;图10可能涉及电容特性,对开关操作的响应速度和稳定性有重要影响。 A1SHB三极管(PW2301A)是高性能P沟道MOSFET,适用于低内阻、高效率电源切换及其他多种应用。用户在设计电路时,需充分考虑其电气参数、封装尺寸及热管理,以确保器件的可靠性和长期稳定性。无锡平芯微半导体科技有限公司提供的技术支持和代理商服务,可为用户在产品选型和应用过程中提供有
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值