Created
September 22, 2014 19:31
-
-
Save nubela/1b891700c857e21e2e10 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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