Пример #1
0
/**
 * 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())
{
    $header_is_object = false;
    if ($headers instanceof SendGrid\Email) {
        $header_is_object = true;
        $mail = $headers;
        // Compact the input, apply the filters, and extract them back out - empty header
        extract(apply_filters('wp_mail', compact('to', 'subject', 'message', '', 'attachments')));
    } else {
        $mail = new SendGrid\Email();
        // Compact the input, apply the filters, and extract them back out
        extract(apply_filters('wp_mail', compact('to', 'subject', 'message', 'headers', 'attachments')));
    }
    $method = Sendgrid_Tools::get_send_method();
    // 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();
    $from_name = $mail->getFromName();
    $from_email = $mail->getFrom();
    $replyto = $mail->getReplyTo();
    if (false === $header_is_object) {
        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;
                        case 'x-smtpapi-to':
                            $xsmtpapi_tos = explode(',', trim($content));
                            foreach ($xsmtpapi_tos as $xsmtpapi_to) {
                                $mail->addSmtpapiTo($xsmtpapi_to);
                            }
                            break;
                        case 'substitutions':
                            if (false !== strpos($content, ';')) {
                                $substitutions = explode(';', $content);
                            } else {
                                $substitutions = (array) trim($content);
                            }
                            foreach ($substitutions as $substitution) {
                                if (false !== strpos($content, '=')) {
                                    list($key, $val) = explode('=', $substitution);
                                    $mail->addSubstitution('%' . trim($key) . '%', explode(',', trim($val)));
                                }
                            }
                            break;
                        case 'sections':
                            if (false !== strpos($content, ';')) {
                                $sections = explode(';', $content);
                            } else {
                                $sections = (array) trim($content);
                            }
                            foreach ($sections as $section) {
                                if (false !== strpos($content, '=')) {
                                    list($key, $val) = explode('=', $section);
                                    $mail->addSection('%' . 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) or !$from_name) {
        $from_name = stripslashes(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 (!$sitename and 'smtp' == $method) {
                return false;
            }
            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) {
        $toname[$key] = " ";
        // 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 from header of from global variable
    $global_content_type = Sendgrid_Tools::get_content_type();
    if (!isset($content_type)) {
        if (!$global_content_type or 'plaintext' == $global_content_type) {
            $content_type = 'text/plain';
        } elseif ('html' == $global_content_type) {
            $content_type = 'text/html';
        } else {
            $content_type = 'text/plain';
        }
    }
    if (!array_key_exists('sendgrid_override_template', $GLOBALS['wp_filter'])) {
        $template = Sendgrid_Tools::get_template();
        if ($template) {
            $mail->setTemplateId($template);
        }
    } else {
        $message = apply_filters('sendgrid_override_template', $message, $content_type);
    }
    $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(Sendgrid_Tools::remove_all_tag_urls($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);
    }
    $sendgrid = Sendgrid_WP::get_instance();
    if (!$sendgrid) {
        return false;
    }
    return $sendgrid->send($mail);
}
 /**
  * Saves the General Settings parameters sent from the settings page
  *
  * @param  mixed   $params    array of parameters from $_POST
  *
  * @return mixed              response array with message and status
  */
 private static function save_general_settings($params)
 {
     if (!isset($params['auth_method'])) {
         $params['auth_method'] = Sendgrid_Tools::get_auth_method();
     }
     switch ($params['auth_method']) {
         case 'apikey':
             if (!defined('SENDGRID_API_KEY')) {
                 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;
                 }
                 if ('true' == Sendgrid_Tools::get_mc_opt_use_transactional() and !Sendgrid_Tools::check_api_key_mc($params['sendgrid_apikey'])) {
                     $response = array('message' => 'This API key is also used for the Subscription Widget but does not have Marketing Campaigns permissions.', 'status' => 'error');
                 }
                 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($params['unsubscribe_group'])) {
         Sendgrid_Tools::set_unsubscribe_group($params['unsubscribe_group']);
     }
     if (isset($response) and $response['status'] == 'error') {
         return $response;
     }
     return array('message' => 'Options are saved.', 'status' => 'updated');
 }
 /**
  * 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';
 }
Пример #4
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');
 }