예제 #1
0
파일: Mail.php 프로젝트: josephsnyder/Midas
 /**
  * Send the mail.
  *
  * @param Midas_Mail $mail mail instance
  * @throws Midas_Service_SendGrid_Exception
  */
 public function sendMail(Midas_Mail $mail)
 {
     if (is_null($this->_client)) {
         $this->_client = new \SendGrid($this->_user, $this->_key, $this->_config);
     }
     $email = new \SendGrid\Email();
     $email->setBccs($mail->getBcc());
     $email->setCcs($mail->getCc());
     $email->setHtml($mail->getBodyHtml(true));
     $email->setFrom($mail->getFrom());
     $email->setReplyTo($mail->getReplyTo());
     $email->setSubject($mail->getSubject());
     $email->setText($mail->getBodyText(true));
     $email->setTos($mail->getTo());
     try {
         $this->_client->send($email);
     } catch (\SendGrid\Exception $exception) {
         throw new Midas_Service_SendGrid_Exception('Could not send mail');
     }
 }
예제 #2
0
 public function testSetTos()
 {
     $email = new \SendGrid\Email();
     $email->setTos(['*****@*****.**', '*****@*****.**']);
     $this->assertEquals(['*****@*****.**', '*****@*****.**'], $email->to);
 }
 /**
  * Send mail, similar to PHP's mail
  *
  * A true return value does not automatically mean that the user received the
  * email successfully. It just only means that the method used was able to
  * process the request without any errors.
  *
  * Using the two 'wp_mail_from' and 'wp_mail_from_name' hooks allow from
  * creating a from address like 'Name <*****@*****.**>' when both are set. If
  * just 'wp_mail_from' is set, then just the email address will be used with no
  * name.
  *
  * The default content type is 'text/plain' which does not allow using HTML.
  * However, you can set the content type of the email by using the
  * 'wp_mail_content_type' filter.
  *
  * The default charset is based on the charset used on the blog. The charset can
  * be set using the 'wp_mail_charset' filter.
  *
  * @since 1.2.1
  * @uses apply_filters() Calls 'wp_mail' hook on an array of all of the parameters.
  * @uses apply_filters() Calls 'wp_mail_from' hook to get the from email address.
  * @uses apply_filters() Calls 'wp_mail_from_name' hook to get the from address name.
  * @uses apply_filters() Calls 'wp_mail_content_type' hook to get the email content type.
  * @uses apply_filters() Calls 'wp_mail_charset' hook to get the email charset
  *
  * @param   string|array  $to           Array or comma-separated list of email addresses to send message.
  * @param   string        $subject      Email subject
  * @param   string        $message      Message contents
  * @param   string|array  $headers      Optional. Additional headers.
  * @param   string|array  $attachments  Optional. Files to attach.
  * @return  bool                        Whether the email contents were sent successfully.
  */
 function wp_mail($to, $subject, $message, $headers = '', $attachments = array())
 {
     if (in_array('curl', get_loaded_extensions())) {
         if (!Sendgrid_Tools::get_api_key()) {
             $sendgrid = new SendGrid(Sendgrid_Tools::get_username(), Sendgrid_Tools::get_password());
         } else {
             $sendgrid = new SendGrid(Sendgrid_Tools::get_api_key());
         }
     } else {
         if (!Sendgrid_Tools::get_api_key()) {
             $sendgrid = new SendGridwp(Sendgrid_Tools::get_username(), Sendgrid_Tools::get_password());
         } else {
             $sendgrid = new SendGridwp(Sendgrid_Tools::get_api_key());
         }
     }
     $mail = new SendGrid\Email();
     $method = Sendgrid_Tools::get_send_method();
     // Compact the input, apply the filters, and extract them back out
     extract(apply_filters('wp_mail', compact('to', 'subject', 'message', 'headers', 'attachments')));
     // prepare attachments
     $attached_files = array();
     if (!empty($attachments)) {
         if (!is_array($attachments)) {
             $pos = strpos(',', $attachments);
             if (false !== $pos) {
                 $attachments = preg_split('/,\\s*/', $attachments);
             } else {
                 $attachments = explode("\n", str_replace("\r\n", "\n", $attachments));
             }
         }
         if (is_array($attachments)) {
             foreach ($attachments as $attachment) {
                 if (file_exists($attachment)) {
                     $attached_files[] = $attachment;
                 }
             }
         }
     }
     // Headers
     $cc = array();
     $bcc = array();
     $unique_args = array();
     if (empty($headers)) {
         $headers = array();
     } else {
         if (!is_array($headers)) {
             // Explode the headers out, so this function can take both
             // string headers and an array of headers.
             $tempheaders = explode("\n", str_replace("\r\n", "\n", $headers));
         } else {
             $tempheaders = $headers;
         }
         $headers = array();
         // If it's actually got contents
         if (!empty($tempheaders)) {
             // Iterate through the raw headers
             foreach ((array) $tempheaders as $header) {
                 if (false === strpos($header, ':')) {
                     if (false !== stripos($header, 'boundary=')) {
                         $parts = preg_split('/boundary=/i', trim($header));
                         $boundary = trim(str_replace(array("'", '"'), '', $parts[1]));
                     }
                     continue;
                 }
                 // Explode them out
                 list($name, $content) = explode(':', trim($header), 2);
                 // Cleanup crew
                 $name = trim($name);
                 $content = trim($content);
                 switch (strtolower($name)) {
                     // Mainly for legacy -- process a From: header if it's there
                     case 'from':
                         if (false !== strpos($content, '<')) {
                             // So... making my life hard again?
                             $from_name = substr($content, 0, strpos($content, '<') - 1);
                             $from_name = str_replace('"', '', $from_name);
                             $from_name = trim($from_name);
                             $from_email = substr($content, strpos($content, '<') + 1);
                             $from_email = str_replace('>', '', $from_email);
                             $from_email = trim($from_email);
                         } else {
                             $from_email = trim($content);
                         }
                         break;
                     case 'content-type':
                         if (false !== strpos($content, ';')) {
                             list($type, $charset) = explode(';', $content);
                             $content_type = trim($type);
                             if (false !== stripos($charset, 'charset=')) {
                                 $charset = trim(str_replace(array('charset=', '"'), '', $charset));
                             } elseif (false !== stripos($charset, 'boundary=')) {
                                 $boundary = trim(str_replace(array('BOUNDARY=', 'boundary=', '"'), '', $charset));
                                 $charset = '';
                             }
                         } else {
                             $content_type = trim($content);
                         }
                         break;
                     case 'cc':
                         $cc = array_merge((array) $cc, explode(',', $content));
                         foreach ($cc as $key => $recipient) {
                             $cc[$key] = trim($recipient);
                         }
                         break;
                     case 'bcc':
                         $bcc = array_merge((array) $bcc, explode(',', $content));
                         foreach ($bcc as $key => $recipient) {
                             $bcc[$key] = trim($recipient);
                         }
                         break;
                     case 'reply-to':
                         $replyto = $content;
                         break;
                     case 'unique-args':
                         if (false !== strpos($content, ';')) {
                             $unique_args = explode(';', $content);
                         } else {
                             $unique_args = (array) trim($content);
                         }
                         foreach ($unique_args as $unique_arg) {
                             if (false !== strpos($content, '=')) {
                                 list($key, $val) = explode('=', $unique_arg);
                                 $mail->addUniqueArg(trim($key), trim($val));
                             }
                         }
                         break;
                     default:
                         // Add it to our grand headers array
                         $headers[trim($name)] = trim($content);
                         break;
                 }
             }
         }
     }
     // From email and name
     // If we don't have a name from the input headers
     if (!isset($from_name)) {
         $from_name = Sendgrid_Tools::get_from_name();
     }
     /* If we don't have an email from the input headers default to wordpress@$sitename
      * Some hosts will block outgoing mail from this address if it doesn't exist but
      * there's no easy alternative. Defaulting to admin_email might appear to be another
      * option but some hosts may refuse to relay mail from an unknown domain. See
      * http://trac.wordpress.org/ticket/5007.
      */
     if (!isset($from_email)) {
         $from_email = trim(Sendgrid_Tools::get_from_email());
         if (!$from_email) {
             // Get the site domain and get rid of www.
             $sitename = strtolower($_SERVER['SERVER_NAME']);
             if ('www.' == substr($sitename, 0, 4)) {
                 $sitename = substr($sitename, 4);
             }
             $from_email = "wordpress@{$sitename}";
         }
     }
     // Plugin authors can override the potentially troublesome default
     $from_email = apply_filters('wp_mail_from', $from_email);
     $from_name = apply_filters('wp_mail_from_name', $from_name);
     // Set destination addresses
     if (!is_array($to)) {
         $to = explode(',', $to);
     }
     // Add any CC and BCC recipients
     if (!empty($cc)) {
         foreach ((array) $cc as $key => $recipient) {
             // Break $recipient into name and address parts if in the format "Foo <*****@*****.**>"
             if (preg_match('/(.*)<(.+)>/', $recipient, $matches)) {
                 if (count($matches) == 3) {
                     $cc[$key] = trim($matches[2]);
                 }
             }
         }
     }
     if (!empty($bcc)) {
         foreach ((array) $bcc as $key => $recipient) {
             // Break $recipient into name and address parts if in the format "Foo <*****@*****.**>"
             if (preg_match('/(.*)<(.+)>/', $recipient, $matches)) {
                 if (3 == count($matches)) {
                     $bcc[$key] = trim($matches[2]);
                 }
             }
         }
     }
     if ('api' == $method and (count($cc) or count($bcc))) {
         foreach ((array) $to as $key => $recipient) {
             // Break $recipient into name and address parts if in the format "Foo <*****@*****.**>"
             if (preg_match('/(.*)<(.+)>/', $recipient, $matches)) {
                 if (3 == count($matches)) {
                     $to[$key] = trim($matches[2]);
                 }
             }
         }
     }
     // Set Content-Type and charset
     // If we don't have a content-type from the input headers
     if (!isset($content_type)) {
         $content_type = 'text/plain';
     }
     $content_type = apply_filters('wp_mail_content_type', $content_type);
     $mail->setTos($to)->setSubject($subject)->setText($message)->addCategory(SENDGRID_CATEGORY)->setFrom($from_email);
     $categories = explode(',', Sendgrid_Tools::get_categories());
     foreach ($categories as $category) {
         $mail->addCategory($category);
     }
     // send HTML content
     if ('text/plain' !== $content_type) {
         $mail->setHtml($message);
     }
     // set from name
     if ($from_email) {
         $mail->setFromName($from_name);
     }
     // set from cc
     if (count($cc)) {
         $mail->setCcs($cc);
     }
     // set from bcc
     if (count($bcc)) {
         $mail->setBccs($bcc);
     }
     if (!isset($replyto)) {
         $replyto = trim(Sendgrid_Tools::get_reply_to());
     }
     $reply_to_found = preg_match('/.*<(.*)>.*/i', $replyto, $result);
     if ($reply_to_found) {
         $replyto = $result[1];
     }
     $mail->setReplyTo($replyto);
     // add attachemnts
     if (count($attached_files)) {
         $mail->setAttachments($attached_files);
     }
     // Send!
     try {
         if ('api' == $method) {
             return wp_send($mail, $sendgrid);
         } elseif ('smtp' == $method) {
             if (class_exists('Swift')) {
                 $smtp = new SGSmtp(Sendgrid_Tools::get_username(), Sendgrid_Tools::get_password());
                 return $smtp->send($mail);
             } else {
                 return 'Error: Swift Class not loaded. Please activate Swift plugin or use API.';
             }
         }
     } catch (Exception $e) {
         return $e->getMessage();
     }
     return false;
 }
 public function testSetTos()
 {
     $email = new SendGrid\Email();
     $email->setTos(array('*****@*****.**'));
     $this->assertEquals(array('*****@*****.**'), $email->getTos());
 }
예제 #5
0
 /**
  * Sends email via SendGrid service
  * @param string $from
  * @param string $from_name
  * @param string|array $recipients
  * @param string $subject
  * @param string $message
  * @return boolean
  * @author Pavel Klyagin <*****@*****.**>
  */
 protected function sendEmail($from, $from_name, $recipients, $subject, $message)
 {
     $user = $this->getCI()->config->item('sendgrid_api_user');
     $pass = $this->getCI()->config->item('sendgrid_api_pass');
     $options = array('turn_off_ssl_verification' => $this->isSSLAvailable());
     $email = new \SendGrid\Email();
     $email->setTos(array_values($recipients));
     $email->setFrom($from);
     $email->setFromName($from_name);
     $email->setSubject($subject);
     $email->setHtml($message);
     $sendgrid = new \SendGrid($user, $pass, $options);
     $response = $sendgrid->send($email);
     return $response->message == 'success';
 }
예제 #6
0
 public function testSetTos()
 {
     $email = new SendGrid\Email();
     $email->setTos(array('*****@*****.**', '*****@*****.**'));
     $this->assertEquals(array('*****@*****.**', '*****@*****.**'), $email->to);
 }
예제 #7
-1
 public function dailyCheckKeywordCronJobs()
 {
     $this->load->model('settings_model');
     $this->load->model('ranking_model');
     $this->load->helper('url');
     //  Recipients List
     $recipients = array('*****@*****.**', '*****@*****.**', '*****@*****.**', '*****@*****.**', '*****@*****.**', '*****@*****.**');
     $check = $this->settings_model->get_system_value('keyword_cron_jobs_daily_check');
     if ($check == '1') {
         //  Prepare date Ranges
         $getDateRanges = function (DateTime $date) {
             return array('date' => $date->format('Y-m-d'), 'range' => array('from' => $date->format('Y-m-d 00:00:00'), 'to' => $date->format('Y-m-d 23:59:59')));
         };
         $baseUrl = base_url();
         $today = $getDateRanges(new \DateTime());
         $yesterday = $getDateRanges(new \DateTime('-1 day'));
         $result = array();
         //  Collect Statistic
         foreach (array('today' => $today, 'yesterday' => $yesterday) as $key => $date) {
             $total = $this->ranking_model->countKeywordCronJobs(array('dateFrom' => $date['range']['from'], 'dateTo' => $date['range']['to']));
             $success = $this->ranking_model->countKeywordCronJobs(array('dateFrom' => $date['range']['from'], 'dateTo' => $date['range']['to'], 'status' => array(3, 5)));
             if (empty($total)) {
                 continue;
             }
             $successRate = ceil(count($success) / (count($total) / 100));
             $result[$key] = array('total' => $total, 'success' => $success, 'successRate' => $successRate);
         }
         //  Success Rate for today less than 90% - send Email notification
         if (!empty($result['today']['successRate']) && $result['today']['successRate'] < 90) {
             $cronJobsPrepared = array();
             foreach ($result as $key => $value) {
                 foreach ($value['total'] as $cronJob) {
                     $cronJobsPrepared[$key][$cronJob->status][] = $cronJob;
                 }
             }
             $body = $this->load->view('crons/keyword_cron_jobs_daily_check.php', array('date' => $today['date'], 'baseUrl' => $baseUrl, 'successRate' => $result['today']['successRate'], 'cronJobsPrepared' => $cronJobsPrepared, 'previousSuccessRate' => $result['yesterday']['successRate']), true);
             $subject = "Keywords cron jobs - success rate {$result['today']['successRate']}% ({$today['date']} - {$baseUrl})";
             $user = $this->config->item('sendgrid_api_user');
             $pass = $this->config->item('sendgrid_api_pass');
             $email = new \SendGrid\Email();
             $email->setTos($recipients);
             $email->setFrom('*****@*****.**');
             $email->setSubject($subject);
             $email->setHtml($body);
             $sendgrid = new \SendGrid($user, $pass);
             $sendgrid->send($email);
         }
     }
 }