写了个socket方式发送邮件的类

在网上搜了好多都不能用,干脆俺自己写。调用非常简单,不过目前功能也不多,不支持html格式和附件:

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 ' =   ' < ' . $_SERVER [ ' SERVER_ADMIN ' ] . ' > ' ;
        }
    }
    
    
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: < " . preg_replace ( " /.*<(.+?)>.*/ " ,   " /1 " ,   $this -> 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: <$to_user> " );
                
$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 '   =>   '  <injection.mail@gmail.com> ' ,              # 邮件来源
);


   
##########################################################################    
   
$mailcfg [ ' server ' =   ' smtp.gmail.com ' ;             # smtp服务器地址    
     $mailcfg [ ' port ' =   ' 25 ' ;                             # smtp端口
     $mailcfg [ ' auth ' =   1 ;                                 # 显示作者
     $mailcfg [ ' from ' =   ' gmail <injection.mail@gmail.com> ' ;     # 发件人地址
     $mailcfg [ ' auth_username ' =   ' injection_at@hotmail.com ' ;     # 发件人邮箱
     $mailcfg [ ' auth_password ' =   ' 12345677 ' ;                 # 发件人邮箱密码

#调用:

$sm   =   new  sendMail(  $mailcfg  );
$sm -> setEmailInfo(  $emails  );
$sm -> sendMails();
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值