-
Notifications
You must be signed in to change notification settings - Fork 2
/
email_sender.py
108 lines (98 loc) · 2.52 KB
/
email_sender.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
# -*- coding: utf-8 -*-
#
# Author: jimin.huang
#
#
'''
Sending email via `tornado_email <https://github.com/windworship/tornado_email>_`
'''
from email.header import Header
from email.mime.text import MIMEText
from email.utils import formataddr
import smtplib
import tornado.gen
import tornado_email.client as async_smtp
from tornado.options import options
def deal_with_address(declare_name, address):
'''
Deal with the address of mail.
'''
return formataddr(
(
Header(declare_name, 'utf-8').encode(),
address.encode('utf-8'),
)
)
def send(
title=None,
message=None,
host=None,
user=None,
password=None,
to=None,
callback=None,
):
'''
Send emails sync.
'''
# Default parameter
if host is None:
host = options.mail_server
if user is None:
user = options.mail_user
if password is None:
password = options.mail_password
if to is None:
to = options.alert_list
server = smtplib.SMTP()
server.connect(host)
server.starttls()
server.login(user, password)
msg = MIMEText(message, 'plain', 'utf-8')
msg['From'] =\
deal_with_address(
'Wuhan University Internet Data Mining Laboratory',
user
)
msg['Subject'] = Header(title, 'utf-8').encode()
to_addrs = [to_addr.encode('utf-8') for to_addr in to.split('|')]
msg['To'] = ', '.join(to_addrs)
server.sendmail(user, to_addrs, msg.as_string())
server.quit()
@tornado.gen.coroutine
def async_send(
title=None,
message=None,
host=None,
user=None,
password=None,
to=None,
callback=None,
):
'''
Send emails async.
'''
# Default parameter
if host is None:
host = options.mail_server
if user is None:
user = options.mail_user
if password is None:
password = options.mail_password
if to is None:
to = options.alert_list
server = async_smtp.AsyncSMTP()
yield server.connect(host=host)
yield server.start_tls()
yield server.login(username=user, password=password)
msg = MIMEText(message, 'plain', 'utf-8')
msg['From'] =\
deal_with_address(
'Wuhan University Internet Data Mining Laboratory',
user
)
msg['Subject'] = Header(title, 'utf-8').encode()
to_addrs = [to_addr.encode('utf-8') for to_addr in to.split('|')]
msg['To'] = ', '.join(to_addrs)
yield server.send_mail(user, to_addrs, msg.as_string())
yield server.quit()