private static function smtp_instance($auth_method)
 {
     if (!class_exists('Swift')) {
         self::$error = array("success" => false, "message" => "Swift Class not loaded. Please activate Swift plugin or use API.");
         return null;
     }
     switch ($auth_method) {
         case 'apikey':
             $smtp = new Sendgrid_SMTP("apikey", Sendgrid_Tools::get_api_key());
             break;
         case 'credentials':
             $smtp = new Sendgrid_SMTP(Sendgrid_Tools::get_username(), Sendgrid_Tools::get_password());
             break;
         default:
             return null;
             break;
     }
     if (Sendgrid_Tools::get_port()) {
         if (in_array(Sendgrid_Tools::get_port(), Sendgrid_Tools::$allowed_ports)) {
             $smtp->set_port(Sendgrid_Tools::get_port());
         } else {
             $smtp->set_port(Sendgrid_SMTP::TLS);
         }
     }
     return $smtp;
 }
 /**
  * Returns the appropriate header value of authorization depending on the available credentials.
  *
  * @return  mixed   string of the header value if successful, false otherwise.
  */
 private static function get_auth_header_value()
 {
     if ("false" == Sendgrid_Tools::get_mc_opt_use_transactional()) {
         $mc_api_key = Sendgrid_Tools::get_mc_api_key();
         if (false != $mc_api_key) {
             return 'Bearer ' . $mc_api_key;
         }
     }
     $auth_method = Sendgrid_Tools::get_auth_method();
     if ('credentials' == $auth_method) {
         $creds = base64_encode(Sendgrid_Tools::get_username() . ':' . Sendgrid_Tools::get_password());
         return 'Basic ' . $creds;
     } else {
         $api_key = Sendgrid_Tools::get_api_key();
         if (false == $api_key) {
             return false;
         }
         return 'Bearer ' . $api_key;
     }
 }
 /**
  * Return auth method from the database or global variable
  *
  * @return string auth_method
  */
 public static function get_auth_method()
 {
     if (defined('SENDGRID_AUTH_METHOD')) {
         return SENDGRID_AUTH_METHOD;
     } elseif (get_option('sendgrid_auth_method')) {
         $auth_method = get_option('sendgrid_auth_method');
         if ('username' == $auth_method) {
             $auth_method = 'credentials';
             update_option('sendgrid_auth_method', $auth_method);
         }
         return $auth_method;
     } elseif (Sendgrid_Tools::get_api_key()) {
         return 'apikey';
     } elseif (Sendgrid_Tools::get_username() and Sendgrid_Tools::get_password()) {
         return 'credentials';
     } else {
         return 'apikey';
     }
 }
 /**
  * Display SendGrid settings page content
  */
 public static function show_settings_page()
 {
     if ('POST' == $_SERVER['REQUEST_METHOD']) {
         if (isset($_POST['email_test']) and $_POST['email_test']) {
             $to = $_POST['sendgrid_to'];
             $subject = $_POST['sendgrid_subj'];
             $body = $_POST['sendgrid_body'];
             $headers = $_POST['sendgrid_headers'];
             $sent = wp_mail($to, $subject, $body, $headers);
             if ('api' == Sendgrid_Tools::get_send_method()) {
                 $sent = json_decode($sent['body']);
                 if ("success" == $sent->message) {
                     $message = 'Email sent.';
                     $status = 'updated';
                 } else {
                     $errors = $sent->errors[0] ? $sent->errors[0] : $sent;
                     $message = 'Email not sent. ' . $errors;
                     $status = 'error';
                 }
             } elseif ('smtp' == Sendgrid_Tools::get_send_method()) {
                 if (true === $sent) {
                     $message = 'Email sent.';
                     $status = 'updated';
                 } else {
                     $message = 'Email not sent. ' . $sent;
                     $status = 'error';
                 }
             }
         } else {
             $message = 'Options saved.';
             $status = 'updated';
             if (isset($_POST['sendgrid_user'])) {
                 $user = $_POST['sendgrid_user'];
                 update_option('sendgrid_user', $user);
             }
             if (isset($_POST['sendgrid_pwd'])) {
                 $password = $_POST['sendgrid_pwd'];
                 update_option('sendgrid_pwd', $password);
             }
             if (isset($_POST['sendgrid_api'])) {
                 $method = $_POST['sendgrid_api'];
                 update_option('sendgrid_api', $method);
             }
             if (isset($_POST['sendgrid_name'])) {
                 $name = $_POST['sendgrid_name'];
                 update_option('sendgrid_from_name', $name);
             }
             if (isset($_POST['sendgrid_email'])) {
                 $email = $_POST['sendgrid_email'];
                 update_option('sendgrid_from_email', $email);
             }
             if (isset($_POST['sendgrid_reply_to'])) {
                 $reply_to = $_POST['sendgrid_reply_to'];
                 update_option('sendgrid_reply_to', $reply_to);
             }
             if (isset($_POST['sendgrid_categories'])) {
                 $categories = $_POST['sendgrid_categories'];
                 update_option('sendgrid_categories', $categories);
             }
         }
     }
     $user = Sendgrid_Tools::get_username();
     $password = Sendgrid_Tools::get_password();
     $method = Sendgrid_Tools::get_send_method();
     $name = Sendgrid_Tools::get_from_name();
     $email = Sendgrid_Tools::get_from_email();
     $reply_to = Sendgrid_Tools::get_reply_to();
     $categories = Sendgrid_Tools::get_categories();
     $allowed_methods = array('smtp', 'api');
     if (!in_array($method, $allowed_methods)) {
         $message = 'Invalid send method, available methods are: "api" or "smtp".';
         $status = 'error';
     }
     if ('smtp' == $method and !class_exists('Swift')) {
         $message = 'You must have <a href="http://wordpress.org/plugins/swift-mailer/" target="_blank">' . 'Swift-mailer plugin</a> installed and activated';
         $status = 'error';
     }
     if ($user and $password) {
         if (!Sendgrid_Tools::check_username_password($user, $password)) {
             $message = 'Invalid username/password';
             $status = 'error';
         }
     }
     $are_global_credentials = (defined('SENDGRID_USERNAME') and defined('SENDGRID_PASSWORD'));
     require_once dirname(__FILE__) . '/../view/sendgrid_settings.php';
 }
 /**
  * Return auth method from the database or global variable
  *
  * @return string auth_method
  */
 public static function get_auth_method()
 {
     if (defined('SENDGRID_AUTH_METHOD')) {
         return SENDGRID_AUTH_METHOD;
     } elseif (Sendgrid_Tools::get_api_key()) {
         return 'apikey';
     } elseif (Sendgrid_Tools::get_username() and Sendgrid_Tools::get_password() and !Sendgrid_Tools::get_api_key()) {
         return 'username';
     } elseif (get_option('sendgrid_auth_method')) {
         return get_option('sendgrid_auth_method');
     } else {
         return 'apikey';
     }
 }
 /**
  * Get SendGrid stats from API and return JSON response,
  * this function work like a page and is used for ajax request by javascript functions
  *
  * @return void;
  */
 public static function get_ajax_statistics()
 {
     if (!isset($_POST['sendgrid_nonce']) || !wp_verify_nonce($_POST['sendgrid_nonce'], 'sendgrid-nonce')) {
         die('Permissions check failed');
     }
     $parameters = array();
     $parameters['api_user'] = Sendgrid_Tools::get_username();
     $parameters['api_key'] = Sendgrid_Tools::get_password();
     $api_key = Sendgrid_Tools::get_api_key();
     if ("apikey" == Sendgrid_Tools::get_auth_method()) {
         $parameters['apikey'] = $api_key;
     }
     $parameters['data_type'] = 'global';
     if (array_key_exists('days', $_POST)) {
         $parameters['days'] = $_POST['days'];
     } else {
         $parameters['start_date'] = $_POST['start_date'];
         $parameters['end_date'] = $_POST['end_date'];
     }
     $endpoint = 'v3/stats';
     if (isset($_POST['type']) && 'general' != $_POST['type']) {
         if ('wordpress' == $_POST['type']) {
             $parameters['categories'] = 'wp_sendgrid_plugin';
         } else {
             $parameters['categories'] = urlencode($_POST['type']);
         }
         $endpoint = 'v3/categories/stats';
     }
     echo Sendgrid_Tools::curl_request($endpoint, $parameters);
     die;
 }
 /**
  * Display SendGrid settings page content
  */
 public static function show_settings_page()
 {
     if ('POST' == $_SERVER['REQUEST_METHOD']) {
         if (isset($_POST['email_test']) and $_POST['email_test']) {
             $to = $_POST['sendgrid_to'];
             $subject = stripslashes($_POST['sendgrid_subj']);
             $body = stripslashes($_POST['sendgrid_body']);
             $headers = $_POST['sendgrid_headers'];
             if (preg_match("/content-type:\\s*text\\/html/i", $headers)) {
                 $body_br = nl2br($body);
             } else {
                 $body_br = $body;
             }
             $sent = wp_mail($to, $subject, $body_br, $headers);
             if ('api' == Sendgrid_Tools::get_send_method()) {
                 $sent = json_decode($sent['body']);
                 if ("success" == $sent->message) {
                     $message = 'Email sent.';
                     $status = 'updated';
                 } else {
                     $errors = $sent->errors[0] ? $sent->errors[0] : $sent;
                     $message = 'Email not sent. ' . $errors;
                     $status = 'error';
                     $error_type = 'sending';
                 }
             } elseif ('smtp' == Sendgrid_Tools::get_send_method()) {
                 if (true === $sent) {
                     $message = 'Email sent.';
                     $status = 'updated';
                 } else {
                     $message = 'Email not sent. ' . $sent;
                     $status = 'error';
                     $error_type = 'sending';
                 }
             }
         } else {
             if (isset($_POST['auth_method'])) {
                 if ($_POST['auth_method'] == 'apikey') {
                     if (!$_POST['sendgrid_api_key']) {
                         $message = 'Api key is required';
                         $status = 'error';
                     } else {
                         if (!Sendgrid_Tools::check_api_key($_POST['sendgrid_api_key'])) {
                             $message = 'Invalid or without permissions api key';
                             $status = 'error';
                         }
                     }
                 } else {
                     if (!$_POST['sendgrid_user'] or !$_POST['sendgrid_pwd']) {
                         $message = 'Username/Password are required';
                         $status = 'error';
                     } else {
                         if (!Sendgrid_Tools::check_username_password($_POST['sendgrid_user'], $_POST['sendgrid_pwd'])) {
                             $message = 'Invalid username/password';
                             $status = 'error';
                         }
                     }
                 }
             }
             if (isset($_POST['sendgrid_name'])) {
                 $name = $_POST['sendgrid_name'];
                 update_option('sendgrid_from_name', $name);
             }
             if (isset($_POST['sendgrid_email'])) {
                 $email = $_POST['sendgrid_email'];
                 update_option('sendgrid_from_email', $email);
             }
             if (isset($_POST['sendgrid_reply_to'])) {
                 $reply_to = $_POST['sendgrid_reply_to'];
                 update_option('sendgrid_reply_to', $reply_to);
             }
             if (isset($_POST['sendgrid_categories'])) {
                 $categories = $_POST['sendgrid_categories'];
                 update_option('sendgrid_categories', $categories);
             }
             if (isset($_POST['sendgrid_template'])) {
                 $template = $_POST['sendgrid_template'];
                 update_option('sendgrid_template', $template);
             }
             if (isset($_POST['sendgrid_api'])) {
                 $method = $_POST['sendgrid_api'];
                 update_option('sendgrid_api', $method);
             }
             if (isset($_POST['auth_method'])) {
                 $auth_method = $_POST['auth_method'];
                 update_option('sendgrid_auth_method', $auth_method);
             }
             if (isset($_POST['sendgrid_port'])) {
                 $port = $_POST['sendgrid_port'];
                 update_option('sendgrid_port', $port);
             }
             if (!isset($status) or isset($status) and $status != 'error') {
                 $message = 'Options saved.';
                 $status = 'updated';
                 if (isset($_POST['sendgrid_api_key'])) {
                     $user = $_POST['sendgrid_api_key'];
                     update_option('sendgrid_api_key', $user);
                 }
                 if (isset($_POST['sendgrid_user'])) {
                     $user = $_POST['sendgrid_user'];
                     update_option('sendgrid_user', $user);
                 }
                 if (isset($_POST['sendgrid_pwd'])) {
                     $password = $_POST['sendgrid_pwd'];
                     update_option('sendgrid_pwd', $password);
                 }
             }
         }
     }
     $user = Sendgrid_Tools::get_username();
     $password = Sendgrid_Tools::get_password();
     $api_key = Sendgrid_Tools::get_api_key();
     $method = Sendgrid_Tools::get_send_method();
     $auth_method = Sendgrid_Tools::get_auth_method();
     $name = stripslashes(Sendgrid_Tools::get_from_name());
     $email = Sendgrid_Tools::get_from_email();
     $reply_to = Sendgrid_Tools::get_reply_to();
     $categories = stripslashes(Sendgrid_Tools::get_categories());
     $template = stripslashes(Sendgrid_Tools::get_template());
     $port = Sendgrid_Tools::get_port();
     $allowed_methods = array('smtp', 'api');
     if (!in_array($method, $allowed_methods)) {
         $message = 'Invalid send method, available methods are: "api" or "smtp".';
         $status = 'error';
     }
     if ('smtp' == $method and !class_exists('Swift')) {
         $message = 'You must have <a href="http://wordpress.org/plugins/swift-mailer/" target="_blank">' . 'Swift-mailer plugin</a> installed and activated';
         $status = 'error';
     }
     if ($api_key) {
         if (!Sendgrid_Tools::check_api_key($api_key)) {
             $message = 'Invalid api key';
             $status = 'error';
         }
     } else {
         if ($user and $password) {
             if (!Sendgrid_Tools::check_username_password($user, $password)) {
                 $message = 'Invalid username/password';
                 $status = 'error';
             }
         }
     }
     if ($template) {
         if (!Sendgrid_Tools::check_template($template)) {
             $message = 'Template not found';
             $status = 'error';
         }
     }
     $are_global_credentials = (defined('SENDGRID_USERNAME') and defined('SENDGRID_PASSWORD'));
     $is_global_api_key = defined('SENDGRID_API_KEY');
     $has_port = defined('SENDGRID_PORT');
     require_once dirname(__FILE__) . '/../view/sendgrid_settings.php';
 }
 /**
  * Uploads a contact using the parameters specified in the settings page
  *
  * @param  mixed   $params    array of parameters from $_POST
  *
  * @return mixed              response array with message and status
  */
 private static function send_contact_upload_test($params)
 {
     $email = $params['sendgrid_test_email'];
     if (!Sendgrid_Tools::is_valid_email($email)) {
         return array('message' => 'Email address provided is invalid.', 'status' => 'error', 'error_type' => 'upload');
     }
     switch (Sendgrid_Tools::get_auth_method()) {
         case 'apikey':
             $apikey = Sendgrid_Tools::get_api_key();
             if (!Sendgrid_Tools::check_api_key($apikey, true)) {
                 return array('message' => 'API Key used for mail send is invalid or without permissions.', 'status' => 'error', 'error_type' => 'upload');
             }
             break;
         case 'credentials':
             $username = Sendgrid_Tools::get_username();
             $password = Sendgrid_Tools::get_password();
             if (!Sendgrid_Tools::check_username_password($params['sendgrid_username'], $params['sendgrid_password'], true)) {
                 return array('message' => 'Credentials used for mail send are invalid.', 'status' => 'error', 'error_type' => 'upload');
             }
             break;
         default:
             return array('message' => 'An error occured when trying to check your transactional credentials. Please check that they are correct on the General Settings tab.', 'status' => 'error', 'error_type' => 'upload');
     }
     if (false == Sendgrid_OptIn_API_Endpoint::send_confirmation_email($email, '', '', true)) {
         return array('message' => 'An error occured when trying send the subscription email. Please make sure you have configured all settings properly.', 'status' => 'error', 'error_type' => 'upload');
     }
     return array('message' => 'Subscription confirmation email was sent.', 'status' => 'updated');
 }
 /**
  * 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;
                 }
             }
         }
     }
     $template = Sendgrid_Tools::get_template();
     if ($template) {
         $mail->setTemplateId($template);
     }
     // 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;
                     case 'template':
                         $template_ok = Sendgrid_Tools::check_template(trim($content));
                         if ($template_ok) {
                             $mail->setTemplateId(trim($content));
                         } elseif (Sendgrid_Tools::get_template()) {
                             $mail->setTemplateId(Sendgrid_Tools::get_template());
                         }
                         break;
                     case 'categories':
                         $categories = explode(',', trim($content));
                         foreach ($categories as $category) {
                             $mail->addCategory($category);
                         }
                         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]);
                 }
             }
         }
     }
     $toname = array();
     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]);
                 $toname[$key] = trim($matches[1]);
             }
         }
     }
     // 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->setSubject($subject)->setText($message)->addCategory(SENDGRID_CATEGORY)->setFrom($from_email);
     if ('api' == $method) {
         $mail->addTo($to, $toname);
     } else {
         $mail->addTo($to);
     }
     $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());
                 if (Sendgrid_Tools::get_port()) {
                     $smtp->setPort(Sendgrid_Tools::get_port());
                 }
                 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;
 }
 /**
  * Get SendGrid stats from API and return JSON response,
  * this function work like a page and is used for ajax request by javascript functions
  *
  * @return void;
  */
 public static function get_ajax_statistics()
 {
     if (!isset($_POST['sendgrid_nonce']) || !wp_verify_nonce($_POST['sendgrid_nonce'], 'sendgrid-nonce')) {
         die('Permissions check failed');
     }
     $parameters = array();
     $parameters['api_user'] = Sendgrid_Tools::get_username();
     $parameters['api_key'] = Sendgrid_Tools::get_password();
     $parameters['data_type'] = 'global';
     $parameters['metric'] = 'all';
     if (array_key_exists('days', $_POST)) {
         $parameters['days'] = $_POST['days'];
     } else {
         $parameters['start_date'] = $_POST['start_date'];
         $parameters['end_date'] = $_POST['end_date'];
     }
     if ($_POST['type'] && 'general' != $_POST['type']) {
         if ('wordpress' == $_POST['type']) {
             $parameters['category'] = 'wp_sendgrid_plugin';
         } else {
             $parameters['category'] = urlencode($_POST['type']);
         }
     }
     echo Sendgrid_Tools::curl_request('api/stats.get.json', $parameters);
     die;
 }
Esempio n. 11
0
 private static function save_settings($params)
 {
     if (!isset($params['auth_method'])) {
         $params['auth_method'] = Sendgrid_Tools::get_auth_method();
     }
     switch ($params['auth_method']) {
         case 'apikey':
             if (!isset($params['sendgrid_apikey']) or empty($params['sendgrid_apikey'])) {
                 $response = array('message' => 'API Key is empty.', 'status' => 'error');
                 Sendgrid_Tools::set_api_key('');
                 break;
             }
             if (!Sendgrid_Tools::check_api_key($params['sendgrid_apikey'], true)) {
                 $response = array('message' => 'API Key is invalid or without permissions.', 'status' => 'error');
                 break;
             }
             Sendgrid_Tools::set_api_key($params['sendgrid_apikey']);
             break;
         case 'credentials':
             if (!isset($params['sendgrid_username']) and !isset($params['sendgrid_password'])) {
                 break;
             }
             $save_username = true;
             $save_password = true;
             if (!isset($params['sendgrid_username'])) {
                 $save_username = false;
                 $params['sendgrid_username'] = Sendgrid_Tools::get_username();
             }
             if (!isset($params['sendgrid_password'])) {
                 $save_password = false;
                 $params['sendgrid_password'] = Sendgrid_Tools::get_username();
             }
             if (isset($params['sendgrid_username']) and !$params['sendgrid_username'] or isset($params['sendgrid_password']) and !$params['sendgrid_password']) {
                 $response = array('message' => 'Username or password is empty.', 'status' => 'error');
             } elseif (!Sendgrid_Tools::check_username_password($params['sendgrid_username'], $params['sendgrid_password'], true)) {
                 $response = array('message' => 'Username and password are invalid.', 'status' => 'error');
                 break;
             }
             if ($save_username) {
                 Sendgrid_Tools::set_username($params['sendgrid_username']);
             }
             if ($save_password) {
                 Sendgrid_Tools::set_password($params['sendgrid_password']);
             }
             break;
     }
     if (isset($params['sendgrid_name'])) {
         update_option('sendgrid_from_name', $params['sendgrid_name']);
     }
     if (isset($params['sendgrid_email'])) {
         if (!empty($params['sendgrid_email']) and !Sendgrid_Tools::is_valid_email($params['sendgrid_email'])) {
             $response = array('message' => 'Sending email address is not valid.', 'status' => 'error');
         } else {
             update_option('sendgrid_from_email', $params['sendgrid_email']);
         }
     }
     if (isset($params['sendgrid_reply_to'])) {
         if (!empty($params['sendgrid_reply_to']) and !Sendgrid_Tools::is_valid_email($params['sendgrid_reply_to'])) {
             $response = array('message' => 'Reply email address is not valid.', 'status' => 'error');
         } else {
             update_option('sendgrid_reply_to', $params['sendgrid_reply_to']);
         }
     }
     if (isset($params['sendgrid_categories'])) {
         update_option('sendgrid_categories', $params['sendgrid_categories']);
     }
     if (isset($params['sendgrid_stats_categories'])) {
         update_option('sendgrid_stats_categories', $params['sendgrid_stats_categories']);
     }
     if (isset($params['sendgrid_template'])) {
         if (!Sendgrid_Tools::check_template($params['sendgrid_template'])) {
             $response = array('message' => 'Template not found.', 'status' => 'error');
         } else {
             update_option('sendgrid_template', $params['sendgrid_template']);
         }
     }
     if (isset($params['send_method'])) {
         update_option('sendgrid_api', $params['send_method']);
     }
     if (isset($params['auth_method']) && in_array($params['auth_method'], Sendgrid_Tools::$allowed_auth_methods)) {
         update_option('sendgrid_auth_method', $params['auth_method']);
     }
     if (isset($params['sendgrid_port'])) {
         update_option('sendgrid_port', $params['sendgrid_port']);
     }
     if (isset($params['content_type'])) {
         update_option('sendgrid_content_type', $params['content_type']);
     }
     if (isset($response) and $response['status'] == 'error') {
         return $response;
     }
     return array('message' => 'Options are saved.', 'status' => 'updated');
 }
 /**
  * Returns the unsubscribe groups from SendGrid
  *
  * @return  mixed   an array of groups if the request is successful, false otherwise.
  */
 public static function get_all_unsubscribe_groups()
 {
     $url = 'v3/asm/groups';
     $parameters['auth_method'] = Sendgrid_Tools::get_auth_method();
     $parameters['api_username'] = Sendgrid_Tools::get_username();
     $parameters['api_password'] = Sendgrid_Tools::get_password();
     $parameters['apikey'] = Sendgrid_Tools::get_api_key();
     if ('apikey' == $parameters['auth_method'] and 'true' != self::get_asm_permission()) {
         return false;
     }
     $response = Sendgrid_Tools::do_request($url, $parameters);
     if (!$response) {
         return false;
     }
     $response = json_decode($response, true);
     if (isset($response['error']) or isset($response['errors']) and isset($response['errors'][0]['message'])) {
         return false;
     }
     return $response;
 }