Permalink
1141 lines (1016 sloc) 33.1 KB

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

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("test@example.com", "Example User");
$email->setSubject("Sending with SendGrid is Fun");
$email->addTo("test@example.com", "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";
}

Kitchen Sink - an example with all settings used

<?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 SendGrid is Fun 2");

$email->addTo("test@example.com", "Example User");
$email->addTo("test+1@example.com", "Example User1");
$toEmails = [
    "test+2@example.com" => "Example User2",
    "test+3@example.com" => "Example User3"
];
$email->addTos($toEmails);

$email->addCc("test+4@example.com", "Example User4");
$ccEmails = [
    "test+5@example.com" => "Example User5",
    "test+6@example.com" => "Example User6"
];
$email->addCcs($ccEmails);

$email->addBcc("test+7@example.com", "Example User7");
$bccEmails = [
    "test+8@example.com" => "Example User8",
    "test+9@example.com" => "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("test@example.com", "DX");

$email->setGlobalSubject("Sending with 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("dx+replyto2@example.com", "DX Team Reply To 2");

$email->setAsm(1, [1, 2, 3, 4]);

$email->setIpPoolName("23");

// Mail Settings
$email->setBccSettings(true, "bcc@example.com");
$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 SendGrid is Fun 2")
);

$email->addTo(new \SendGrid\Mail\To("test@example.com", "Example User"));
$email->addTo(new \SendGrid\Mail\To("test+1@example.com", "Example User1"));
$toEmails = [ 
    new \SendGrid\Mail\To("test+2@example.com", "Example User2"),
    new \SendGrid\Mail\To("test+3@example.com", "Example User3")
];
$email->addTos($toEmails);

$email->addCc(new \SendGrid\Mail\Cc("test+4@example.com", "Example User4"));
$ccEmails = [ 
    new \SendGrid\Mail\Cc("test+5@example.com", "Example User5"),
    new \SendGrid\Mail\Cc("test+6@example.com", "Example User6")
];
$email->addCcs($ccEmails);

$email->addBcc(
    new \SendGrid\Mail\Bcc("test+7@example.com", "Example User7")
);
$bccEmails = [ 
    new \SendGrid\Mail\Bcc("test+8@example.com", "Example User8"),
    new \SendGrid\Mail\Bcc("test+9@example.com", "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("test@example.com", "DX"));

$email->setGlobalSubject(
    new \SendGrid\Mail\Subject("Sending with 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(
        "dx+replyto2@example.com",
        "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, "bcc@example.com")
);
$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";
}

Send an Email to a Single Recipient

<?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("test@example.com", "Example User");
$email->setSubject("Sending with SendGrid is Fun");
$email->addTo("test@example.com", "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("test@example.com", "Example User");
$subject = new \SendGrid\Mail\Subject("Sending with SendGrid is Fun");
$to = new \SendGrid\Mail\To("test@example.com", "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";
}

Send an Email to Multiple Recipients

<?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("test@example.com", "Example User");
$tos = [ 
    "test+test1@example.com" => "Example User1",
    "test+test2@example.com" => "Example User2",
    "test+test3@example.com" => "Example User3"
];
$email->addTos($tos);
$email->setSubject("Sending with 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("test@example.com", "Example User");
$tos = [ 
    new \SendGrid\Mail\To("test+test1@example.com", "Example User1"),
    new \SendGrid\Mail\To("test+test2@example.com", "Example User2"),
    new \SendGrid\Mail\To("test+test3@example.com", "Example User3")
];
$subject = new \SendGrid\Mail\Subject("Sending with 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";
}

Send Multiple Emails to Multiple Recipients

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("test@example.com", "Example User");
$tos = [
    new \SendGrid\Mail\To(
        "test+test1@example.com",
        "Example User1",
        [
            '-name-' => 'Example User 1',
            '-github-' => 'http://github.com/example_user1'
        ],
        "Subject 1 -name-"
    ),
    new \SendGrid\Mail\To(
        "test+test2@example.com",
        "Example User2",
        [
            '-name-' => 'Example User 2',
            '-github-' => 'http://github.com/example_user2'
        ],
        "Subject 2 -name-"
    ),
    new \SendGrid\Mail\To(
        "test+test3@example.com",
        "Example User3",
        [
            '-name-' => 'Example User 3',
            '-github-' => 'http://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("test@example.com", "Example User");
$tos = [
    new \SendGrid\Mail\To(
        "test+test1@example.com",
        "Example User1",
        [
            '-name-' => 'Example User 1',
            '-github-' => 'http://github.com/example_user1'
        ],
        "Example User1 -name-"
    ),
    new \SendGrid\Mail\To(
        "test+test2@example.com",
        "Example User2",
        [
            '-name-' => 'Example User 2',
            '-github-' => 'http://github.com/example_user2'
        ],
        "Example User2 -name-"
    ),
    new \SendGrid\Mail\To(
        "test+test3@example.com",
        "Example User3",
        [
            '-name-' => 'Example User 3',
            '-github-' => 'http://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";
}

Transactional Templates

For this example, we assume you have created a transactional template. 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("test@example.com", "Example User");
$tos = [
    new To(
        "test+test1@example.com",
        "Example User1",
        [
            'subject' => 'Subject 1',
            'name' => 'Example User 1',
            'city' => 'Denver'
        ]
    ),
    new To(
        "test+test2@example.com",
        "Example User2",
        [
            'subject' => 'Subject 2',
            'name' => 'Example User 2',
            'city' => 'Irvine'
        ]
    ),
    new To(
        "test+test3@example.com",
        "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("test@sendgrid.com", "Example User");
$email->setSubject("I'm replacing the subject tag");
$email->addTo(
    "test+test1@example.com",
    "Example User1",
    [
        "subject" => "Subject 1",
        "name" => "Example User 1",
        "city" => "Denver"
    ],
    0
);
$email->addTo(
    "test+test2@example.com", 
    "Example User2",
    [
        "subject" => "Subject 2",
        "name" => "Example User 2",
        "city" => "Denver"
    ],
    1
);
$email->addTo(
    "test+test3@example.com", 
    "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";
}

Legacy Templates

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("test@example.com", "Example User");
$tos = [ 
    new To(
        "test+test1@example.com",
        "Example User1",
        [
            '-name-' => 'Example User 1',
            '-city-' => 'Denver'
        ]
    ),
    new To(
        "test+test2@example.com",
        "Example User2",
        [
            '-name-' => 'Example User 2',
            '-city-' => 'Irvine'
        ]
    ),
    new To(
        "test+test3@example.com",
        "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("test@sendgrid.com", "Example User");
$email->setSubject("I'm replacing the subject tag");
$email->addTo(
    "test+test1@example.com", 
    "Example User1",
    [ 
        "-name-" => "Example User 1",
        "-city-" => "Denver"
    ],
    0
);
$email->addTo(
    "test+test2@example.com", 
    "Example User2",
    [ 
        "-name-" => "Example User 2",
        "-city-" => "Denver"
    ],
    1
);
$email->addTo(
    "test+test3@example.com", 
    "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";
}

How to Setup a Domain Whitelabel

You can find documentation for how to setup a domain whitelabel via the UI here and via API here.

Find more information about all of SendGrid's whitelabeling related documentation here.

How to View Email Statistics

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 SendGrid processes your email.

Deploying to Heroku

Use the button below to instantly setup your own Simple instance for sending email using sendgrid on Heroku.

Deploy

Google App Engine Installation

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