/**
  * 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(get_option('sendgrid_user'), get_option('sendgrid_pwd'));
     $mail = new SendGrid\Mail();
     $method = get_option('sendgrid_api');
     // 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 = get_option('sendgrid_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(get_option('sendgrid_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)->setCategory(SENDGRID_CATEGORY)->setFrom($from_email);
     $categories = explode(',', get_option('sendgrid_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(get_option('sendgrid_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 $sendgrid->web->send($mail);
         } elseif ('smtp' == $method) {
             if (class_exists('Swift')) {
                 return $sendgrid->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;
 }
Ejemplo n.º 2
0
 public function testSendResponse()
 {
     $sendgrid = new SendGrid("foo", "bar");
     $message = new SendGrid\Mail();
     $message->setFrom('*****@*****.**')->setSubject('foobar subject')->setText('foobar text')->addTo('*****@*****.**');
     $response = $sendgrid->web->send($message);
     $this->assertEquals("{\"message\": \"error\", \"errors\": [\"Bad username / password\"]}", $response);
 }
 public function testAddToWithDeprectedMailClass()
 {
     $mail = new SendGrid\Mail();
     $mail->addTo('*****@*****.**');
     $this->assertEquals(array('*****@*****.**'), $mail->getTos());
     $mail->addTo('*****@*****.**');
     $this->assertEquals(array('*****@*****.**', '*****@*****.**'), $mail->getTos());
 }
Ejemplo n.º 4
0
 public function testEmailTextBodyAttachments()
 {
     $_mapToSwift = new ReflectionMethod('SendGrid\\Smtp', '_mapToSwift');
     $_mapToSwift->setAccessible(true);
     $sendgrid = new SendGrid("foo", "bar");
     $message = new SendGrid\Mail();
     $message->setFrom('*****@*****.**')->setFromName('John Doe')->setSubject('foobar subject')->setText('foobar text')->addTo('*****@*****.**');
     $swift_message = $_mapToSwift->invoke($sendgrid->smtp, $message);
     $this->assertEquals(count($swift_message->getChildren()), 0);
 }
Ejemplo n.º 5
0
 public function testConstruction()
 {
     $sendgrid = new SendGrid("foo", "bar");
     $smtp = $sendgrid->smtp;
     $this->assertEquals(new SendGrid\Smtp("foo", "bar"), $smtp);
     $message = new SendGrid\Mail();
     $message->setFrom('*****@*****.**')->setSubject('foobar subject')->setText('foobar text')->addTo('*****@*****.**')->addAttachment("mynewattachment.jpg");
     $this->assertEquals(get_class($smtp), 'SendGrid\\Smtp');
     $this->setExpectedException('Swift_TransportException');
     $smtp->send($message);
 }
Ejemplo n.º 6
0
 public static function SendEmail($sTo, $sSubject, $sTemplate, $sVariable)
 {
     global $sPanelURL;
     global $sPanelMode;
     global $sTitle;
     global $locale;
     $sEmail = Templater::AdvancedParse('/email/' . $sTemplate, $locale->strings, array("EmailVars" => array("entry" => $sVariable)));
     $sMail = Core::GetSetting('mail');
     $sMail = $sMail->sValue;
     if ($sMail == 1) {
         $sSendGridUser = Core::GetSetting('mail_username');
         $sSendGridPass = Core::GetSetting('mail_password');
         $sSendGridUser = $sSendGridUser->sValue;
         $sSendGridPass = $sSendGridPass->sValue;
         if (!empty($sSendGridUser) && !empty($sSendGridPass)) {
             $sGrid = new SendGrid($sSendGridUser, $sSendGridPass);
             $sMail = new SendGrid\Mail();
             $sMail->addTo($sTo)->setFrom("noreply@{$sPanelURL->sValue}")->setSubject($sSubject)->setHtml($sEmail);
             $sGrid->web->send($sMail);
             return true;
         } else {
             return $sReturn = array("content" => "Unfortunately Send Grid is incorrectly configured!");
         }
     } elseif ($sMail == 2) {
         $sMandrillUser = Core::GetSetting('mail_username');
         $sMandrillPass = Core::GetSetting('mail_password');
         $sMandrillUser = $sMandrillUser->sValue;
         $sMandrillPass = $sMandrillPass->sValue;
         try {
             $sMandrill = new Mandrill($sMandrillPass);
             $sMessage = array('html' => $sEmail, 'subject' => $sSubject, 'from_email' => "noreply@{$sPanelURL->sValue}", 'from_name' => "{$sTitle->sValue}", 'to' => array(array('email' => $sTo, 'type' => 'to')), 'important' => true, 'track_opens' => null, 'track_clicks' => null, 'auto_text' => null, 'auto_html' => null, 'inline_css' => null, 'url_strip_qs' => null, 'preserve_recipients' => null, 'view_content_link' => null, 'tracking_domain' => null, 'signing_domain' => null, 'return_path_domain' => null, 'merge' => true);
             $sAsync = false;
             $sIPPool = 'Main Pool';
             $sSendAt = NULL;
             $sResult = $sMandrill->messages->send($sMessage, $sAsync, $sIPPool, $sSendAt);
         } catch (Exception $e) {
             return $sReturn = array("content" => "Mandril Error: {$e}");
         }
         return true;
     } else {
         $sHeaders = "MIME-Version: 1.0" . "\r\n";
         $sHeaders .= "Content-type:text/html;charset=iso-8859-1" . "\r\n";
         $sHeaders .= 'From: <noreply@' . $sPanelURL->sValue . '>' . "\r\n";
         if (mail($sTo, $sSubject, $sEmail, $sHeaders)) {
             return true;
         } else {
             return $sReturn = array("content" => "Unfortunatly the email failed to send, please check your server's sendmail settings.");
         }
     }
 }
Ejemplo n.º 7
0
 /**
  * https://github.com/sendgrid/sendgrid-php/blob/master/examples/helpers/mail/example.php
  */
 function send(array $params = [], &$error_message = '')
 {
     require_php_lib('sendgrid');
     $error_message = null;
     try {
         $sg = new \SendGrid($this->key);
         $from = new SendGrid\Email($params['name_from'], $params['email_from']);
         $subject = $params['subject'];
         $to = new SendGrid\Email($params['name_to'], $params['email_to']);
         $text_content = new SendGrid\Content('text/plain', $params['text']);
         $mail = new SendGrid\Mail($from, $subject, $to, $text_content);
         $html_content = new SendGrid\Content('text/html', $params['html']);
         $mail->addContent($html_content);
         if ($params['reply_to']) {
             $reply_to = new SendGrid\ReplyTo($params['reply_to']);
             $mail->setReplyTo($reply_to);
         }
         if ($this->PARENT->ALLOW_ATTACHMENTS) {
             foreach ((array) $params['attaches'] as $name => $file) {
                 $attachment = new SendGrid\Attachment();
                 $attachment->setContent(file_get_contents($file));
                 $attachment->setFilename($name);
                 $mail->addAttachment($attachment);
             }
         }
         $response = $sg->client->mail()->send()->post($mail);
     } catch (Exception $e) {
         $error_message = 'A sendgrid error occurred: ' . get_class($e) . ' - ' . $e->getMessage();
     }
     if (@$error_message && DEBUG_MODE && $this->PARENT->MAIL_DEBUG_ERROR) {
         trigger_error($error_message, E_USER_WARNING);
     }
     if (is_callable($params['on_after_send'])) {
         $callback = $params['on_after_send'];
         $callback($mail, $params, $result, $error_message, $this->PARENT);
     }
     $this->PARENT->_last_error_message = $error_message;
     return $response && !$error_message ? true : false;
 }
 function sendPlain($to, $from, $subject, $plainContent, $attachedFiles = false, $customheaders = false)
 {
     $mail = new SendGrid\Mail(SENDGRIDMAILER_USERNAME, SENDGRIDMAILER_PASSWORD);
     $sendgrid = $this->instantiate();
     if (!$from) {
         $from = SENDGRIDMAILER_MAIL;
     }
     $from_name = preg_replace('/"*(.*)"*\\<(.*)\\>/i', '$1', $from);
     if ($from_name) {
         $from = preg_replace('/"*(.*)"*\\<(.*)\\>/i', '$2', $from);
     }
     $mail->addTo($to)->setFromName($from_name)->setFrom($from)->setSubject($subject)->setText($plainContent);
     $response = $sendgrid->web->send($mail);
     SS_Log::log("{$to} | {$from} | {$from_name} | " . json_encode($response), SS_Log::INFO);
     if ($response->message == "error") {
         return false;
     }
     if ($response->message == "success") {
         return true;
     }
     return false;
 }
Ejemplo n.º 9
0
function _cdashsendgrid($to, $subject, $body)
{
    global $CDASH_EMAIL_FROM, $CDASH_EMAIL_REPLY, $CDASH_SENDGRID_API_KEY;
    $sg = new \SendGrid($CDASH_SENDGRID_API_KEY);
    $mail = new SendGrid\Mail();
    $mail->setFrom(new SendGrid\Email(null, $CDASH_EMAIL_FROM));
    $mail->setSubject($subject);
    $mail->setReplyTo(new SendGrid\Email(null, $CDASH_EMAIL_REPLY));
    $mail->addContent(new SendGrid\Content('text/plain', $body));
    foreach (explode(', ', $to) as $recipient) {
        $personalization = new SendGrid\Personalization();
        $personalization->addTo(new SendGrid\Email(null, $recipient));
        $mail->addPersonalization($personalization);
    }
    $response = $sg->client->mail()->send()->post($mail);
    if ($response->statusCode() === 202) {
        return true;
    } else {
        add_log('Failed to send email via sendgrid status code: ' . $response->statusCode(), '_cdashsendgrid', LOG_ERR);
        return false;
    }
}
Ejemplo n.º 10
0
 public function testUseHeaders()
 {
     $mail = new SendGrid\Mail();
     $mail->addTo('*****@*****.**')->addBcc('*****@*****.**')->setFrom('*****@*****.**')->setSubject('Subject')->setHtml('Hello You');
     $this->assertFalse($mail->useHeaders());
     $mail->removeBcc('*****@*****.**');
     $this->assertTrue($mail->useHeaders());
     $mail->addCc('*****@*****.**');
     $this->assertFalse($mail->useHeaders());
     $mail->removeCc('*****@*****.**')->setRecipientsinHeader(true);
     $this->assertTrue($mail->useHeaders());
     $mail->setRecipientsinHeader(false);
     $this->assertFalse($mail->useHeaders());
     $mail->addBcc('*****@*****.**')->addAttachment('attachment.ext');
     $this->assertTrue($mail->useHeaders());
 }
Ejemplo n.º 11
0
 /**
  *
  * @param $tos an array containing to addresses, is required.
  * @param from : sender's email address, is required
  * @param fromName : human friendly sender's name 
  * @param subject required
  * @param text - text content of mail, is required
  * @param html - html content of mail, is required 
  *
  * @return return value of zero indicates success
  * A non zero return value indicates failure.
  *
  */
 static function sendViaWeb($tos, $from, $fromName, $subject, $text, $html)
 {
     $mode = Config::getInstance()->get_value("sendgrid.mail.mode");
     if (strcmp($mode, "production") != 0) {
         $recipients = implode($tos, ",");
         $message = sprintf("\n\n  **** mail to %s ****  \n %s \n\n", $recipients, $text);
         Logger::getInstance()->info($message);
         return;
     }
     $login = Config::getInstance()->get_value("sendgrid.login");
     $password = Config::getInstance()->get_value("sendgrid.password");
     if (empty($login) || empty($password) || empty($tos) || empty($from) || empty($text) || empty($html)) {
         //bad input
         return self::BAD_INPUT_ERROR;
     }
     // SendGrid PHP LIB path should be included before
     // webgloo libraries for this to work
     $sendgrid = new \SendGrid($login, $password);
     $mail = new \SendGrid\Mail();
     $fromName = empty($fromName) ? $from : $fromName;
     $mail->setTos($tos)->setFrom($from)->setFromName($fromName)->setSubject($subject)->setText($text)->setHtml($html);
     /* 
      * response handling.
      * CURLOPT_RETURNTRANSFER option is set in SendGrid/Web#send()
      * that method will return the result on success, FALSE on failure
      *
      * @see http://docs.sendgrid.com/documentation/api/web-api/#responseserror
      * {"message":"error","errors":[]}
      *
      * @see http://docs.sendgrid.com/documentation/api/web-api/#responsessuccess
      * {"message":"success"}
      *
      */
     $response = $sendgrid->web->send($mail);
     if ($response === FALSE) {
         //problem with curl transport
         $message = " Error communicating with sendgrid mail endpoint";
         Logger::getInstance()->error($message);
         return self::CURL_ERROR;
     }
     //parse response json
     $responseObj = json_decode($response);
     if (!is_object($responseObj) || !property_exists($responseObj, "message")) {
         //bad json from sendgrid
         $message = sprintf("Sendgrid mail api response :: [[%s]] is malformed", $response);
         Logger::getInstance()->error($message);
         return self::MALFORMED_RESPONSE;
     }
     $message = $responseObj->message;
     if (strcasecmp($message, "error") == 0) {
         //sendgrid returned error.
         //get errors array
         $message = " Sendgrid mail api returned error";
         Logger::getInstance()->error($message);
         foreach ($responseObj->errors as $error) {
             Logger::getInstance()->error($error);
         }
         return self::SENDGRID_ERROR;
     }
     if (strcasecmp($message, "success") == 0) {
         //success
         return 0;
     }
     return self::UNKNOWN_ERROR;
 }
Ejemplo n.º 12
0
    include 'email_validation.php';
    $name = stripslashes($_POST['name']);
    $email = trim($_POST['email']);
    $subject = stripslashes($_POST['subject']);
    $message = stripslashes($_POST['message']);
    $error = '';
    // Check name
    if (!$name) {
        $error .= 'Please enter your name.<br />';
    }
    // Check email
    if (!$email) {
        $error .= 'Please enter an e-mail address.<br />';
    }
    if ($email && !ValidateEmail($email)) {
        $error .= 'Please enter a valid e-mail address.<br />';
    }
    // Check message (length)
    if (!$message || strlen($message) < 10) {
        $error .= "Please enter your message. It should have at least 10 characters.<br />";
    }
    if (!$error) {
        $mail = new SendGrid\Mail();
        $mail->addTo('*****@*****.**')->setFrom($email)->setFromName($name)->setSubject($subject)->setText($message);
        if ($sendgrid->smtp->send($mail)) {
            echo 'OK';
        }
    } else {
        echo '<div class="notification_error">' . $error . '</div>';
    }
}
     * - Upload it to a web host and load mywebhost.com/sendnotifications.php 
     *   in a web browser.
     * - Download a local server like WAMP, MAMP or XAMPP. Point the web root 
     *   directory to the folder containing this file, and load 
     *   localhost:8888/sendnotifications.php in a web browser.
     */
    // Step 1: Download the Twilio-PHP library from twilio.com/docs/libraries,
    // and move it into the folder containing this file.
    require "Services/Twilio.php";
    // Step 2: set our AccountSid and AuthToken from www.twilio.com/user/account
    $AccountSid = "ACeca28c70e4a3d5d4bea2e1be2f608876";
    $AuthToken = "474465c0bacbb4f013c39ef1da106cc6";
    // Step 3: instantiate a new Twilio Rest Client
    $client = new Services_Twilio($AccountSid, $AuthToken);
    // Step 4: make an array of people we know, to send them a message.
    // Feel free to change/add your own phone number and name here.
    $people = array($phone => $name);
    // Step 5: Loop over all our friends. $number is a phone number above, and
    // $name is the name next to it
    foreach ($people as $number => $name) {
        $sms = $client->account->sms_messages->create("408-514-5160", $number, "Hey " . $name . ", " . $descript . "\n-From " . $user);
    }
}
include 'sendgrid-php-master/SendGrid_loader.php';
$sendgrid = new SendGrid('YeshRam', 'yeshrameshiscool');
$mail = new SendGrid\Mail();
$mail->addTo($email)->setFrom($yremail)->setSubject('Message From ' . $user . ' with TwilioAndSendgrid Script')->setText($descript)->setHtml('<strong>' . $descript . '</strong>');
$sendgrid->web->send($mail);
?>
	</body>
</html>