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

本文介绍了一个简单的自定义PHP邮件发送类实现,包括设置邮件信息的方法及发送邮件的功能。该类支持设置收件人、邮件主题、内容及来源等基本功能,并通过SMTP服务器发送邮件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

class MailCls{
    
private $mEmails;
    
    
function setEmailInfo( $emails ){
        
ifis_array$emails ) ){
            
$this->mEmails['email_to'= $emails['email_to'];
            
#对邮件标题进行处理
            ifisset$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'];
            }
            
            
#对邮件内容进行处理
            ifisset$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'];
            }
            
            
#对邮件来源进行处理
            ifisset($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  ){
        
ifisset$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();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值