コード例 #1
0
 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;
 }
コード例 #2
0
 public function bp_email(BP_Email $email)
 {
     $recipients = $email->get_to();
     $to = array();
     foreach ($recipients as $recipient) {
         $to[] = $recipient->get_address();
     }
     $subject = $email->get_subject('replace-tokens');
     $message = normalize_whitespace($email->get_content_plaintext('replace-tokens'));
     $filter_set = false;
     if ('plaintext' != Sendgrid_Tools::get_content_type()) {
         add_filter('wp_mail_content_type', array($this, 'set_html_content_type'), 100);
         $filter_set = true;
         $message = $email->get_template('add-content');
     }
     $result = wp_mail($to, $subject, $message);
     if ($filter_set) {
         remove_filter('wp_mail_content_type', array($this, 'set_html_content_type'));
     }
     return $result;
 }
コード例 #3
0
 /**
  * Check apikey stats permissions
  *
  * @param   string  $apikey   sendgrid apikey
  * @return  bool
  */
 public static function check_api_key_stats($apikey)
 {
     $required_scopes = array('stats.read', 'categories.stats.read', 'categories.stats.sums.read');
     return Sendgrid_Tools::check_api_key_scopes($apikey, $required_scopes);
 }
コード例 #4
0
 /**
  * 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';
 }
コード例 #5
0
 /** 
  * Send OptIn email
  *  
  * @param  string $email      Email of subscribed user
  * @param  string $first_name First Name of subscribed user
  * @param  string $last_name  Last Name of subscribed user
  * @return bool
  */
 public static function send_confirmation_email($email, $first_name = '', $last_name = '', $from_settings = false)
 {
     $subject = Sendgrid_Tools::get_mc_signup_email_subject();
     $content = Sendgrid_Tools::get_mc_signup_email_content();
     $content_text = Sendgrid_Tools::get_mc_signup_email_content_text();
     if (false == $subject or false == $content or false == $content_text) {
         return false;
     }
     $subject = stripslashes($subject);
     $content = stripslashes($content);
     $content_text = stripslashes($content_text);
     $to = array($email);
     $token = Sendgrid_OptIn_API_Endpoint::generate_email_token($email, $first_name, $last_name);
     $transient = get_transient($token);
     if ($transient and isset($transient['email']) and !$from_settings) {
         return false;
     }
     if (false == set_transient($token, array('email' => $email, 'first_name' => $first_name, 'last_name' => $last_name), 24 * 60 * 60) and !$from_settings and $transient) {
         return false;
     }
     $confirmation_link = site_url() . '?__sg_api=1&token=' . $token;
     $headers = new SendGrid\Email();
     $headers->addSubstitution('%confirmation_link%', array($confirmation_link))->addCategory('wp_sendgrid_subscription_widget');
     add_filter('sendgrid_mail_text', function () use(&$content_text) {
         return $content_text;
     });
     $result = wp_mail($to, $subject, $content, $headers);
     return $result;
 }
コード例 #6
0
 /**
  * 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;
 }
コード例 #7
0
ファイル: sendgrid-wp-mail.php プロジェクト: pcuervo/dabba
/**
 * 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);
}
コード例 #8
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'])) {
                 break;
             }
             if (!$params['sendgrid_apikey']) {
                 $response = array("message" => "API Key is empty.", "status" => "error");
             } elseif (!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'])) {
         update_option('sendgrid_from_email', $params['sendgrid_email']);
     }
     if (isset($params['sendgrid_reply_to'])) {
         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");
 }
コード例 #9
0
 /**
  * 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'] = get_option('sendgrid_user');
     $parameters['api_key'] = get_option('sendgrid_pwd');
     $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'] and 'wordpress' == $_POST['type']) {
         $parameters['category'] = 'wp_sendgrid_plugin';
     }
     echo Sendgrid_Tools::curl_request('api/stats.get.json', $parameters);
     die;
 }
コード例 #10
0
 /**
  * Adds a recipient in the SendGrid MC contact db and adds it to the list
  *
  * @param   string $email          The email of the recipient
  * @param   string $first_name     The first name of the recipient
  * @param   string $last_name      The last name of the recipient
  *
  * @return  bool   True if successful, false otherwise.
  */
 public static function create_and_add_recipient_to_list($email, $first_name = '', $last_name = '')
 {
     $list_id = Sendgrid_Tools::get_mc_list_id();
     if (false == $list_id) {
         return false;
     }
     $recipient_id = Sendgrid_NLVX::add_recipient($email, $first_name, $last_name);
     if (false == $recipient_id) {
         return false;
     }
     return Sendgrid_NLVX::add_recipient_to_list($recipient_id, $list_id);
 }
コード例 #11
0
 /**
  * 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';
 }
コード例 #12
0
 /**
  * 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');
 }
コード例 #13
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())
 {
     $sendgrid = new SendGrid(Sendgrid_Tools::get_username(), Sendgrid_Tools::get_password());
     $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();
     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;
                     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 Smtp(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;
 }
コード例 #14
0
<div class="wrap clearfix" id="sendgrid-statistics-page">
  <div class="pull-left sendgrid-statistics-header">
    <div id="icon-sendgrid" class="icon32"><br></div>
    <h2 id="sendgrid-wordpress-statistics-header" class="sendgrid-statistics-header-toggle">SendGrid Wordpress Statistics</h2>
    <h2 id="sendgrid-general-statistics-header" class="sendgrid-statistics-header-toggle" style="display: none;">SendGrid General Statistics</h2>
    <a href="https://app.sendgrid.com/statistics" target="_blank" class="more-statistics">SendGrid Portal</a>
  </div>
  <div class="pull-right sendgrid-statistics-change-type">
    <select id="sendgrid-statistics-change-type">
      <option value="general">General statistics</option>
      <option value="wordpress" selected="selected">Wordpress statistics</option>
      <?php 
$categories = Sendgrid_Tools::get_categories_array();
?>
      <?php 
if (is_array($categories) and count($categories) > 0) {
    ?>
      <optgroup label="Categories:">
        <?php 
    foreach ($categories as $cateogry) {
        ?>
        <option value="<?php 
        echo $cateogry;
        ?>
"><?php 
        echo $cateogry;
        ?>
</option>
        <?php 
    }
    ?>
コード例 #15
0
 private static function send_test_email($params)
 {
     $to = $params['sendgrid_to'];
     if (!Sendgrid_Tools::is_valid_email($to)) {
         return array('message' => 'Email address in field "To" is not valid.', 'status' => 'error', 'error_type' => 'sending');
     }
     $subject = stripslashes($params['sendgrid_subj']);
     $body = stripslashes($params['sendgrid_body']);
     $headers = $params['sendgrid_headers'];
     if (!Sendgrid_Tools::valid_emails_in_headers($headers)) {
         return array('message' => 'One or more email addresses in field "headers" are not valid.', 'status' => 'error', 'error_type' => 'sending');
     }
     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 (true === $sent) {
         return array('message' => 'Email was sent.', 'status' => 'updated');
     }
     return array('message' => 'Email wasn\'t sent.', 'status' => 'error', 'error_type' => 'sending');
 }
コード例 #16
0
 /**
  * Return categories array
  *
  * @return array categories
  */
 public static function get_categories_array()
 {
     $categories = Sendgrid_Tools::get_categories();
     if (strlen(trim($categories))) {
         return explode(',', $categories);
     }
     return array();
 }
コード例 #17
0
 /**
  * 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' == get_option('sendgrid_api')) {
                 $sent = json_decode($sent);
                 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' == get_option('sendgrid_api')) {
                 if (true === $sent) {
                     $message = 'Email sent.';
                     $status = 'updated';
                 } else {
                     $message = 'Email not sent. ' . $sent;
                     $status = 'error';
                 }
             }
         } else {
             $message = 'Options saved.';
             $status = 'updated';
             $user = $_POST['sendgrid_user'];
             update_option('sendgrid_user', $user);
             $password = $_POST['sendgrid_pwd'];
             update_option('sendgrid_pwd', $password);
             $method = $_POST['sendgrid_api'];
             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';
                 update_option('sendgrid_api', 'api');
             } else {
                 update_option('sendgrid_api', $method);
             }
             $name = $_POST['sendgrid_name'];
             update_option('sendgrid_from_name', $name);
             $email = $_POST['sendgrid_email'];
             update_option('sendgrid_from_email', $email);
             $reply_to = $_POST['sendgrid_reply_to'];
             update_option('sendgrid_reply_to', $reply_to);
             $categories = $_POST['sendgrid_categories'];
             update_option('sendgrid_categories', $categories);
         }
     }
     $user = get_option('sendgrid_user');
     $password = get_option('sendgrid_pwd');
     $method = get_option('sendgrid_api');
     $name = get_option('sendgrid_from_name');
     $email = get_option('sendgrid_from_email');
     $reply_to = get_option('sendgrid_reply_to');
     $categories = get_option('sendgrid_categories');
     $valid_credentials = false;
     if ($user and $password) {
         if (in_array('curl', get_loaded_extensions())) {
             $valid_credentials = Sendgrid_Tools::check_username_password($user, $password);
             if (!$valid_credentials) {
                 $message = 'Invalid username/password';
                 $status = 'error';
             }
         } else {
             $message = 'You must have PHP-curl extension enabled';
             $status = 'error';
         }
     }
     require_once dirname(__FILE__) . '/../view/sendgrid_settings.php';
 }
コード例 #18
0
 /**
  * Method that displays the subscription form
  *
  * @return  void
  */
 private function display_form()
 {
     echo '<form method="post" id="sendgrid_mc_email_form" class="mc_email_form" action="#sendgrid_mc_email_subscribe">';
     if ('true' == Sendgrid_Tools::get_mc_opt_incl_fname_lname()) {
         if ('true' == Sendgrid_Tools::get_mc_opt_req_fname_lname()) {
             echo '<div class="sendgrid-mc-field">';
             echo '<label for="sendgrid_mc_first_name">First Name<sup>*</sup> : </label>';
             echo '<input id="sendgrid_mc_first_name" name="sendgrid_mc_first_name" type="text" value="" required/>';
             echo '</div>';
             echo '<div class="sendgrid-mc-field">';
             echo '<label for="sendgrid_mc_last_name">Last Name<sup>*</sup> : </label>';
             echo '<input id="sendgrid_mc_last_name" name="sendgrid_mc_last_name" type="text" value="" required/>';
             echo '</div>';
         } else {
             echo '<div class="sendgrid-mc-field">';
             echo '<label for="sendgrid_mc_first_name">First Name : </label>';
             echo '<input id="sendgrid_mc_first_name" name="sendgrid_mc_first_name" type="text" value=""/>';
             echo '</div>';
             echo '<div class="sendgrid-mc-field">';
             echo '<label for="sendgrid_mc_last_name">Last Name : </label>';
             echo '<input id="sendgrid_mc_last_name" name="sendgrid_mc_last_name" type="text" value=""/>';
             echo '</div>';
         }
     }
     echo '<div class="sendgrid-mc-field">';
     echo '<label for="sendgrid_mc_email">Email<sup>*</sup> :&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </label>';
     echo '<input id="sendgrid_mc_email" name="sendgrid_mc_email"  value="" required/>';
     echo '</div>';
     echo '<div class="sendgrid-mc-button">';
     echo '<input type="submit" id="sendgrid_mc_email_submit" value="Subscribe" />';
     echo '</div>';
     echo '</form>';
 }
コード例 #19
0
    return;
}
// Load plugin files
require_once plugin_dir_path(__FILE__) . 'lib/class-sendgrid-tools.php';
require_once plugin_dir_path(__FILE__) . 'lib/class-sendgrid-settings.php';
require_once plugin_dir_path(__FILE__) . 'lib/class-sendgrid-mc-optin.php';
require_once plugin_dir_path(__FILE__) . 'lib/class-sendgrid-statistics.php';
require_once plugin_dir_path(__FILE__) . 'lib/sendgrid/sendgrid-wp-mail.php';
require_once plugin_dir_path(__FILE__) . 'lib/class-sendgrid-nlvx-widget.php';
require_once plugin_dir_path(__FILE__) . 'lib/class-sendgrid-virtual-pages.php';
require_once plugin_dir_path(__FILE__) . 'lib/class-sendgrid-filters.php';
// Widget Registration
if ('true' == Sendgrid_Tools::get_mc_auth_valid()) {
    add_action('widgets_init', 'register_sendgrid_widgets');
} else {
    add_action('widgets_init', 'unregister_sendgrid_widgets');
}
// Widget notice dismissed
if (isset($_POST['sg_dismiss_widget_notice'])) {
    Sendgrid_Tools::set_mc_widget_notice_dismissed('true');
}
// Display widget notice
if ('true' != Sendgrid_Tools::get_mc_widget_notice_dismissed()) {
    add_action('admin_notices', 'sg_subscription_widget_admin_notice');
}
// Initialize SendGrid Settings
new Sendgrid_Settings(plugin_basename(__FILE__));
// Initialize SendGrid Statistics
new Sendgrid_Statistics();
// Initialize SendGrid Filters
new Sendgrid_Filters();
コード例 #20
0
 /**
  * Returns true if all the emails in the headers are valid, false otherwise
  *
  * @param   mixed  $headers   string or array of headers
  *
  * @return  bool
  */
 public static function valid_emails_in_headers($headers)
 {
     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;
     }
     // If it's actually got contents
     if (!empty($tempheaders)) {
         // Iterate through the raw headers
         foreach ((array) $tempheaders as $header) {
             if (false === strpos($header, ':')) {
                 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, '<')) {
                         $from_email = substr($content, strpos($content, '<') + 1);
                         $from_email = str_replace('>', '', $from_email);
                         $from_email = trim($from_email);
                     } else {
                         $from_email = trim($content);
                     }
                     if (!Sendgrid_Tools::is_valid_email($from_email)) {
                         return false;
                     }
                     break;
                 case 'cc':
                     $cc = explode(',', $content);
                     foreach ($cc as $key => $recipient) {
                         if (!Sendgrid_Tools::is_valid_email(trim($recipient))) {
                             return false;
                         }
                     }
                     break;
                 case 'bcc':
                     $bcc = explode(',', $content);
                     foreach ($bcc as $key => $recipient) {
                         if (!Sendgrid_Tools::is_valid_email(trim($recipient))) {
                             return false;
                         }
                     }
                     break;
                 case 'reply-to':
                     if (!Sendgrid_Tools::is_valid_email($content)) {
                         return false;
                     }
                     break;
                 case 'x-smtpapi-to':
                     $xsmtpapi_tos = explode(',', trim($content));
                     foreach ($xsmtpapi_tos as $xsmtpapi_to) {
                         if (!Sendgrid_Tools::is_valid_email($xsmtpapi_to)) {
                             return false;
                         }
                     }
                     break;
                 default:
                     break;
             }
         }
     }
     return true;
 }