Plugin Directory


Send emails throught SendGrid from your WordPress installation using SMTP or API integration.

SendGrid's cloud-based email infrastructure relieves businesses of the cost and complexity of maintaining custom email systems. SendGrid provides reliable delivery, scalability and real-time analytics along with flexible APIs that make custom integration a breeze.

The SendGrid plugin uses SMTP or API integration to send outgoing emails from your WordPress installation. It replaces the wp_mail function included with WordPress.

First, you need to have PHP-curl extension enabled. To send emails through SMTP you need to install also the 'Swift Mailer' plugin.

To have the SendGrid plugin running after you have activated it, go to the plugin's settings page and set the SendGrid credentials, and how your email will be sent - either through SMTP or API.

You can also set default values for the "Name", "Sending Address" and the "Reply Address", so that you don't need to set these headers every time you want to send an email from your application.

You can set the template ID to be used in all your emails on the settings page or you can set it for each email in headers.

You can have an individual email sent to each recipient by setting x-smtpapi-to in headers: 'x-smtpapi-to: address1@sendgrid.com,address2@sendgrid.com'. Note: when using SMTP method you need to have also the to address set (this may be dummy data since will be overwritten with the addresses from x-smtpapi-to) in order to be able to send emails.

Emails are tracked and automatically tagged for statistics within the SendGrid Dashboard. You can also add general tags to every email sent, as well as particular tags based on selected emails defined by your requirements.

There are a couple levels of integration between your WordPress installation and the SendGrid plugin:

  • The simplest option is to Install it, Configure it, and the SendGrid plugin for WordPress will start sending your emails through SendGrid.
  • We amended wp_mail() function so all email sends from WordPress should go through SendGrid. The wp_mail function is sending text emails as default, but you have an option of sending an email with HTML content.

How to use wp_mail() function:

We amended wp_mail() function so all email sends from WordPress should go through SendGrid.

You can send emails using the following function: wp_mail($to, $subject, $message, $headers = '', $attachments = array())


  • $to - Array or comma-separated list of email addresses to send message.
  • $subject - Email subject
  • $message - Message contents
  • $headers - Array or SendGrid\Email() object. Optional.
  • $attachments - Array or "\n"/"," separated list of files to attach. Optional.

The wp_mail function is sending text emails as default. If you want to send an email with HTML content you have to set the content type to 'text/html' running add_filter('wp_mail_content_type', 'set_html_content_type'); function before to wp_mail() one.

After wp_mail function you need to run the remove_filter('wp_mail_content_type', 'set_html_content_type'); to remove the 'text/html' filter to avoid conflicts --http://core.trac.wordpress.org/ticket/23578

Example about how to send an HTML email using different headers:

Using array for $headers:

$subject = 'Test SendGrid plugin';
$message = 'testing WordPress plugin';
$to = array('address1@sendgrid.com', 'Address2 <address2@sendgrid.com>', 'address3@sendgrid.com');
$headers = array();
$headers[] = 'From: Me Myself <me@example.net>';
$headers[] = 'Cc: address4@sendgrid.com';
$headers[] = 'Bcc: address5@sendgrid.com';
$headers[] = 'unique-args:customer=mycustomer;location=mylocation';
$headers[] = 'categories: category1, category2';
$headers[] = 'template: templateID';
$headers[] = 'x-smtpapi-to: address1@sendgrid.com,address2@sendgrid.com';
$attachments = array('/tmp/img1.jpg', '/tmp/img2.jpg');
add_filter('wp_mail_content_type', 'set_html_content_type');
$mail = wp_mail($to, $subject, $message, $headers, $attachments);
remove_filter('wp_mail_content_type', 'set_html_content_type');

Using SendGrid\Email() for $headers:

$subject = 'Test SendGrid plugin';
$message = 'testing WordPress plugin';
$to = array('address1@sendgrid.com', 'Address2 <address2@sendgrid.com>', 'address3@sendgrid.com');
$headers = new SendGrid\Email();
$headers->setFromName("Me Myself")
        ->setUniqueArgs(array('customer' => 'mycustomer', 'location' => 'mylocation'))
$attachments = array('/tmp/img1.jpg', '/tmp/img2.jpg');
add_filter('wp_mail_content_type', 'set_html_content_type');
$mail = wp_mail($to, $subject, $message, $headers, $attachments);
remove_filter('wp_mail_content_type', 'set_html_content_type');

How to use Substitution and Sections

$subject = 'Hey %name%, you work at %place%';
$message = 'testing WordPress plugin';
$to = array('address1@sendgrid.com');

$headers = new SendGrid\Email();
    ->addSubstitution("%name%", array("John", "Harry", "Bob"))
    ->addSubstitution("%place%", array("%office%", "%office%", "%home%"))
    ->addSection("%office%", "an office")
    ->addSection("%home%", "your house")

$mail = wp_mail($to, $subject, $message, $headers);

More examples for using SendGrid SMTPAPI header: https://github.com/sendgrid/sendgrid-php#smtpapi

Using categories

Categories used for emails can be set:

  • globally, for all emails sent, by setting the 'Categories' field in the 'Mail settings' section
  • per email by adding the category in the headers array: $headers[] = 'categories: category1, category2';

If you would like to configure categories for statistics, you can configure it by setting the 'Categories' field in the 'Statistics settings' section

Requires: 3.3 or higher
Compatible up to: 4.4.3
Last Updated: 1 month ago
Active Installs: 20,000+


4.6 out of 5 stars


3 of 12 support threads in the last two months have been marked resolved.

Got something to say? Need help?


Not enough data

0 people say it works.
0 people say it's broken.

100,1,1 100,1,1
0,1,0 100,1,1
0,1,0 100,2,2