Esempio n. 1
0
 protected function _sendMail()
 {
     $request = new Am_HttpRequest(self::API_ENDPOINT, Am_HttpRequest::METHOD_POST);
     $params = array();
     $params['api_user'] = $this->_api_user;
     $params['api_key'] = $this->_api_key;
     $part = new Zend_Mail_Part(array('raw' => $this->header . Zend_Mime::LINEEND . $this->body));
     $this->_extractHeaderToParams($part, 'to', $params);
     $this->_extractHeaderToParams($part, 'cc', $params);
     $this->_extractHeaderToParams($part, 'bcc', $params);
     $this->_extractHeaderToParams($part, 'from', $params, false);
     $this->_extractHeaderToParams($part, 'reply-to', $params, false);
     $subject = $part->getHeader('subject');
     if (strpos($subject, '=?') === 0) {
         $subject = mb_decode_mimeheader($subject);
     }
     $params['subject'] = $subject;
     $canHasAttacments = false;
     //message
     list($type) = explode(";", $part->getHeader('content-type'));
     if ($type == 'multipart/alternative') {
         $msgPart = $part->getPart(2);
     } else {
         $msgPart = $part->isMultipart() ? $part->getPart(1) : $part;
         if ($msgPart->isMultipart()) {
             $msgPart = $msgPart->getPart(2);
             //html part
         }
         $canHasAttacments = true;
     }
     list($type) = explode(";", $msgPart->getHeader('content-type'));
     $encoding = $msgPart->getHeader('content-transfer-encoding');
     $content = $msgPart->getContent();
     if ($encoding && $encoding == 'quoted-printable') {
         $content = quoted_printable_decode($content);
     } else {
         $content = base64_decode($content);
     }
     switch ($type) {
         case 'text/plain':
             $params['text'] = $content;
             break;
         case 'text/html':
             $params['html'] = $content;
             break;
         default:
             throw new Zend_Mail_Transport_Exception("SendGrid API: unknown content-type: " . $type);
     }
     //attachments
     $handlers = array();
     if ($canHasAttacments) {
         if ($part->isMultipart()) {
             $params['files'] = array();
             for ($i = 2; $i <= $part->countParts(); $i++) {
                 $attPart = $part->getPart($i);
                 $encoding = $attPart->getHeader('content-transfer-encoding');
                 $disposition = $attPart->getHeader('content-disposition');
                 preg_match('/filename="(.*)"/', $disposition, $m);
                 $filename = $m[1];
                 $content = $attPart->getContent();
                 if ($encoding && $encoding == 'quoted-printable') {
                     $content = quoted_printable_decode($content);
                 } else {
                     $content = base64_decode($content);
                 }
                 $f = tmpfile();
                 array_push($handlers, $f);
                 fwrite($f, $content);
                 $request->addUpload("files[{$filename}]", $f, $filename);
             }
         }
     }
     $request->addPostParameter($params);
     $response = $request->send();
     foreach ($handlers as $f) {
         fclose($f);
     }
     if ($response->getStatus() != 200) {
         throw new Zend_Mail_Transport_Exception("SendGrid API: unexpected response: " . $response->getBody());
     }
 }