This documentation provides examples for specific use cases. Please open an issue or make a pull request for any use cases you would like us to document here. Thank you!
- Table of Contents
- Attachments
- Attaching a File from Box
- Kitchen Sink - an example with all settings used
- Send an Email to a Single Recipient
- Send an Email to Multiple Recipients
- Send Multiple Emails to Multiple Recipients
- Transactional Templates
- Legacy Templates
- Send a SMS Message
- How to Setup a Domain Authentication
- How to View Email Statistics
- Deploying to Heroku
- Google App Engine Installation
Here is an example of attaching a text file to your email, assuming that text file my_file.txt
is located in the same directory. You can use the addAttachments
method to add an array attachments.
<?php
require 'vendor/autoload.php'; // If you're using Composer (recommended)
// Comment out the above line if not using Composer
// require("<PATH TO>/sendgrid-php.php");
// If not using Composer, uncomment the above line and
// download sendgrid-php.zip from the latest release here,
// replacing <PATH TO> with the path to the sendgrid-php.php file,
// which is included in the download:
// https://github.com/sendgrid/sendgrid-php/releases
$email = new \SendGrid\Mail\Mail();
$email->setFrom("[email protected]", "Example User");
$email->setSubject("Sending with Twilio SendGrid is Fun");
$email->addTo("[email protected]", "Example User");
$email->addContent("text/plain", "and easy to do anywhere, even with PHP");
$email->addContent(
"text/html", "<strong>and easy to do anywhere, even with PHP</strong>"
);
$file_encoded = base64_encode(file_get_contents('my_file.txt'));
$email->addAttachment(
$file_encoded,
"application/text",
"my_file.txt",
"attachment"
);
$sendgrid = new \SendGrid(getenv('SENDGRID_API_KEY'));
try {
$response = $sendgrid->send($email);
print $response->statusCode() . "\n";
print_r($response->headers());
print $response->body() . "\n";
} catch (Exception $e) {
echo 'Caught exception: '. $e->getMessage(). "\n";
}
You can attach a file from Box to your emails. Because there is no official Box SDK for PHP, this example requires firebase/php-jwt to generate a JSON Web Token assertion. Before using this code, you should set up a JWT application on Box. For more information about authenticating with JWT, see this page.
After completing the setup tutorial, you will want to make sure your app’s configuration settings have at least the following options enabled:
Application Access
- Enterprise
Application Scopes
- Read all files and folders stored in Box
- Read and write all files and folders stored in Box
- Manage users
Advanced Features
- Perform Actions as Users
Remember to reauthorize your app here after making any changes to your app’s JWT scopes.
<?php
// This example assumes you're using Composer for both
// the sendgrid-php library and php-jwt.
require 'vendor/autoload.php';
use \Firebase\JWT\JWT;
$fileOwner = '[email protected]'; // Replace with the email you use to sign in to Box
$filePath = '/path/to/file.txt'; // Replace with the path on Box to the file you will attach
$boxConfig = json_decode(file_get_contents('/path/to/boxConfig.json')); // Replace with the path to your Box config file. Keep it in a secure location!
$path = explode('/', $filePath);
if (!empty($path[0])){
array_unshift($path, ''); // Adds a blank element to beginning of array in case $filePath does not have a preceding forward slash.
}
$header = array(
'alg' => 'RS256',
'typ' => 'JWT',
'kid' => $boxConfig->boxAppSettings->appAuth->publicKeyID
);
$claims = array(
'iss' => $boxConfig->boxAppSettings->clientID,
'sub' => $boxConfig->enterpriseID,
'box_sub_type' => 'enterprise',
'aud' => 'https://api.box.com/oauth2/token',
'jti' => bin2hex(openssl_random_pseudo_bytes(16)),
'exp' => time() + 50
);
$privateKey = openssl_get_privatekey($boxConfig->boxAppSettings->appAuth->privateKey, $boxConfig->boxAppSettings->appAuth->passphrase);
$assertion = JWT::encode($claims, $privateKey, 'RS256', null, $header);
// Get access token
$url = 'https://api.box.com/oauth2/token';
$data = array(
'grant_type' => 'urn:ietf:params:oauth:grant-type:jwt-bearer',
'client_id' => $boxConfig->boxAppSettings->clientID,
'client_secret' => $boxConfig->boxAppSettings->clientSecret,
'assertion' => $assertion
);
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data));
$result = json_decode(curl_exec($ch));
curl_close($ch);
$accessToken = $result->access_token;
// Get user ID
$url = 'https://api.box.com/2.0/users';
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Authorization: Bearer '.$accessToken
));
$result = json_decode(curl_exec($ch));
curl_close($ch);
foreach ($result->entries as $entry){
if ($entry->login === $fileOwner){
$userId = $entry->id;
}
}
// Get file ID
$url = 'https://api.box.com/2.0/search';
$data = array(
'query' => urlencode(end($path))
);
$urlEncoded = http_build_query($data);
$ch = curl_init($url.'?'.$urlEncoded);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Authorization: Bearer '.$accessToken,
'As-User: '.$userId
));
$result = json_decode(curl_exec($ch));
curl_close($ch);
foreach ($result->entries as $entry){
if (count($entry->path_collection->entries) === count($path) -1){
if (count($path) > 2){
// File is located in a subdirectory.
for ($i = 1; $i < (count($path) - 1); $i++){
if ($path[$i] === $entry->path_collection->entries[$i]->name){
$fileId = $entry->id;
}
}
} else {
// File is located in default directory.
$fileId = $entry->id;
}
}
}
if (isset($fileId) && isset($userId)){
// Get file data
$url = 'https://api.box.com/2.0/files/'.$fileId.'/content';
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Authorization: Bearer '.$accessToken,
'As-User: '.$userId
));
$result = curl_exec($ch);
$contentType = curl_getinfo($ch, CURLINFO_CONTENT_TYPE);
curl_close($ch);
$attachmentFilename = end($path);
$attachmentContent = base64_encode($result);
$attachmentContentType = $contentType;
$email = new \SendGrid\Mail\Mail();
$email->setFrom("[email protected]", "Example User");
$email->setSubject("Attaching a File from Box");
$email->addTo("[email protected]", "Example User");
$email->addContent("text/plain", "See attached file from Box.");
$email->addContent(
"text/html", "<strong>See attached file from Box.</strong>"
);
$attachment = new \SendGrid\Mail\Attachment();
$attachment->setContent($attachmentContent);
$attachment->setType($attachmentContentType);
$attachment->setFilename($attachmentFilename);
$attachment->setDisposition("attachment");
$attachment->setContentId($attachmentFilename); // Only used if disposition is set to inline
$email->addAttachment($attachment);
$sendgrid = new \SendGrid(getenv('SENDGRID_API_KEY'));
try {
$response = $sendgrid->send($email);
print $response->statusCode() . "\n";
print_r($response->headers());
print $response->body() . "\n";
} catch (Exception $e) {
echo 'Caught exception: '. $e->getMessage() ."\n";
}
} else {
echo "Error: file or owner could not be located\n";
}
<?php
require 'vendor/autoload.php'; // If you're using Composer (recommended)
// Comment out the above line if not using Composer
// require("<PATH TO>/sendgrid-php.php");
// If not using Composer, uncomment the above line and
// download sendgrid-php.zip from the latest release here,
// replacing <PATH TO> with the path to the sendgrid-php.php file,
// which is included in the download:
// https://github.com/sendgrid/sendgrid-php/releases
$email = new \SendGrid\Mail\Mail();
// For a detailed description of each of these settings,
// please see the
// [documentation](https://sendgrid.com/docs/API_Reference/api_v3.html).
$email->setSubject("Sending with Twilio SendGrid is Fun 2");
$email->addTo("[email protected]", "Example User");
$email->addTo("[email protected]", "Example User1");
$toEmails = [
"[email protected]" => "Example User2",
"[email protected]" => "Example User3"
];
$email->addTos($toEmails);
$email->addCc("[email protected]", "Example User4");
$ccEmails = [
"[email protected]" => "Example User5",
"[email protected]" => "Example User6"
];
$email->addCcs($ccEmails);
$email->addBcc("[email protected]", "Example User7");
$bccEmails = [
"[email protected]" => "Example User8",
"[email protected]" => "Example User9"
];
$email->addBccs($bccEmails);
$email->addHeader("X-Test1", "Test1");
$email->addHeader("X-Test2", "Test2");
$headers = [
"X-Test3" => "Test3",
"X-Test4" => "Test4",
];
$email->addHeaders($headers);
$email->addDynamicTemplateData("subject1", "Example Subject 1");
$email->addDynamicTemplateData("name1", "Example Name 1");
$email->addDynamicTemplateData("city1", "Denver");
$substitutions = [
"subject2" => "Example Subject 2",
"name2" => "Example Name 2",
"city2" => "Orange"
];
$email->addDynamicTemplateDatas($substitutions);
$email->addCustomArg("marketing1", "false");
$email->addCustomArg("transactional1", "true");
$email->addCustomArg("category", "name");
$customArgs = [
"marketing2" => "true",
"transactional2" => "false",
"category" => "name"
];
$email->addCustomArgs($customArgs);
$email->setSendAt(1461775051);
// You can add a personalization index or personalization parameter to the above
// methods to add and update multiple personalizations. You can learn more about
// personalizations [here](https://sendgrid.com/docs/Classroom/Send/v3_Mail_Send/personalizations.html).
// The values below this comment are global to entire message
$email->setFrom("[email protected]", "DX");
$email->setGlobalSubject("Sending with Twilio SendGrid is Fun and Global 2");
$email->addContent(
"text/plain",
"and easy to do anywhere, even with PHP"
);
$email->addContent(
"text/html",
"<strong>and easy to do anywhere, even with PHP</strong>"
);
$contents = [
"text/calendar" => "Party Time!!",
"text/calendar2" => "Party Time 2!!"
];
$email->addContents($contents);
$email->addAttachment(
"base64 encoded content1",
"image/png",
"banner.png",
"inline",
"Banner"
);
$attachments = [
[
"base64 encoded content2",
"banner2.jpeg",
"image/jpeg",
"attachment",
"Banner 3"
],
[
"base64 encoded content3",
"banner3.gif",
"image/gif",
"inline",
"Banner 3"
]
];
$email->addAttachments($attachments);
$email->setTemplateId("d-13b8f94fbcae4ec6b75270d6cb59f932");
$email->addGlobalHeader("X-Day", "Monday");
$globalHeaders = [
"X-Month" => "January",
"X-Year" => "2017"
];
$email->addGlobalHeaders($globalHeaders);
$email->addSection("%section1%", "Substitution for Section 1 Tag");
$sections = [
"%section3%" => "Substitution for Section 3 Tag",
"%section4%" => "Substitution for Section 4 Tag"
];
$email->addSections($sections);
$email->addCategory("Category 1");
$categories = [
"Category 2",
"Category 3"
];
$email->addCategories($categories);
$email->setBatchId(
"MWQxZmIyODYtNjE1Ni0xMWU1LWI3ZTUtMDgwMDI3OGJkMmY2LWEzMmViMjYxMw"
);
$email->setReplyTo("[email protected]", "DX Team Reply To 2");
$email->setAsm(1, [1, 2, 3, 4]);
$email->setIpPoolName("23");
// Mail Settings
$email->setBccSettings(true, "[email protected]");
$email->enableBypassListManagement();
//$email->disableBypassListManagement();
$email->setFooter(true, "Footer", "<strong>Footer</strong>");
$email->enableSandBoxMode();
//$email->disableSandBoxMode();
$email->setSpamCheck(true, 1, "http://mydomain.com");
// Tracking Settings
$email->setClickTracking(true, true);
$email->setOpenTracking(true, "--sub--");
$email->setSubscriptionTracking(
true,
"subscribe",
"<bold>subscribe</bold>",
"%%sub%%"
);
$email->setGanalytics(
true,
"utm_source",
"utm_medium",
"utm_term",
"utm_content",
"utm_campaign"
);
$sendgrid = new \SendGrid(getenv('SENDGRID_API_KEY'));
try {
$response = $sendgrid->send($email);
print $response->statusCode() . "\n";
print_r($response->headers());
print $response->body() . "\n";
} catch (Exception $e) {
echo 'Caught exception: '. $e->getMessage(). "\n";
}
OR
<?php
require 'vendor/autoload.php'; // If you're using Composer (recommended)
// Comment out the above line if not using Composer
// require("<PATH TO>/sendgrid-php.php");
// If not using Composer, uncomment the above line and
// download sendgrid-php.zip from the latest release here,
// replacing <PATH TO> with the path to the sendgrid-php.php file,
// which is included in the download:
// https://github.com/sendgrid/sendgrid-php/releases
$email = new \SendGrid\Mail\Mail();
// For a detailed description of each of these settings,
// please see the
// [documentation](https://sendgrid.com/docs/API_Reference/api_v3.html).
$email->setSubject(
new \SendGrid\Mail\Subject("Sending with Twilio SendGrid is Fun 2")
);
$email->addTo(new \SendGrid\Mail\To("[email protected]", "Example User"));
$email->addTo(new \SendGrid\Mail\To("[email protected]", "Example User1"));
$toEmails = [
new \SendGrid\Mail\To("[email protected]", "Example User2"),
new \SendGrid\Mail\To("[email protected]", "Example User3")
];
$email->addTos($toEmails);
$email->addCc(new \SendGrid\Mail\Cc("[email protected]", "Example User4"));
$ccEmails = [
new \SendGrid\Mail\Cc("[email protected]", "Example User5"),
new \SendGrid\Mail\Cc("[email protected]", "Example User6")
];
$email->addCcs($ccEmails);
$email->addBcc(
new \SendGrid\Mail\Bcc("[email protected]", "Example User7")
);
$bccEmails = [
new \SendGrid\Mail\Bcc("[email protected]", "Example User8"),
new \SendGrid\Mail\Bcc("[email protected]", "Example User9")
];
$email->addBccs($bccEmails);
$email->addHeader(new \SendGrid\Mail\Header("X-Test1", "Test1"));
$email->addHeader(new \SendGrid\Mail\Header("X-Test2", "Test2"));
$headers = [
new \SendGrid\Mail\Header("X-Test3", "Test3"),
new \SendGrid\Mail\Header("X-Test4", "Test4")
];
$email->addHeaders($headers);
$email->addDynamicTemplateData(
new \SendGrid\Mail\Substitution("subject1", "Example Subject 1")
);
$email->addDynamicTemplateData(
new \SendGrid\Mail\Substitution("name", "Example Name 1")
);
$email->addDynamicTemplateData(
new \SendGrid\Mail\Substitution("city1", "Denver")
);
$substitutions = [
new \SendGrid\Mail\Substitution("subject2", "Example Subject 2"),
new \SendGrid\Mail\Substitution("name2", "Example Name 2"),
new \SendGrid\Mail\Substitution("city2", "Orange")
];
$email->addDynamicTemplateDatas($substitutions);
$email->addCustomArg(new \SendGrid\Mail\CustomArg("marketing1", "false"));
$email->addCustomArg(new \SendGrid\Mail\CustomArg("transactional1", "true"));
$email->addCustomArg(new \SendGrid\Mail\CustomArg("category", "name"));
$customArgs = [
new \SendGrid\Mail\CustomArg("marketing2", "true"),
new \SendGrid\Mail\CustomArg("transactional2", "false"),
new \SendGrid\Mail\CustomArg("category", "name")
];
$email->addCustomArgs($customArgs);
$email->setSendAt(new \SendGrid\Mail\SendAt(1461775051));
// You can add a personalization index or personalization parameter to the above
// methods to add and update multiple personalizations. You can learn more about
// personalizations [here](https://sendgrid.com/docs/Classroom/Send/v3_Mail_Send/personalizations.html).
// The values below this comment are global to entire message
$email->setFrom(new \SendGrid\Mail\From("[email protected]", "DX"));
$email->setGlobalSubject(
new \SendGrid\Mail\Subject("Sending with Twilio SendGrid is Fun and Global 2")
);
$plainTextContent = new \SendGrid\Mail\PlainTextContent(
"and easy to do anywhere, even with PHP"
);
$htmlContent = new \SendGrid\Mail\HtmlContent(
"<strong>and easy to do anywhere, even with PHP</strong>"
);
$email->addContent($plainTextContent);
$email->addContent($htmlContent);
$contents = [
new \SendGrid\Mail\Content("text/calendar", "Party Time!!"),
new \SendGrid\Mail\Content("text/calendar2", "Party Time 2!!")
];
$email->addContents($contents);
$email->addAttachment(
new \SendGrid\Mail\Attachment(
"base64 encoded content1",
"image/png",
"banner.png",
"inline",
"Banner"
)
);
$attachments = [
new \SendGrid\Mail\Attachment(
"base64 encoded content2",
"banner2.jpeg",
"image/jpeg",
"attachment",
"Banner 3"
),
new \SendGrid\Mail\Attachment(
"base64 encoded content3",
"banner3.gif",
"image/gif",
"inline",
"Banner 3"
)
];
$email->addAttachments($attachments);
$email->setTemplateId(
new \SendGrid\Mail\TemplateId("d-13b8f94fbcae4ec6b75270d6cb59f932")
);
$email->addGlobalHeader(new \SendGrid\Mail\Header("X-Day", "Monday"));
$globalHeaders = [
new \SendGrid\Mail\Header("X-Month", "January"),
new \SendGrid\Mail\Header("X-Year", "2017")
];
$email->addGlobalHeaders($globalHeaders);
$email->addSection(
new \SendGrid\Mail\Section(
"%section1%",
"Substitution for Section 1 Tag"
)
);
$sections = [
new \SendGrid\Mail\Section(
"%section3%",
"Substitution for Section 3 Tag"
),
new \SendGrid\Mail\Section(
"%section4%",
"Substitution for Section 4 Tag"
)
];
$email->addSections($sections);
$email->addCategory(new \SendGrid\Mail\Category("Category 1"));
$categories = [
new \SendGrid\Mail\Category("Category 2"),
new \SendGrid\Mail\Category("Category 3")
];
$email->addCategories($categories);
$email->setBatchId(
new \SendGrid\Mail\BatchId(
"MWQxZmIyODYtNjE1Ni0xMWU1LWI3ZTUtMDgwMDI3OGJkMmY2LWEzMmViMjYxMw"
)
);
$email->setReplyTo(
new \SendGrid\Mail\ReplyTo(
"[email protected]",
"DX Team Reply To 2"
)
);
$asm = new \SendGrid\Mail\Asm(
new \SendGrid\Mail\GroupId(1),
new \SendGrid\Mail\GroupsToDisplay([1,2,3,4])
);
$email->setAsm($asm);
$email->setIpPoolName(new \SendGrid\Mail\IpPoolName("23"));
$mail_settings = new \SendGrid\Mail\MailSettings();
$mail_settings->setBccSettings(
new \SendGrid\Mail\BccSettings(true, "[email protected]")
);
$mail_settings->setBypassListManagement(
new \SendGrid\Mail\BypassListManagement(true)
);
$mail_settings->setFooter(
new \SendGrid\Mail\Footer(true, "Footer", "<strong>Footer</strong>")
);
$mail_settings->setSandBoxMode(new \SendGrid\Mail\SandBoxMode(true));
$mail_settings->setSpamCheck(
new \SendGrid\Mail\SpamCheck(true, 1, "http://mydomain.com")
);
$email->setMailSettings($mail_settings);
$tracking_settings = new \SendGrid\Mail\TrackingSettings();
$tracking_settings->setClickTracking(
new \SendGrid\Mail\ClickTracking(true, true)
);
$tracking_settings->setOpenTracking(
new \SendGrid\Mail\OpenTracking(true, "--sub--")
);
$tracking_settings->setSubscriptionTracking(
new \SendGrid\Mail\SubscriptionTracking(
true,
"subscribe",
"<bold>subscribe</bold>",
"%%sub%%"
)
);
$tracking_settings->setGanalytics(
new \SendGrid\Mail\Ganalytics(
true,
"utm_source",
"utm_medium",
"utm_term",
"utm_content",
"utm_campaign"
)
);
$email->setTrackingSettings($tracking_settings);
$sendgrid = new \SendGrid(getenv('SENDGRID_API_KEY'));
try {
$response = $sendgrid->send($email);
print $response->statusCode() . "\n";
print_r($response->headers());
print $response->body() . "\n";
} catch (Exception $e) {
echo 'Caught exception: '. $e->getMessage(). "\n";
}
<?php
require 'vendor/autoload.php'; // If you're using Composer (recommended)
// Comment out the above line if not using Composer
// require("<PATH TO>/sendgrid-php.php");
// If not using Composer, uncomment the above line and
// download sendgrid-php.zip from the latest release here,
// replacing <PATH TO> with the path to the sendgrid-php.php file,
// which is included in the download:
// https://github.com/sendgrid/sendgrid-php/releases
$email = new \SendGrid\Mail\Mail();
$email->setFrom("[email protected]", "Example User");
$email->setSubject("Sending with Twilio SendGrid is Fun");
$email->addTo("[email protected]", "Example User");
$email->addContent("text/plain", "and easy to do anywhere, even with PHP");
$email->addContent(
"text/html", "<strong>and easy to do anywhere, even with PHP</strong>"
);
$sendgrid = new \SendGrid(getenv('SENDGRID_API_KEY'));
try {
$response = $sendgrid->send($email);
print $response->statusCode() . "\n";
print_r($response->headers());
print $response->body() . "\n";
} catch (Exception $e) {
echo 'Caught exception: '. $e->getMessage(). "\n";
}
OR
<?php
require 'vendor/autoload.php'; // If you're using Composer (recommended)
// Comment out the above line if not using Composer
// require("<PATH TO>/sendgrid-php.php");
// If not using Composer, uncomment the above line and
// download sendgrid-php.zip from the latest release here,
// replacing <PATH TO> with the path to the sendgrid-php.php file,
// which is included in the download:
// https://github.com/sendgrid/sendgrid-php/releases
$from = new \SendGrid\Mail\From("[email protected]", "Example User");
$subject = new \SendGrid\Mail\Subject("Sending with Twilio SendGrid is Fun");
$to = new \SendGrid\Mail\To("[email protected]", "Example User");
$plainTextContent = new \SendGrid\Mail\PlainTextContent(
"and easy to do anywhere, even with PHP"
);
$htmlContent = new \SendGrid\Mail\HtmlContent(
"<strong>and easy to do anywhere, even with PHP</strong>"
);
$email = new \SendGrid\Mail\Mail(
$from,
$to,
$subject,
$plainTextContent,
$htmlContent
);
$sendgrid = new \SendGrid(getenv('SENDGRID_API_KEY'));
try {
$response = $sendgrid->send($email);
print $response->statusCode() . "\n";
print_r($response->headers());
print $response->body() . "\n";
} catch (Exception $e) {
echo 'Caught exception: '. $e->getMessage(). "\n";
}
<?php
require 'vendor/autoload.php'; // If you're using Composer (recommended)
// Comment out the above line if not using Composer
// require("<PATH TO>/sendgrid-php.php");
// If not using Composer, uncomment the above line and
// download sendgrid-php.zip from the latest release here,
// replacing <PATH TO> with the path to the sendgrid-php.php file,
// which is included in the download:
// https://github.com/sendgrid/sendgrid-php/releases
$email = new \SendGrid\Mail\Mail();
$email->setFrom("[email protected]", "Example User");
$tos = [
"[email protected]" => "Example User1",
"[email protected]" => "Example User2",
"[email protected]" => "Example User3"
];
$email->addTos($tos);
$email->setSubject("Sending with Twilio SendGrid is Fun");
$email->addContent("text/plain", "and easy to do anywhere, even with PHP");
$email->addContent(
"text/html", "<strong>and easy to do anywhere, even with PHP</strong>"
);
$sendgrid = new \SendGrid(getenv('SENDGRID_API_KEY'));
try {
$response = $sendgrid->send($email);
print $response->statusCode() . "\n";
print_r($response->headers());
print $response->body() . "\n";
} catch (Exception $e) {
echo 'Caught exception: '. $e->getMessage(). "\n";
}
OR
<?php
require 'vendor/autoload.php'; // If you're using Composer (recommended)
// Comment out the above line if not using Composer
// require("<PATH TO>/sendgrid-php.php");
// If not using Composer, uncomment the above line and
// download sendgrid-php.zip from the latest release here,
// replacing <PATH TO> with the path to the sendgrid-php.php file,
// which is included in the download:
// https://github.com/sendgrid/sendgrid-php/releases
$from = new \SendGrid\Mail\From("[email protected]", "Example User");
$tos = [
new \SendGrid\Mail\To("[email protected]", "Example User1"),
new \SendGrid\Mail\To("[email protected]", "Example User2"),
new \SendGrid\Mail\To("[email protected]", "Example User3")
];
$subject = new \SendGrid\Mail\Subject("Sending with Twilio SendGrid is Fun");
$plainTextContent = new \SendGrid\Mail\PlainTextContent(
"and easy to do anywhere, even with PHP"
);
$htmlContent = new \SendGrid\Mail\HtmlContent(
"<strong>and easy to do anywhere, even with PHP</strong>"
);
$email = new \SendGrid\Mail\Mail(
$from,
$tos,
$subject,
$plainTextContent,
$htmlContent
);
$sendgrid = new \SendGrid(getenv('SENDGRID_API_KEY'));
try {
$response = $sendgrid->send($email);
print $response->statusCode() . "\n";
print_r($response->headers());
print $response->body() . "\n";
} catch (Exception $e) {
echo 'Caught exception: '. $e->getMessage(). "\n";
}
Note that transactional templates may be a better option for this use case, especially for more complex uses.
<?php
require 'vendor/autoload.php'; // If you're using Composer (recommended)
// Comment out the above line if not using Composer
// require("<PATH TO>/sendgrid-php.php");
// If not using Composer, uncomment the above line and
// download sendgrid-php.zip from the latest release here,
// replacing <PATH TO> with the path to the sendgrid-php.php file,
// which is included in the download:
// https://github.com/sendgrid/sendgrid-php/releases
$from = new \SendGrid\Mail\From("[email protected]", "Example User");
$tos = [
new \SendGrid\Mail\To(
"[email protected]",
"Example User1",
[
'-name-' => 'Example User 1',
'-github-' => 'https://github.com/example_user1'
],
"Subject 1 -name-"
),
new \SendGrid\Mail\To(
"[email protected]",
"Example User2",
[
'-name-' => 'Example User 2',
'-github-' => 'https://github.com/example_user2'
],
"Subject 2 -name-"
),
new \SendGrid\Mail\To(
"[email protected]",
"Example User3",
[
'-name-' => 'Example User 3',
'-github-' => 'https://github.com/example_user3'
]
)
];
$subject = new \SendGrid\Mail\Subject("Hi -name-!"); // default subject
$globalSubstitutions = [
'-time-' => "2018-05-03 23:10:29"
];
$plainTextContent = new \SendGrid\Mail\PlainTextContent(
"Hello -name-, your github is -github- sent at -time-"
);
$htmlContent = new \SendGrid\Mail\HtmlContent(
"<strong>Hello -name-, your github is <a href=\"-github-\">here</a></strong> sent at -time-"
);
$email = new \SendGrid\Mail\Mail(
$from,
$tos,
$subject, // or array of subjects, these take precendence
$plainTextContent,
$htmlContent,
$globalSubstitutions
);
$sendgrid = new \SendGrid(getenv('SENDGRID_API_KEY'));
try {
$response = $sendgrid->send($email);
print $response->statusCode() . "\n";
print_r($response->headers());
print $response->body() . "\n";
} catch (Exception $e) {
echo 'Caught exception: '. $e->getMessage(). "\n";
}
OR
<?php
require 'vendor/autoload.php'; // If you're using Composer (recommended)
// Comment out the above line if not using Composer
// require("<PATH TO>/sendgrid-php.php");
// If not using Composer, uncomment the above line and
// download sendgrid-php.zip from the latest release here,
// replacing <PATH TO> with the path to the sendgrid-php.php file,
// which is included in the download:
// https://github.com/sendgrid/sendgrid-php/releases
$from = new \SendGrid\Mail\From("[email protected]", "Example User");
$tos = [
new \SendGrid\Mail\To(
"[email protected]",
"Example User1",
[
'-name-' => 'Example User 1',
'-github-' => 'https://github.com/example_user1'
],
"Example User1 -name-"
),
new \SendGrid\Mail\To(
"[email protected]",
"Example User2",
[
'-name-' => 'Example User 2',
'-github-' => 'https://github.com/example_user2'
],
"Example User2 -name-"
),
new \SendGrid\Mail\To(
"[email protected]",
"Example User3",
[
'-name-' => 'Example User 3',
'-github-' => 'https://github.com/example_user3'
]
)
];
$subject = [
"Subject 1 -name-",
"Subject 2 -name-"
];
$globalSubstitutions = [
'-time-' => "2018-05-03 23:10:29"
];
$plainTextContent = new \SendGrid\Mail\PlainTextContent(
"Hello -name-, your github is -github- sent at -time-"
);
$htmlContent = new \SendGrid\Mail\HtmlContent(
"<strong>Hello -name-, your github is <a href=\"-github-\">here</a></strong> sent at -time-"
);
$email = new \SendGrid\Mail\Mail(
$from,
$tos,
$subject, // or array of subjects, these take precendence
$plainTextContent,
$htmlContent,
$globalSubstitutions
);
$sendgrid = new \SendGrid(getenv('SENDGRID_API_KEY'));
try {
$response = $sendgrid->send($email);
print $response->statusCode() . "\n";
print_r($response->headers());
print $response->body() . "\n";
} catch (Exception $e) {
echo 'Caught exception: '. $e->getMessage(). "\n";
}
For this example, we assume you have created a transactional template in the UI or via the API. Following is the template content we used for testing.
Template ID (replace with your own):
d-13b8f94fbcae4ec6b75270d6cb59f932
Email Subject:
{{ subject }}
Template Body:
<html>
<head>
<title></title>
</head>
<body>
Hello {{ name }},
<br /><br/>
I'm glad you are trying out the template feature!
<br /><br/>
I hope you are having a great day in {{ city }} :)
<br /><br/>
</body>
</html>
<?php
require 'vendor/autoload.php'; // If you're using Composer (recommended)
// Comment out the above line if not using Composer
// require("<PATH TO>/sendgrid-php.php");
// If not using Composer, uncomment the above line and
// download sendgrid-php.zip from the latest release here,
// replacing <PATH TO> with the path to the sendgrid-php.php file,
// which is included in the download:
// https://github.com/sendgrid/sendgrid-php/releases
use \SendGrid\Mail\From as From;
use \SendGrid\Mail\To as To;
use \SendGrid\Mail\Subject as Subject;
use \SendGrid\Mail\PlainTextContent as PlainTextContent;
use \SendGrid\Mail\HtmlContent as HtmlContent;
use \SendGrid\Mail\Mail as Mail;
$from = new From("[email protected]", "Example User");
$tos = [
new To(
"[email protected]",
"Example User1",
[
'subject' => 'Subject 1',
'name' => 'Example User 1',
'city' => 'Denver'
]
),
new To(
"[email protected]",
"Example User2",
[
'subject' => 'Subject 2',
'name' => 'Example User 2',
'city' => 'Irvine'
]
),
new To(
"[email protected]",
"Example User3",
[
'subject' => 'Subject 3',
'name' => 'Example User 3',
'city' => 'Redwood City'
]
)
];
$email = new Mail(
$from,
$tos
);
$email->setTemplateId("d-13b8f94fbcae4ec6b75270d6cb59f932");
$sendgrid = new \SendGrid(getenv('SENDGRID_API_KEY'));
try {
$response = $sendgrid->send($email);
print $response->statusCode() . "\n";
print_r($response->headers());
print $response->body() . "\n";
} catch (Exception $e) {
echo 'Caught exception: '. $e->getMessage(). "\n";
}
OR
$email = new \SendGrid\Mail\Mail();
$email->setFrom("[email protected]", "Example User");
$email->setSubject("I'm replacing the subject tag");
$email->addTo(
"[email protected]",
"Example User1",
[
"subject" => "Subject 1",
"name" => "Example User 1",
"city" => "Denver"
],
0
);
$email->addTo(
"[email protected]",
"Example User2",
[
"subject" => "Subject 2",
"name" => "Example User 2",
"city" => "Denver"
],
1
);
$email->addTo(
"[email protected]",
"Example User3",
[
"subject" => "Subject 3",
"name" => "Example User 3",
"city" => "Redwood City"
],
2
);
$email->setTemplateId("d-13b8f94fbcae4ec6b75270d6cb59f932");
$sendgrid = new \SendGrid(getenv('SENDGRID_API_KEY'));
try {
$response = $sendgrid->send($email);
print $response->statusCode() . "\n";
print_r($response->headers());
print $response->body() . "\n";
} catch (Exception $e) {
echo 'Caught exception: '. $e->getMessage(). "\n";
}
For this example, we assume you have created a legacy template. Following is the template content we used for testing.
Template ID (replace with your own):
13b8f94f-bcae-4ec6-b752-70d6cb59f932
Email Subject:
<%subject%>
Template Body:
<html>
<head>
<title></title>
</head>
<body>
Hello -name-,
<br /><br/>
I'm glad you are trying out the template feature!
<br /><br/>
<%body%>
<br /><br/>
I hope you are having a great day in -city- :)
<br /><br/>
</body>
</html>
<?php
require 'vendor/autoload.php'; // If you're using Composer (recommended)
// Comment out the above line if not using Composer
// require("<PATH TO>/sendgrid-php.php");
// If not using Composer, uncomment the above line and
// download sendgrid-php.zip from the latest release here,
// replacing <PATH TO> with the path to the sendgrid-php.php file,
// which is included in the download:
// https://github.com/sendgrid/sendgrid-php/releases
use \SendGrid\Mail\From as From;
use \SendGrid\Mail\To as To;
use \SendGrid\Mail\Subject as Subject;
use \SendGrid\Mail\PlainTextContent as PlainTextContent;
use \SendGrid\Mail\HtmlContent as HtmlContent;
use \SendGrid\Mail\Mail as Mail;
$from = new From("[email protected]", "Example User");
$tos = [
new To(
"[email protected]",
"Example User1",
[
'-name-' => 'Example User 1',
'-city-' => 'Denver'
]
),
new To(
"[email protected]",
"Example User2",
[
'-name-' => 'Example User 2',
'-city-' => 'Irvine'
]
),
new To(
"[email protected]",
"Example User3",
[
'-name-' => 'Example User 3',
'-city-' => 'Redwood City'
]
)
];
$subject = new Subject("I'm replacing the subject tag");
$plainTextContent = new PlainTextContent(
"I'm replacing the **body tag**"
);
$htmlContent = new HtmlContent(
"I'm replacing the <strong>body tag</strong>"
);
$email = new Mail(
$from,
$tos,
$subject,
$plainTextContent,
$htmlContent
);
$email->setTemplateId("13b8f94f-bcae-4ec6-b752-70d6cb59f932");
$sendgrid = new \SendGrid(getenv('SENDGRID_API_KEY'));
try {
$response = $sendgrid->send($email);
print $response->statusCode() . "\n";
print_r($response->headers());
print $response->body() . "\n";
} catch (Exception $e) {
echo 'Caught exception: '. $e->getMessage(). "\n";
}
OR
$email = new \SendGrid\Mail\Mail();
$email->setFrom("[email protected]", "Example User");
$email->setSubject("I'm replacing the subject tag");
$email->addTo(
"[email protected]",
"Example User1",
[
"-name-" => "Example User 1",
"-city-" => "Denver"
],
0
);
$email->addTo(
"[email protected]",
"Example User2",
[
"-name-" => "Example User 2",
"-city-" => "Denver"
],
1
);
$email->addTo(
"[email protected]",
"Example User3",
[
"-name-" => "Example User 3",
"-city-" => "Redwood City"
],
2
);
$email->addContent("text/plain", "I'm replacing the **body tag**");
$email->addContent("text/html", "I'm replacing the <strong>body tag</strong>");
$email->setTemplateId("13b8f94f-bcae-4ec6-b752-70d6cb59f932");
$sendgrid = new \SendGrid(getenv('SENDGRID_API_KEY'));
try {
$response = $sendgrid->send($email);
print $response->statusCode() . "\n";
print_r($response->headers());
print $response->body() . "\n";
} catch (Exception $e) {
echo 'Caught exception: '. $e->getMessage(). "\n";
}
Following are the steps to add Twilio SMS to your app:
1. Obtain a Free Twilio Account
Sign up for a free Twilio account here.
2. Update Your Environment Variables
You can obtain your Account Sid and Auth Token from twilio.com/console.
Mac
echo "export TWILIO_ACCOUNT_SID='YOUR_TWILIO_ACCOUNT_SID'" > twilio.env
echo "export TWILIO_AUTH_TOKEN='YOUR_TWILIO_AUTH_TOKEN'" >> twilio.env
echo "twilio.env" >> .gitignore
source ./twilio.env
Windows
Temporarily set the environment variable (accessible only during the current CLI session):
set TWILIO_ACCOUNT_SID=YOUR_TWILIO_ACCOUNT_SID
set TWILIO_AUTH_TOKEN=YOUR_TWILIO_AUTH_TOKEN
Permanently set the environment variable (accessible in all subsequent CLI sessions):
setx TWILIO_ACCOUNT_SID "YOUR_TWILIO_ACCOUNT_SID"
setx TWILIO_AUTH_TOKEN "YOUR_TWILIO_AUTH_TOKEN"
3. Install the Twilio Helper Library
composer require twilio/sdk
Then, you can execute the following code.
<?php
$sid = getenv('TWILIO_ACCOUNT_SID');
$token = getenv('TWILIO_AUTH_TOKEN');
$client = new Twilio\Rest\Client($sid, $token);
$message = $client->messages->create(
'8881231234', // Text this number
array(
'from' => '9991231234', // From a valid Twilio number
'body' => 'Hello from Twilio!'
)
);
For more information, please visit the Twilio SMS PHP documentation.
You can find documentation for how to setup a domain authentication via the UI here and via API here.
Find more information about all of Twilio SendGrid's authentication related documentation here.
You can find documentation for how to view your email statistics via the UI here and via API here.
Alternatively, we can post events to a URL of your choice via our Event Webhook about events that occur as Twilio SendGrid processes your email.
Use the button below to instantly setup your own Simple instance for sending email using sendgrid on Heroku.
Google App Engine installations with composer require creation of file php.ini
in the base folder(the same directory as the app.yaml
file). You can read more about this file here.
The file php.ini
should contain:
google_app_engine.enable_curl_lite = 1