Python学习:SMTP发送邮件(html)和带有附件的邮件

来源:互联网 发布:知乎推荐的淘宝包店 编辑:程序博客网 时间:2024/05/16 12:45

如果要发送html,就可以这样…

msg = MIMEText('<html><body><h1>Hello</h1>' +    '<p>send by <a href="http://www.python.org">Python</a>...</p>' +    '</body></html>', 'html', 'utf-8')

下面是发送带有附件的

from email.mime.text import MIMETextfrom email.mime.base import MIMEBasefrom email.mime.multipart import MIMEMultipartfrom email.header import Headerfrom email.utils import parseaddr, formataddrfrom email import encodersimport smtplibdef _format_addr(s):    name, addr = parseaddr(s)    return formataddr((Header(name, 'utf-8').encode(), addr))msg =  MIMEMultipart()msg['From'] = _format_addr('彭羿博<15008243416@163.com>')msg['To'] = _format_addr('634077956@qq.com')msg['Subject'] = Header('来自SMTP').encode()msg.attach(MIMEText('send with file...', 'plain', 'utf-8'))with open(r'C:\Users\admin\Desktop\test.png', 'rb') as f:    # 设置附件的MIME和文件名,这里是png类型:    mime = MIMEBase('image', 'png', filename='test.png')    # 加上必要的头信息:    mime.add_header('Content-Disposition', 'attachment', filename='test.png')    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)from_addr = '15008243416@163.com'#input('From: ')password = '199312183434ppdx'#input('Password: ')# 输入收件人地址:to_addr = '634077956@qq.com'#input('To: ')# 输入SMTP服务器地址:smtp_server = 'smtp.163.com'#input('SMTP server: ')server = smtplib.SMTP(smtp_server, 25) # SMTP协议默认端口是25server.set_debuglevel(1)server.login(from_addr, password)print(_format_addr('彭羿博<15008243416@163.com>'))server.sendmail(from_addr, [to_addr], msg.as_string())server.quit()

在这部分代码里面,如果我直接使用header去对汉字解码就会出错,修改为只对名字进行header解码就不会出错…原因暂时不懂.

0 0
原创粉丝点击