Skip to content

Instantly share code, notes, and snippets.

@nubela
Created September 22, 2014 19:31
Show Gist options
  • Save nubela/1b891700c857e21e2e10 to your computer and use it in GitHub Desktop.
Save nubela/1b891700c857e21e2e10 to your computer and use it in GitHub Desktop.
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
import smtplib
from threading import Thread
from base_cfg import STMP_SERVER_HOST, SMTP_PASSWD, SMTP_USERNAME, FROM_EMAIL_NAME, FROM_EMAIL_ADDR
class Mail:
"""
Helper class for structuring the SMTP mail sending layer
"""
def __init__(self,
user_real_name,
user_email,
**kwargs):
#smtp settings
self.smtp_server_host = STMP_SERVER_HOST
self.smtp_server_port = 587
self.smtp_username = SMTP_USERNAME
self.smtp_passwd = SMTP_PASSWD
#user settings
self.user_real_name = user_real_name
self.reply_to = user_email
#internal
self._s = None
for k, v in kwargs.iteritems():
setattr(self, k, v)
def _msg(self, recipient_email, subject):
msg = MIMEMultipart('alternative')
msg['Subject'] = subject
msg['From'] = "%s <%s>" % (self.user_real_name, self.reply_to)
msg['To'] = recipient_email
msg.add_header('reply-to', self.reply_to)
return msg
def _smtp(self):
if self._s is None:
self._s = smtplib.SMTP(self.smtp_server_host, self.smtp_server_port)
self._s.login(self.smtp_username, self.smtp_passwd)
return self._s
def close(self):
if self._s is not None:
self._s.quit()
self._s = None
def wrap(self, http_text):
return "<font face='sans-serif'>%s</font>" % (http_text)
def send(self, recipient_email, subject, html_text):
wrapped_text = self.wrap(html_text)
msg = self._msg(recipient_email, subject)
mime_text = MIMEText(wrapped_text, 'html', 'utf-8')
msg.attach(mime_text)
self._smtp().sendmail(msg['From'], msg['To'], msg.as_string())
def send_email(to_email_addr, subject, html_email, async=True):
def _send_email():
mail_obj = Mail(FROM_EMAIL_NAME, FROM_EMAIL_ADDR)
mail_obj.send(to_email_addr, subject, html_email)
if not async:
_send_email()
else:
t2 = Thread(target=_send_email, args=())
t2.setDaemon(False)
t2.start()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment