public static function get_instance() { $send_method = Sendgrid_Tools::get_send_method(); $auth_method = Sendgrid_Tools::get_auth_method(); switch ($send_method) { case 'api': return self::api_instance($auth_method); break; case 'smtp': return self::smtp_instance($auth_method); break; } return self::api_instance($auth_method); }
/** * 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; } }
/** * Check template * * @param string $template sendgrid template * @return bool */ public static function check_template($template) { if ('' == $template) { return true; } $url = 'v3/templates/' . $template; $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(); $response = Sendgrid_Tools::do_request($url, $parameters); if (!$response) { return false; } $response = json_decode($response, true); if (isset($response['error']) or isset($response['errors']) && isset($response['errors'][0]['message'])) { return false; } return true; }
/** * 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'); }
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; }