首页 > 编程语言 >phpcms发送邮件

phpcms发送邮件

时间:2024-05-08 11:25:46浏览次数:25  
标签:fp fputs cfg 发送 phpcms lastmessage mail port 邮件

 

pc_base::load_sys_func('mail');
sendmail($email, '您好,点击链接注册账号', '注册账号请点击链接:' . "<a href=" . $addr . ">" . $addr . "</a>");

 

 会得到一个授权码(很重要)

 

 

下面代码,就是一个普通的类

/**
 * 发送邮件
 * @param $toemail 收件人email
 * @param $subject 邮件主题
 * @param $message 正文
 * @param $from 发件人
 * @param $cfg 邮件配置信息
 * @param $sitename 邮件站点名称
 */

function sendmail($toemail, $subject, $message, $from='',$cfg = array(), $sitename='') {
    if($sitename=='') {
        $siteid = get_siteid();
        $siteinfo = siteinfo($siteid);
        $sitename = $siteinfo['site_title'];
    }
    
    if($cfg && is_array($cfg)) {
        $from = $cfg['from'];
        $mail = $cfg;
        $mail_type = $cfg['mail_type']; //邮件发送模式
    } else {
        $cfg = getcache('common','commons');
        $from = $cfg['mail_from'];
        $mail_type = $cfg['mail_type']; //邮件发送模式
        if($cfg['mail_user']=='' || $cfg['mail_password'] ==''){
            return false;
        }
        $mail= Array (
            'mailsend' => 2,
            'maildelimiter' => 1,
            'mailusername' => 1,
            'server' => $cfg['mail_server'],
            'port' => $cfg['mail_port'],
            'auth' => $cfg['mail_auth'],
            'from' => $cfg['mail_from'],
            'auth_username' => $cfg['mail_user'],
            'auth_password' => $cfg['mail_password']
        );        
    }
    //mail 发送模式
    if($mail_type==0) {
        $headers  = 'MIME-Version: 1.0' . "\r\n";
        $headers .= 'Content-type: text/html; charset='.CHARSET.'' . "\r\n";
        $headers .= 'From: '.$sitename.' <'.$from.'>' . "\r\n";
        mail($toemail, $subject, $message, $headers);
        return true;
    }
    //邮件头的分隔符
    $maildelimiter = $mail['maildelimiter'] == 1 ? "\r\n" : ($mail['maildelimiter'] == 2 ? "\r" : "\n");
    //收件人地址中包含用户名
    $mailusername = isset($mail['mailusername']) ? $mail['mailusername'] : 1;
    //端口
    $mail['port'] = $mail['port'] ? $mail['port'] : 25;
    $mail['mailsend'] = $mail['mailsend'] ? $mail['mailsend'] : 1;
    
    //发信者
    $email_from = $from == '' ? '=?'.CHARSET.'?B?'.base64_encode($sitename)."?= <".$from.">" : (preg_match('/^(.+?) \<(.+?)\>$/',$from, $mats) ? '=?'.CHARSET.'?B?'.base64_encode($mats[1])."?= <$mats[2]>" : $from);
    
    $email_to = preg_match('/^(.+?) \<(.+?)\>$/',$toemail, $mats) ? ($mailusername ? '=?'.CHARSET.'?B?'.base64_encode($mats[1])."?= <$mats[2]>" : $mats[2]) : $toemail;;
    
    $email_subject = '=?'.CHARSET.'?B?'.base64_encode(preg_replace("/[\r|\n]/", '', '['.$sitename.'] '.$subject)).'?=';
    $email_message = chunk_split(base64_encode(str_replace("\n", "\r\n", str_replace("\r", "\n", str_replace("\r\n", "\n", str_replace("\n\r", "\r", $message))))));
    
    $headers = "From: $email_from{$maildelimiter}X-Priority: 3{$maildelimiter}X-Mailer: PHPCMS-V9 {$maildelimiter}MIME-Version: 1.0{$maildelimiter}Content-type: text/html; charset=".CHARSET."{$maildelimiter}Content-Transfer-Encoding: base64{$maildelimiter}";
        
    if(!$fp = fsockopen($mail['server'], $mail['port'], $errno, $errstr, 30)) {
        runlog('SMTP', "($mail[server]:$mail[port]) CONNECT - Unable to connect to the SMTP server", 0);
        return false;
    }
    stream_set_blocking($fp, true);

    $lastmessage = fgets($fp, 512);
    if(substr($lastmessage, 0, 3) != '220') {
        runlog('SMTP', "$mail[server]:$mail[port] CONNECT - $lastmessage", 0);
        return false;
    }

    fputs($fp, ($mail['auth'] ? 'EHLO' : 'HELO')." phpcms\r\n");
    $lastmessage = fgets($fp, 512);
    if(substr($lastmessage, 0, 3) != 220 && substr($lastmessage, 0, 3) != 250) {
        runlog('SMTP', "($mail[server]:$mail[port]) HELO/EHLO - $lastmessage", 0);
        return false;
    }

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

    if($mail['auth']) {
        fputs($fp, "AUTH LOGIN\r\n");
        $lastmessage = fgets($fp, 512);
        if(substr($lastmessage, 0, 3) != 334) {
            runlog('SMTP', "($mail[server]:$mail[port]) AUTH LOGIN - $lastmessage", 0);
            return false;
        }

        fputs($fp, base64_encode($mail['auth_username'])."\r\n");
        $lastmessage = fgets($fp, 512);
        if(substr($lastmessage, 0, 3) != 334) {
            runlog('SMTP', "($mail[server]:$mail[port]) USERNAME - $lastmessage", 0);
            return false;
        }

        fputs($fp, base64_encode($mail['auth_password'])."\r\n");
        $lastmessage = fgets($fp, 512);
        if(substr($lastmessage, 0, 3) != 235) {
            runlog('SMTP', "($mail[server]:$mail[port]) PASSWORD - $lastmessage", 0);
            return false;
        }

        $email_from = $mail['from'];
    }

    fputs($fp, "MAIL FROM: <".preg_replace("/.*\<(.+?)\>.*/", "\\1", $email_from).">\r\n");
    $lastmessage = fgets($fp, 512);
    if(substr($lastmessage, 0, 3) != 250) {
        fputs($fp, "MAIL FROM: <".preg_replace("/.*\<(.+?)\>.*/", "\\1", $email_from).">\r\n");
        $lastmessage = fgets($fp, 512);
        if(substr($lastmessage, 0, 3) != 250) {
            runlog('SMTP', "($mail[server]:$mail[port]) MAIL FROM - $lastmessage", 0);
            return false;
        }
    }

    fputs($fp, "RCPT TO: <".preg_replace("/.*\<(.+?)\>.*/", "\\1", $toemail).">\r\n");
    $lastmessage = fgets($fp, 512);
    if(substr($lastmessage, 0, 3) != 250) {
        fputs($fp, "RCPT TO: <".preg_replace("/.*\<(.+?)\>.*/", "\\1", $toemail).">\r\n");
        $lastmessage = fgets($fp, 512);
        runlog('SMTP', "($mail[server]:$mail[port]) RCPT TO - $lastmessage", 0);
        return false;
    }

    fputs($fp, "DATA\r\n");
    $lastmessage = fgets($fp, 512);
    if(substr($lastmessage, 0, 3) != 354) {
        runlog('SMTP', "($mail[server]:$mail[port]) DATA - $lastmessage", 0);
        return false;
    }

    $headers .= 'Message-ID: <'.gmdate('YmdHs').'.'.substr(md5($email_message.microtime()), 0, 6).rand(100000, 999999).'@'.$_SERVER['HTTP_HOST'].">{$maildelimiter}";

    fputs($fp, "Date: ".gmdate('r')."\r\n");
    fputs($fp, "To: ".$email_to."\r\n");
    fputs($fp, "Subject: ".$email_subject."\r\n");
    fputs($fp, $headers."\r\n");
    fputs($fp, "\r\n\r\n");
    fputs($fp, "$email_message\r\n.\r\n");
    $lastmessage = fgets($fp, 512);
    if(substr($lastmessage, 0, 3) != 250) {
        runlog('SMTP', "($mail[server]:$mail[port]) END - $lastmessage", 0);
    }
    fputs($fp, "QUIT\r\n");
    return true;
}

 

标签:fp,fputs,cfg,发送,phpcms,lastmessage,mail,port,邮件
From: https://www.cnblogs.com/qk1314/p/18179293

相关文章

  • 多语言 JDBC SQL 发送
    多语言JDBCSQL发送记录各个语言使用JDBC发送SQL的代码片段。Pythonimportjaydebeapi#pipinstalljaydebeapi#JDBC驱动类名driver='com.mysql.jdbc.Driver'#数据库连接URLurl='jdbc:mysql://hostname:port/databasename?characterEncoding=UTF-8&serverT......
  • Java发送HTTP GET/POST请求
    一、Java11HttpClient在Java11的java.net.http.*包中,有一个HttpClient类可以完成HTTP请求。Java11HttpClientExample.javapackagecom.lyl.http;importjava.net.URI;importjava.net.URLEncoder;importjava.net.http.HttpClient;importjava.net.http.HttpRequest;im......
  • 21.Prometheus告警之Alertmanager告警(一)-邮件钉钉微信
    一、Prometheus告警简介   告警能⼒在Prometheus的架构中被划分成两个独⽴的部分。如下所示,通过在Prometheus中定义AlertRule(告警规则),Prometheus会周期性的对告警规则进⾏计算,如果满⾜告警触发条件就会向Alertmanager发送告警信息 Alertmanager作为⼀个独⽴的组件,负责接......
  • 开源电子邮件营销平台 listmonk 使用教程
    做产品肯定要做电子邮件营销,特别是面向海外的产品,电子邮件营销已成为企业与客户沟通、建立品牌忠诚度和推动销售的重要工具,可以直接接触到目标受众,提供个性化内容,并以相对较低的成本获得可观的投资回报。你看,MEAP又来提醒我买电子书了!做电子邮件营销首先需要考虑的是选哪个电子......
  • SMTP发送邮箱(默认用QQ 邮箱发送)
    1.源码`//////SMTP发送邮箱(默认用QQ邮箱发送)//////收件人邮箱///邮件主题///邮件正文///host----->QQ的为smtp.qq.com///port----->QQ的为587///是否添加附件///添加附件路径///是否抄送///抄送地址即抄送多个邮箱*/publicvoidSen......
  • A2P,即Application-to-Person,是一种将信息或服务通过应用程序(如短信)发送给用户的过程
    A2P,即Application-to-Person,是一种将信息或服务通过应用程序(如短信)发送给用户的过程。它广泛应用于各种场景,特别是在市场营销和客户服务领域,因其能够直接接触到用户并提供丰富的交互方式而备受青睐。在A2P的应用中,短信服务扮演着至关重要的角色。例如,在业务触发向个人发送短信的......
  • 1.验整码的发送与检验
    通过restTemplate.exchage()来发送验证码,需要4个参数,url,请求方式,请求内容,需要相应类型)响应的结果为map结合,我们需要取出key值,用俩次map取值可以取出key检验验证需要输入验证码和keyrestTeMPLATE.exhcange(url,....);//发送请求获得验证码请求内容为空判断是否一样mapstrac......
  • 还在为邮件大附件发送困扰?企业邮件大文件解决方案来了!
    邮箱是企业最基础也是最常用的信息传递和业务往来方式,一般而言,对于文字及图片的业务沟通,邮箱完全可以胜任,但当涉及附件,特别是超大的附件,如影视频资料、大的工程文件、应用程序等,此时,邮件的大文件就会是很大的困扰。通常来说,企业解决邮件大文件的方式一般如下:分批发送:如果文件不......
  • 常见攻击事件分析--钓鱼邮件
    简介请勿在本机运行恶意文件样本请勿在本机运行恶意文件样本请勿在本机运行恶意文件样本小张的公司最近遭到了钓鱼邮件攻击,多名员工的终端被控制做为跳板攻击了内网系统,请对钓鱼邮件样本和内网被攻陷的系统进行溯源分析,请根据小张备份的数据样本分析请勿在本机运行恶意文件......
  • 5分钟教你搭建邮件服务器的实用指南
    今天我写了一篇实用的文章,重点是教你如何免费搭建一个邮件服务器,这个服务器不仅可以用于发送邮件,还可以供我的待办机器人使用。一开始我试图找一些免费的API接口来实现这个功能,但遗憾的是,并没有找到合适的。对于程序员来说,能自己动手实现绝对是最好的选择,幸运的是,我有一台空闲的......