PHP邮件附件

本文介绍了如何在PHP中实现发送带有附件的邮件,详细讲解了使用fopen函数处理二进制文件,并探讨了Base64编码的原理和应用场景,包括base64_encode函数的使用,以及Base64编码中字符索引和转换过程。
摘要由CSDN通过智能技术生成

 

文章转载自:http://www.cnblogs.com/luguo3000/p/3940197.html

一、邮件功能实现   

    项目中在任务完成时需要触发给用户发送带附件的邮件事件,这里发送邮件碰到了一个难题,如何把附件添加到附件中去?(附件格式:map类型 => key为带扩展名的附件名称,value为附件的二进制数组格式——转换为二进制字节流「也不知道是不是这样,反正邮件功能可用,可能是代码中对之前的格式进行了一些封装」)。

代码如下:

 

class Mail{

    const  API_URL = "http://xxxxx.xxxxxx.com/api/v1/mail";

    //mail 配置,勿动

    public static $mailConf = array(

        'templateCode'   => "XXXXXX-AUTO-TEST",

        'subject' =>'数据监控发现异常',

        'accessId' => "xxxxxxx",

        'accessToken' =>"15fe916cdf53428585951d91xxxxxxx",

        'templateParam' =>array(

            'content' =>'<body>',

        ),

    );

    /**

     * SendMail function

     * 发送邮件

     * @param [array] $arrUid 收件人列表

     * @param [string] $content 邮件正文内容

     * @param [string] $ccId 邮件抄送人,分号隔离多个用户

     * @param [string] $subject 邮件主题内容

     * @param [string] $attachments 附件

     * @param [date] $expectedTime 定时发送时间

     * @return bool

     */

    public static function sendMail($arrUid, $content, $subject=null, $attachments=null, $ccId=null, $expectedTime=null) {

 

        $arrMail = self::$mailConf;

        $arrMail['ccId'] = $ccId;

        foreach($arrUid as $key => $user) {

            $arrMail['userId'] = $user;

            $arrMail['subject'] = $subject ?? self::$mailConf['subject'];

            $arrMail['expectedTime'] = $expectedTime ?? date('Y-m-d H:i:s',time()); //没有设置定时发送时间,则立即发送,发送时间为当前时间

            if (!empty($attachments) && is_array($attachments)) {

                $arrMail['attachments'] = []; // 附件

                foreach ($attachments as $name => $path) {  // name表示附件名称,path表示附件路径

                    if(file_exists($path))

                    {

                        $string = fread(fopen($path,'rb'),filesize($path));

                        $arrMail['attachments'][$name] = base64_encode($string);

                        fclose($path);

                    }

//                        throw new \Exception("文件%s不存在", $path);

                }

            }

            $arrMail['templateParam']['content'] .= $content.'</body>';

            $arrRes = self::CurlPost(self::API_URL, json_encode($arrMail), true);

            if(!$arrRes){

                Log::warning('Send Mail failed ! maybe network is error!\n');

                return false;

            }

            $arrRes = json_decode($arrRes, true);

            if($arrRes['success'] != 'true' ) {

                Log::warning('Send Mail failed ! please check config!\n');

                return false;

            }

        }

        return true;

    }

    /**

     *  @function 封装好的post请求类,可以直接调用,如果后期文件比较大,可以考虑单独写个文件

     *  @param    $url 请求的URL, $file_data 上传的文件/数据

     *  @return   执行结果,空为false

     */

    public static function CurlPost($url, $file_data, $json = false) {

        $ch = curl_init();

        $timeout = 10;

        curl_setopt($ch, CURLOPT_URL, $url);

        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

        //curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);

        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);

        curl_setopt($ch, CURLOPT_AUTOREFERER, 1);

        curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);

        //curl_setopt($ch, CURLOPT_COOKIE, self::$cookie);

        curl_setopt($ch, CURLOPT_POST, 1);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值