godpod / sendgrid
This library allows you to quickly and easily send emails or make api calls through SendGrid using PHP.
Requires
- php: >=5.3
- sendgrid/smtpapi: 0.*
Requires (Dev)
- phpunit/phpunit: 3.7.*
- vlucas/phpdotenv: 1.0.2
Replaces
- godpod/sendgrid-php: *
README
This library allows you to quickly and easily send emails through SendGrid using PHP.
WARNING: This module was recently upgraded from 1.1.7 to 2.X. There were API breaking changes for various method names. See usage for up to date method names.
Important: This library requires PHP 5.3 or higher.
$sendgrid = new SendGrid('username', 'password'); $email = new SendGrid\Email(); $email->addTo('foo@bar.com')-> setFrom('me@bar.com')-> setSubject('Subject goes here')-> setText('Hello World!')-> setHtml('<strong>Hello World!</strong>'); $sendgrid->send($email);
Installation
Add SendGrid to your composer.json
file. If you are not using Composer, you should be. It's an excellent way to manage dependencies in your PHP application.
{ "require": { "godpod/sendgrid": "2.2.0.1" } }
Then at the top of your PHP script require the autoloader:
require 'vendor/autoload.php';
Alternative: Install from zip
If you are not using Composer, simply download and install the latest packaged release of the library as a zip.
⬇︎ Download Packaged Library ⬇︎
Then require the library from package:
require("path/to/sendgrid-php/sendgrid-php.php");
Previous versions of the library can be found in the version index.
Example App
There is a sendgrid-php-example app to help jumpstart your development.
Usage
To begin using this library, initialize the SendGrid object with your SendGrid credentials.
$sendgrid = new SendGrid('username', 'password');
Create a new SendGrid Email object and add your message details.
$email = new SendGrid\Email(); $email->addTo('foo@bar.com')-> addTo('bar@foo.com')-> setFrom('me@bar.com')-> setSubject('Subject goes here')-> setText('Hello World!')-> setHtml('<strong>Hello World!</strong>');
Send it.
$sendgrid->send($email);
addTo
You can add one or multiple TO addresses using addTo
.
$email = new SendGrid\Email(); $email->addTo('foo@bar.com')-> addTo('another@another.com'); $sendgrid->send($email);
setTos
If you prefer, you can add multiple TO addresses as an array using the setTos
method. This will unset any previous addTo
s you appended.
$email = new SendGrid\Email(); $emails = array("foo@bar.com", "another@another.com", "other@other.com"); $email->setTos($emails); $sendgrid->send($email);
setFrom
$email = new SendGrid\Email(); $email->setFrom('foo@bar.com'); $sendgrid->send($email);
setFromName
$email = new SendGrid\Email(); $email->setFrom('foo@bar.com'); $email->setFromName('Foo Bar'); $email->setFrom('other@example.com'); $email->setFromName('Other Guy'); $sendgrid->send($email);
setReplyTo
$email = new SendGrid\Email(); $email->addTo('foo@bar.com')-> setReplyTo('someone.else@example.com')-> setFromName('John Doe')-> ...
Cc
addCc
$email = new SendGrid\Email(); $email->addCc('foo@bar.com'); $sendgrid->send($email);
setCc
$email = new SendGrid\Email(); $email->setCc('foo@bar.com'); $sendgrid->send($email);
setCcs
$email = new SendGrid\Email(); $emails = array("foo@bar.com", "another@another.com", "other@other.com"); $email->setCcs($emails); $sendgrid->send($email);
removeCc
$email->removeCc('foo@bar.com');
Bcc
Use multiple addTo
s as a superior alternative to setBcc
.
$email = new SendGrid\Email(); $email->addTo('foo@bar.com')-> addTo('someotheraddress@bar.com')-> addTo('another@another.com')-> ...
But if you do still have a need for Bcc you can do the following:
addBcc
$email = new SendGrid\Email(); $email->addBcc('foo@bar.com'); $sendgrid->send($email);
setBcc
$email = new SendGrid\Email(); $email->setBcc('foo@bar.com'); $sendgrid->send($email);
setBccs
$email = new SendGrid\Email(); $emails = array("foo@bar.com", "another@another.com", "other@other.com"); $email->setBccs($emails); $sendgrid->send($email);
removeBcc
$email->removeBcc('foo@bar.com');
setSubject
$email = new SendGrid\Email(); $email->setSubject('This is a subject'); $sendgrid->send($email);
setText
$email = new SendGrid\Email(); $email->setText('This is some text'); $sendgrid->send($email);
setHtml
$email = new SendGrid\Email(); $email->setHtml('<h1>This is an html email</h1>'); $sendgrid->send($email);
setDate
$email = new SendGrid\Email(); $email->setDate('Wed, 17 Dec 2014 19:21:16 +0000'); $sendgrid->send($email);
setSendAt
$email = new SendGrid\Email(); $email->setSendAt(1409348513); $sendgrid->send($email);
setSendEachAt
$email = new SendGrid\Email(); $email->setSendEachAt(array(1409348513, 1409348514, 1409348515)); $sendgrid->send($email);
addSendEachAt
$email = new SendGrid\Email(); $email->addSendEachAt(1409348513); $email->addSendEachAt(1409348514); $email->addSendEachAt(1409348515); $sendgrid->send($email);
Categories
Categories are used to group email statistics provided by SendGrid.
To use a category, simply set the category name. Note: there is a maximum of 10 categories per email.
addCategory
$email = new SendGrid\Email(); $email->addTo('foo@bar.com')-> ... addCategory("Category 1")-> addCategory("Category 2");
setCategory
$email = new SendGrid\Email(); $email->addTo('foo@bar.com')-> ... setCategory("Category 1");
setCategories
$email = new SendGrid\Email(); $categories = array("Category 1", "Category 2", "Category 3"); $email->setCategories($categories);
removeCategory
$email = new SendGrid\Email(); $email->addTo('foo@bar.com')-> ... removeCategory("Category 1");
Attachments
Attachments are currently file based only, with future plans for an in memory implementation as well.
File attachments are limited to 7 MB per file.
addAttachment
$email = new SendGrid\Email(); $email->addTo('foo@bar.com')-> ... addAttachment("../path/to/file.txt");
setAttachment
$email = new SendGrid\Email(); $email->addTo('foo@bar.com')-> ... setAttachment("../path/to/file.txt");
setAttachments
$email = new SendGrid\Email(); $attachments = array("../path/to/file1.txt", "../path/to/file2.txt"); $email->addTo('foo@bar.com')-> ... setAttachments($attachments);
removeAttachment
$email = new SendGrid\Email(); $email->addTo('foo@bar.com')-> ... addAttachment("../path/to/file.txt"); $email->removeAttachment("../path/to/file.txt");
You can tag files for use as inline HTML content. It will mark the file for inline disposition using the specified "cid".
$email = new SendGrid\Email(); $email->addTo('foo@bar.com') ->setHtml('<div>Our logo:<img src="cid:file-cid"></div>') ->addAttachment("../path/to/file.txt", "super_file.txt", "file-cid");
Important Gotcha: setBcc
is not supported with attachments. This is by design. Instead use multiple addTo
s. Each user will receive their own personalized email with that setup, and only see their own email.
Standard setBcc
will hide who the email is addressed to. If you use the multiple addTo, each user will receive a personalized email showing *only their email. This is more friendly and more personal. Additionally, it is a good idea to use multiple addTo
s because setBcc is not supported with attachments. This is by design.
So just remember, when thinking 'bcc', instead use multiple addTo
s.
Substitutions
Substitutions can be used to customize multi-recipient emails, and tailor them for the user
addSubstitution
$email = new SendGrid\Email(); $email->addTo('john@somewhere.com')-> addTo('harry@somewhere.com')-> addTo('Bob@somewhere.com')-> ... setHtml('Hey %name%, we've seen that you've been gone for a while')-> addSubstitution('%name%', array('John', 'Harry', 'Bob'));
Substitutions can also be used to customize multi-recipient subjects.
$email = new SendGrid\Email(); $email->addTos(array('john@somewhere.com', 'harry@somewhere.com', 'bob@somewhere.com')) ->setSubject('%subject%') ->addSubstitution('%subject%', array('Subject to John', 'Subject to Harry', 'Subject to Bob')) ...;
setSubstitutions
$email = new SendGrid\Email(); $email->addTos(array('john@somewhere.com', 'harry@somewhere.com', 'bob@somewhere.com')) ->setSubject('%subject%') ->setSubstitutions(array('%name%' => array('John', 'Harry', 'Bob') , '%subject%' => array('Subject to John', 'Subject to Harry', 'Subject to Bob'))) ...;
Sections
Sections can be used to further customize messages for the end users. A section is only useful in conjunction with a substitution value.
addSection
$email = new SendGrid\Email(); $email->addTo('john@somewhere.com')-> addTo("harry@somewhere.com")-> addTo("Bob@somewhere.com")-> ... setHtml("Hey %name%, you work at %place%")-> addSubstitution("%name%", array("John", "Harry", "Bob"))-> addSubstitution("%place%", array("%office%", "%office%", "%home%"))-> addSection("%office%", "an office")-> addSection("%home%", "your house");
setSections
$email = new SendGrid\Email(); $email->addTo('john@somewhere.com')-> addTo("harry@somewhere.com")-> addTo("Bob@somewhere.com")-> ... setHtml("Hey %name%, you work at %place%")-> addSubstitution("%name%", array("John", "Harry", "Bob"))-> addSubstitution("%place%", array("%office%", "%office%", "%home%"))-> setSections(array("%office%" => "an office", "%home%" => "your house"));
Unique Arguments
Unique Arguments are used for tracking purposes
addUniqueArg / addUniqueArgument
$email = new SendGrid\Email(); $email->addTo('foo@bar.com')-> ... addUniqueArg("Customer", "Someone")-> addUniqueArg("location", "Somewhere")->
setUniqueArgs / setUniqueArguments
$email = new SendGrid\Email(); $email->addTo('foo@bar.com')-> ... setUniqueArgs(array('cow' => 'chicken'));
Filter Settings
Filter Settings are used to enable and disable apps, and to pass parameters to those apps.
addFilter / addFilterSetting
$email = new SendGrid\Email(); $email->addTo('foo@bar.com')-> ... addFilter("gravatar", "enable", 1)-> addFilter("footer", "enable", 1)-> addFilter("footer", "text/plain", "Here is a plain text footer")-> addFilter("footer", "text/html", "<p style='color:red;'>Here is an HTML footer</p>");
setFilters / setFilterSettings
$email = new SendGrid\Email(); $email->addTo('foo@bar.com')-> ... setFilters(array("gravatar" => array("settings" => array("enable" => 1))))
Headers
You can add standard email message headers as necessary.
addHeader
$email = new SendGrid\Email(); $email->addTo('foo@bar.com')-> ... addHeader('X-Sent-Using', 'SendGrid-API')-> addHeader('X-Transport', 'web');
setHeaders
$email = new SendGrid\Email(); $email->addTo('foo@bar.com')-> ... setHeaders(array('X-Sent-Using' => 'SendGrid-API', 'X-Transport' => 'web'));
removeHeader
$email = new SendGrid\Email(); $email->addTo('foo@bar.com')-> ... addHeader('X-Sent-Using', 'SendGrid-API')-> addHeader('X-Transport', 'web'); $email->removeHeader('X-Transport');
Options
Options may be passed to the library when initializing the SendGrid object:
$options = array( 'turn_off_ssl_verification' => false, 'protocol' => 'https', 'host' => 'api.sendgrid.com', 'endpoint' => '/api/mail.send.json', 'port' => null, 'url' => null ); $sendgrid = new SendGrid('username', 'password', $options);
Changing URL
You may change the URL sendgrid-php uses to send email by supplying various parameters to options
, all parameters are optional:
$sendgrid = new SendGrid('username', 'password', array( 'protocol' => 'http', 'host' => 'sendgrid.org', 'endpoint' => '/send', 'port' => '80' ));
A full URL may also be provided:
$sendgrid = new SendGrid('username', 'password', array( 'url' => 'http://sendgrid.org:80/send'));
Ignoring SSL certificate verification
You can optionally ignore verification of SSL certificate when using the Web API.
$sendgrid = new SendGrid(SENDGRID_USERNAME, SENDGRID_PASSWORD, array("turn_off_ssl_verification" => true));
Sending to 1,000s of emails in one batch
Sometimes you might want to send 1,000s of emails in one request. You can do that. It is recommended you break each batch up in 1,000 increments. So if you need to send to 5,000 emails, then you'd break this into a loop of 1,000 emails at a time.
$sendgrid = new SendGrid(SENDGRID_USERNAME, SENDGRID_PASSWORD); $email = new SendGrid\Email(); $recipients = array("alpha@mailinator.com", "beta@mailinator.com", "zeta@mailinator.com"); $names = array("Alpha", "Beta", "Zeta"); $email->setFrom("from@mailinator.com")-> setSubject('[sendgrid-php-batch-email]')-> setTos($recipients)-> addSubstitution("%name%", $names)-> setText("Hey %name, we have an email for you")-> setHtml("<h1>Hey %name%, we have an email for you</h1>"); $result = $sendgrid->send($email);
Contributing
- Fork it
- Create your feature branch (
git checkout -b my-new-feature
) - Commit your changes (
git commit -am 'Added some feature'
) - Push to the branch (
git push origin my-new-feature
) - Create new Pull Request
Running Tests
The existing tests in the test
directory can be run using PHPUnit with the following command:
composer update --dev cd test ../vendor/bin/phpunit ``` or if you already have PHPUnit installed globally. ```bash cd test phpunit ``` ## Releasing To release a new version of this library, update the version in all locations, tag the version, and then push the tag up. Packagist.org takes care of the rest. #### Testing uploading to Amazon S3 If you want to test uploading the zipped file to Amazon S3 (SendGrid employees only), do the following. ``` export S3_SIGNATURE="secret_signature" export S3_POLICY="secret_policy" export S3_BUCKET="sendgrid-open-source" export S3_ACCESS_KEY="secret_access_key" ./scripts/s3upload.sh ```