Sendgrid implementation
-
import sendgrid import os from sendgrid.helpers.mail import * from mail_config import * from jinja2 import FileSystemLoader, Environment class SendGridSingleMail(): API_KEY = SEND_GRID_SETTINGS['API_KEY'] def __init__(self, to_mail, from_mail, subject, template_path): """ Constructor For Send Grid Mails :param to_mail: Mail Recipient :param from_mail: Mail Sender :param template_path: Email Path """ self.to_mail = Email(to_mail) self.from_mail = Email(from_mail) self.subject = subject self.template_path = template_path def send_mail(self): """ Send the email via send mail :return: Response from send mail """ sg = sendgrid.SendGridAPIClient(api_key=self.API_KEY) mail_content = self.content() content = Content("text/html", mail_content) mail = Mail(self.from_mail, self.subject, self.to_mail, content) return sg.client.mail.send.post(request_body=mail.get()) def set_placeholder_data(self, data): """ set the data to be used by template :param data: object data """ self.placeholder_data = data def render_from_template(self, template, data=None): """ render jinja template :param template: :param data: data to render :return: template rendered to string """ dir = os.path.dirname(os.path.abspath(__file__)) template_dir = os.path.join(dir, 'templates') loader = FileSystemLoader(template_dir) env = Environment(loader=loader) template = env.get_template(template) if data: return template.render(data) else: return template.render({'dummy': 'dummy'}) def content(self): """ Creates the content for the html email :return: String representing the email template """ if self.placeholder_data: return self.render_from_template(self.template_path, self.placeholder_data) else: return self.render_from_template(self.template_path)
Wrote this for templated mails in Sendgrid.