发送普通邮件
发送文本和html普通邮件如下:
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
|
from email.header import Header
from email.mime.text import MIMEText
from email.utils import parseaddr, formataddr
import smtplib
def _format_addr(s):
name, addr = parseaddr(s)
return formataddr((Header(name, 'utf-8' ).encode(), addr))
def get_server(username):
"""
通过邮箱地址获得邮箱服务器
:param username:用户名,比如:123456@qq.com
:return: 邮箱服务器地址,可以根据自己实际业务添加,比如:smtp.qq.com
"""
servers = { 'qq' : 'smtp.qq.com'
, '126' : 'smtp.126.com'
, '163' : 'smtp.163.com'
, '139' : 'smtp.139.com' }
for key,value in servers.items():
if key in username:
return value
def send_mail(username, password, to, sender_name, subject, content, email_type):
"""
:param username:
:param password:
:param to: 接收者列表 []
:param sender_name:
:param subject:
:param content:
:param email_type:
:return:
"""
from_addr = username
password = password
to_addr = to
smtp_server = get_server(username)
# 邮件正文是MIMEText类型
msg = MIMEText( '%s' % (content), '%s' % (email_type), 'utf-8' )
msg[ 'From' ] = _format_addr( '%s<%s>' % (sender_name, from_addr))
msg[ 'To' ] = _format_addr( '<%s>' % to_addr)
msg[ 'Subject' ] = Header( '%s' % (subject), 'utf-8' ).encode()
# 普通登陆端口是25,带ssl验证时候端口是465
# smtp_server = 'smtp.exmail.qq.com'
# server = smtplib.SMTP_SSL(smtp_server, 465)
server = smtplib.SMTP(smtp_server, 25 )
server.set_debuglevel( 1 )
server.login(from_addr, password)
server.sendmail(from_addr, to_addr, msg.as_string())
server.quit()
if __name__ = = '__main__' :
"""发送简单文本邮件"""
username = '******@126.com'
password = '******'
sender_name = '******@126.com'
subject = 'test 邮件'
content = '<html><h1>ikeguang 的来信</h1></html> <a href="http://www.ikeguang.com" rel="external nofollow" >ikeguang.com</a></html>'
# email_type 取值:plain,文本类型邮件;html,html类型邮件
email_type = 'html'
_to = [ '******@126.com' , '******@qq.com' ]
for to in _to:
send_mail(username, password, to, sender_name, subject, content, email_type)
print ( 'send mail to %s success' % to)
|
发送带附件的邮件
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
|
def send_mail_multipart(username, password, to, sender_name, subject, content, email_type):
from_addr = username
password = password
to_addr = to
smtp_server = get_server(username)
msg = MIMEMultipart()
# 邮件正文是MIMEText类型
msg.attach(MIMEText( '%s' % (content), '%s' % (email_type), 'utf-8' ))
msg[ 'From' ] = _format_addr( '%s<%s>' % (sender_name, from_addr))
msg[ 'To' ] = _format_addr( '<%s>' % to_addr)
msg[ 'Subject' ] = Header( '%s' % (subject), 'utf-8' ).encode()
# 读取附件
filename = 'D:/我的文件/Codes/PyCode/source/image/0.jpg'
with open (filename, 'rb' ) as f:
# 设置附件的MIME和文件名,这里是png类型:
mime = MIMEBase( 'image' , 'jpg' , filename = '0.jpg' )
# 加上必要的头信息:
mime.add_header( 'Content-Disposition' , 'attachment' , filename = '0.jpg' )
mime.add_header( 'Content-ID' , '<0>' )
mime.add_header( 'X-Attachment-Id' , '0' )
# 把附件的内容读进来:
mime.set_payload(f.read())
# 用Base64编码:
encoders.encode_base64(mime)
# 添加到MIMEMultipart:
msg.attach(mime)
# 普通登陆端口是25,带ssl验证时候端口是465
# smtplib.SMTP_SSL(smtp_server, 465)
server = smtplib.SMTP(smtp_server, 25 )
server.set_debuglevel( 1 )
server.login(from_addr, password)
server.sendmail(from_addr, [to_addr], msg.as_string())
server.quit()
|
原文链接:http://www.ikeguang.com/?p=331