Skip to content

yred/sendgrid-python

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

SendGrid-Python

This library allows you to quickly and easily send emails through SendGrid using Python.

Build Status

Warning! This library was recently updated to bring it up to date with all of our other libraries. It behaves completely different from the previous release. Also, SMTP has been deprecated in support for the Web API.

Install

pip install sendgrid
# or
easy_install sendgrid

Example

import sendgrid

sg = sendgrid.SendGridClient('YOUR_SENDGRID_USERNAME', 'YOUR_SENDGRID_PASSWORD')

message = sendgrid.Mail()
message.add_to('John Doe <[email protected]>')
message.set_subject('Example')
message.set_html('Body')
message.set_text('Body')
message.set_from('Doe John <[email protected]>')
status, msg = sg.send(message)

#or

message = sendgrid.Mail(to='[email protected]', subject='Example', html='Body', text='Body', from_email='[email protected]')
status, msg = sg.send(message)

Error handling

By default, .send method returns a tuple (http_status_code, message), however you can pass raise_errors=True to SendGridClient constructor, then .send method will raise SendGridClientError for 4xx errors, and SendGridServerError for 5xx errors.

from sendgrid import SendGridError, SendGridClientError, SendGridServerError

sg = sendgrid.SendGridClient(username, password, raise_errors=True)

try:
    sg.send(message)
except SendGridClientError:
    ...
except SendGridServerError:
    ...

This behavior is going to be default from version 1.0.0. You are encouraged to set raise_errors to True for forwards compatibility.

SendGridError is a base-class for all SendGrid-related exceptions.

Adding Recipients

message = sendgrid.Mail()
message.add_to('[email protected]')
# or
message.add_to('Example Dude <[email protected]>')
# or
message.add_to(['Example Dude <[email protected]>', '[email protected]'])

Adding BCC Recipients

message = sendgrid.Mail()
message.add_bcc('[email protected]')
# or
message.add_bcc(['Example Dude <[email protected]>', '[email protected]'])

Setting the Subject

message = sendgrid.Mail()
message.set_subject('Example')

Set Text or HTML

message = sendgrid.Mail()
message.set_text('Body')
# or
message.set_html('<html><body>Stuff, you know?</body></html>')

Set From

message = sendgrid.Mail()
message.set_from('[email protected]')

Set ReplyTo

message = sendgrid.Mail()
message.set_replyto('[email protected]')

Set File Attachments

message = sendgrid.Mail()
message.add_attachment('stuff.txt', './stuff.txt')
# or
message.add_attachment('stuff.txt', open('./stuff.txt', 'rb'))
# or
message.add_attachment_stream('filename', 'somerandomcontentyouwant')
# strings, unicode, or BytesIO streams

SendGrid's X-SMTPAPI

If you wish to use the X-SMTPAPI on your own app, you can use the SMTPAPI Python library.

There are implementations for setter methods too.

message = sendgrid.Mail()
message.add_substitution("key", "value")
message = sendgrid.Mail()
message.add_section("section", "value")
message = sendgrid.Mail()
message.add_category("category")
message = sendgrid.Mail()
message.add_unique_arg("key", "value")
message = sendgrid.Mail()
message.add_filter("filter", "setting", "value")

SMTP

SMTP support has been deprecated from all of our libs. But for those whom still want to use it, here is an example:

import smtplib
from email.mime.text import MIMEText

email = MIMEText("this is a text/plain email") # you can make this html too.

email['Subject'] = 'This will be the subject'
email['From'] = '[email protected]'
email['To'] = '[email protected]'
email['Cc'] = '[email protected], [email protected]' # this is comma separated field

s = smtplib.SMTP('smtp.sendgrid.net', 587)
s.login('SENDGRID_USER', 'SENDGRID_PASSWORD')
s.sendmail(email['From'], [email['To']], email.as_string())

TODO:

  • Add support for CID

Tests

python test/__init__.py

MIT License

About

SendGrid Python Library

Resources

Stars

Watchers

Forks

Packages

No packages published