首页 > php教程 > PHP源码 > 正文

socket方式发送邮件的类

PHP中文网
发布: 2016-05-25 17:15:26
原创
1434人浏览过

class MailCls{
    private $mEmails;
    
    function setEmailInfo( $emails ){
        if( is_array( $emails ) ){
            $this->mEmails['email_to'] = $emails['email_to'];
            #对邮件标题进行处理
            if( isset( $emails['email_subject'] ) || !empty($emails['email_subject'])) {
                eval("$email_subject = "".$emails['email_subject']."";");
                $email_subject = str_replace(" ", '', str_replace(" ", '', $emails['email_subject'] ));
                $this->mEmails['email_subject'] = $emails['email_subject'];
            }
            
            #对邮件内容进行处理
            if( isset( $emails['email_message']) || !empty($emails['email_message'])) {
                eval("$email_message = "".$emails['email_message']."";");
                $emails['email_message'] = str_replace(" .", "  ..", str_replace(" ", " ", str_replace(" ", " ", str_replace(" ", " ", str_replace(" ", " ", $emails['email_message'])))));
                $this->mEmails['email_message'] = $emails['email_message'];
            }
            
            #对邮件来源进行处理
            if( isset($emails['email_from']) || !empty($emails['email_from']))
                $this->mEmails['email_from'] = $emails['email_from'];
            else
                $this->mEmails['email_from'] = '';
        }
    }
    
    function getEmails( $elements  ){
        if( isset( $elements ) || !empty( $elements ))
            return $this->mEmails[$elements];
        else
        return $this->mEmails;
    }
    
    function __destruct(){
        unset( $this );
    }
}


class sendMail extends MailCls{
    private $mMailCfg;
    
    function __construct( $mailcfg ){
        if(is_array( $mailcfg ))
            $this->mMailCfg = $mailcfg;
    }
    
    #发送邮件函数
    function sendMails( ){
        if(!$fp = fsockopen($this->mMailCfg['server'], $this->mMailCfg['port'], $errno, $errstr, 30)) {
                errorlog('SMTP', "($this->mMailCfg[server]:$this->mMailCfg[port]) CONNECT - Unable to connect to the SMTP server, please check your "mail_config.php".", 0);
            }
         stream_set_blocking($fp, true);

        $lastmessage = fgets($fp, 512);
        if(substr($lastmessage, 0, 3) != '220') {
            errorlog('SMTP', "$this->mMailCfg[server]:$this->mMailCfg[port] CONNECT - $lastmessage", 0);
        }

        fputs($fp, ($this->mMailCfg['auth'] ? 'EHLO' : 'HELO')." hoodong ");
        $lastmessage = fgets($fp, 512);
        
        if(substr($lastmessage, 0, 3) != 220 && substr($lastmessage, 0, 3) != 250) {
            errorlog('SMTP', "($this->mMailCfg[server]:$this->mMailCfg[port]) HELO/EHLO - $lastmessage", 0);
        }

        while(1) {
            $lastmessage = fgets($fp, 512);
            if(substr($lastmessage, 3, 1) != '-' || empty($lastmessage)) {
                 break;
             }
        } 

        if($this->mMailCfg['auth']) {
            fputs($fp, "AUTH LOGIN ");
            $lastmessage = fgets($fp, 512);
            
            if(substr($lastmessage, 0, 3) != 334) {
                errorlog('SMTP', "($this->mMailCfg[server]:$this->mMailCfg[port]) AUTH LOGIN - $lastmessage", 0);
        }

        fputs($fp, base64_encode($this->mMailCfg['auth_username'])." ");
        $lastmessage = fgets($fp, 512);
        
        if(substr($lastmessage, 0, 3) != 334) {
            errorlog('SMTP', "($this->mMailCfg[server]:$this->mMailCfg[port]) USERNAME - $lastmessage", 0);
        }

        fputs($fp, base64_encode($this->mMailCfg['auth_password'])." ");
        $lastmessage = fgets($fp, 512);
        
        if(substr($lastmessage, 0, 3) != 235) {
            errorlog('SMTP', "($this->mMailCfg[server]:$this->mMailCfg[port]) PASSWORD - $lastmessage", 0);
        }

        $email_from = $this->mMailCfg['from'];
    }

    fputs($fp, "MAIL FROM: ".preg_replace("/.*.*/", "\1", $this->getEmails('email_from'))." ");
    $lastmessage = fgets($fp, 512);
    
    if(substr($lastmessage, 0, 3) != 250) {
        fputs($fp, "MAIL FROM: getEmails('email_from'))."> ");
        $lastmessage = fgets($fp, 512);
        if(substr($lastmessage, 0, 3) != 250) {
            errorlog('SMTP', "($this->mMailCfg[server]:$this->mMailCfg[port]) MAIL FROM - $lastmessage", 0);
        }
    }

    foreach(explode(',', $this->getEmails('email_to')) as $to_user) {
        $to_user = trim( $to_user );
        if( $to_user ) {
            fputs( $fp, "RCPT TO: $to_user " );
            $lastmessage = fgets( $fp, 512 );
            if(substr($lastmessage, 0, 3) != 250) {
                fputs($fp, "RCPT TO:  ");
                $lastmessage = fgets($fp, 512);
                errorlog('SMTP', "($this->mMailCfg[server]:$this->mMailCfg[port]) RCPT TO - $lastmessage", 0);
            }
        }
    }

    fputs($fp, "DATA ");
    $lastmessage = fgets($fp, 512);
    if(substr($lastmessage, 0, 3) != 354) {
        errorlog('SMTP', "($this->mMailCfg[server]:$this->mMailCfg[port]) DATA - $lastmessage", 0);
    }

     fputs($fp, "To: ".$this->getEmails('email_to')." From: ".$this->getEmails('email_from')." Subject: ".str_replace(" ", ' ', $this->getEmails('email_subject'))." ".$this->getEmails('email_message')." . "); 
    fputs($fp, "QUIT ");
    }
    
    function getEmailCfg( $elements ){
        if(isset( $elements ) || !empty( $elements ))
            return $this->mMailCfg[$elements];
        else 
            return $this->mMailCfg;
    }
    
    function __destruct(){
        unset($fp);
        unset($this);
    }
}


/*@调用演示.请设置下面信息@*/
#######################################################################

$emails = array(
'email_to' => 'injection.mail@gmail.com',                        #收件人地址
'email_subject' => 'test',                                #邮件标题
'email_message' => 'ksadasdasdasdsadasfafdasfdsaff',    #邮件正文
'email_from' => '',            #邮件来源
);


    
##########################################################################    
   
$mailcfg['server'] = 'smtp.gmail.com';            #smtp服务器地址    
    $mailcfg['port'] = '25';                            #smtp端口
    $mailcfg['auth'] = 1;                                #显示作者
    $mailcfg['from'] = 'gmail';    #发件人地址
    $mailcfg['auth_username'] = 'injection_at@hotmail.com';    #发件人邮箱
    $mailcfg['auth_password'] = '12345677';                #发件人邮箱密码
#调用:
$sm = new sendMail( $mailcfg );
$sm->setEmailInfo( $emails );
$sm->sendMails();
登录后复制

                   

现代化家居响应式网站模板1.0
现代化家居响应式网站模板1.0

现代化家居响应式网站模板源码是以cmseasy进行开发的家居网站模板。该软件可免费使用,模板附带测试数据!模板源码特点:整体采用浅色宽屏设计,简洁大气,电脑手机自适应布局,大方美观,功能齐全,值得推荐的一款模板,每个页面精心设计,美观大方,兼容各大浏览器;所有代码经过SEO优化,使网站更利于搜索引擎排名,是您做环保类网站的明确选择。无论是在电脑、平板、手机上都可以访问到排版合适的网站,即便是微信等

现代化家居响应式网站模板1.0 0
查看详情 现代化家居响应式网站模板1.0

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
最新问题
热门推荐
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号