zoukankan      html  css  js  c++  java
  • 禅道发送邮件附件

    禅道发送邮件功能非常方便。但是目前不支持邮件发送附件的功能。

    有人求求助此功能时

    春哥回答“现在没有这个功能。暂时也没有计划增加,应该还是到系统中查看详细的内容。”

    http://www.zentao.net/thread/82828.html

    查看了一下php发邮件。

    发现实现发附件很简单。只需加一句话。

    禅道调用mail->send()函数发送邮件。

    我们把mail->send()拷贝一份重新写个函数吧。其实只加了一句话。

        /**
         * Send Email With Mail Attachment
         *
         * @param  array   $toList
         * @param  string  $subject
         * @param  string  $body
         * @param  array   $ccList
         * @param  bool    $includeMe
         * @param  string  $attachmentPath
         * @param  string  $attachmentName
         * @access public
         * @return void
         */
        public function sendMailWithAttachment($toList, $subject, $body = '', $ccList = '', $includeMe = false, $attachmentPath = '', $attachmentName = '')
        {
            if(!$this->config->mail->turnon) return;
            if(!empty($this->config->mail->async)) return $this->addQueue($toList, $subject, $body, $ccList, $includeMe);
        
            ob_start();
            $toList  = $toList ? explode(',', str_replace(' ', '', $toList)) : array();
            $ccList  = $ccList ? explode(',', str_replace(' ', '', $ccList)) : array();
        
            /* Process toList and ccList, remove current user from them. If toList is empty, use the first cc as to. */
            if($includeMe == false)
            {
                $account = isset($this->app->user->account) ? $this->app->user->account : '';
        
                foreach($toList as $key => $to) if(trim($to) == $account or !trim($to)) unset($toList[$key]);
                foreach($ccList as $key => $cc) if(trim($cc) == $account or !trim($cc)) unset($ccList[$key]);
            }
        
            /* Remove deleted users. */
            $users = $this->loadModel('user')->getPairs('nodeleted');
            foreach($toList as $key => $to) if(!isset($users[trim($to)])) unset($toList[$key]);
            foreach($ccList as $key => $cc) if(!isset($users[trim($cc)])) unset($ccList[$key]);
        
            if(!$toList and !$ccList) return;
            if(!$toList and $ccList) $toList = array(array_shift($ccList));
            $toList = join(',', $toList);
            $ccList = join(',', $ccList);
        
            /* Get realname and email of users. */
            $this->loadModel('user');
            $emails = $this->user->getRealNameAndEmails(str_replace(' ', '', $toList . ',' . $ccList));
        
            $this->clear();
        
            /* Replace full webPath image for mail. */
            if(strpos($body, 'src="data/upload')) $body = preg_replace('/<img (.*)src="data/upload/', '<img $1 src="http://' . $this->server->http_host . $this->config->webRoot . 'data/upload', $body);
        
            try
            {
                $this->mta->setFrom($this->config->mail->fromAddress, $this->convertCharset($this->config->mail->fromName));
                $this->setSubject($this->convertCharset($subject));
                $this->setTO($toList, $emails);
                $this->setCC($ccList, $emails);
                $this->setBody($this->convertCharset($body));
                if(!empty($attachmentPath) && !empty($attachmentName)) $this->mta->AddAttachment($attachmentPath,$attachmentName);
                $this->setErrorLang();
                $this->mta->send();
            }
            catch (phpmailerException $e)
            {
                $this->errors[] = nl2br(trim(strip_tags($e->errorMessage()))) . '<br />' . ob_get_contents();
            }
            catch (Exception $e)
            {
                $this->errors[] = trim(strip_tags($e->getMessage()));
            }
            if($this->config->mail->mta == 'smtp') $this->mta->smtpClose();
        
            /* save errors. */
            if($this->isError()) $this->app->saveError('E_MAIL', join(' ', $this->errors), __FILE__, __LINE__, true);
        
            $message = ob_get_contents();
            ob_clean();
        
            return $message;
        }

    比原来的函数就多了两个参数,一句话

    attachmentPath 附件的完整路径(包括文件路径文件名)
    attachmentName 添加到邮件后邮件内显示附件的名字(也就是相当于重命名了文件,无路径)
    if(!empty($attachmentPath) && !empty($attachmentName)) $this->mta->AddAttachment($attachmentPath,$attachmentName);


    代码拷来总觉浅,绝知此事要躬行
  • 相关阅读:
    网页的状态掩码
    分享到JavaScript
    右下角收缩广告
    播放列表的收缩展开
    创建文本节点createTextNode
    创建元素节点createElement
    进栈和出栈
    刚刚上班才回来,今天和你说说hash数组
    关于JS中的定时器!!!
    面向对象(程序员最呆的地方,一切皆是对象)
  • 原文地址:https://www.cnblogs.com/yinxiaoqiexuxing/p/5784522.html
Copyright © 2011-2022 走看看