python 邮件发送附件_python 发送邮件并带附件

感谢简书上一位大佬的笔记,忘记是谁了,不好意思~此文仅作为笔记使用,若侵请联系删除。

如HTTP是计算机用来通过因特网发送网页的协议一样,SMTP(简单邮件传输协议)是用于发送电子邮件的协议。SMTP规定电子邮件应该如何格式化、加密、在邮件服务器之间传递。python的smtplib模块将它们简化成了几个函数。

smtplib主要方法:

1、实例化一个SMTP对象:

s=smtplib.SMTP(邮件服务地址如smtp@163.com,端口号如465)

s=smtplib.SMTP_SSL(邮件服务地址如smtp@163.com,端口号如465)#SSL加密

2、登陆邮件,权限验证:

s.login(用户名如sx_199610@163.com,密码)

3、发送邮件:

s.sendmail(发件人邮箱,收件人邮箱,发送内容)

4、断开连接

s.quit()

Email模块:

email支持发送的邮件内容为纯文本、HTML内容、图片、附件。email中有几大类泪针对不同的邮件内容形式,常用如下:

MIMEText:(MIME媒体类型)内容形式为纯文本、HTML页面。

MIMEimage:内容形式为图片。

MIMEMultupart:多形式组合,可包含文本和附件。

代码如下:

from email.mime.text import MIMEText

import smtplib

from email.header import Header

from email.utils import parseaddr,formataddr#设置编码格式

from email.mime.base import MIMEBase

from email.mime.multipart import MIMEMultipart

from email import encoders

#将用户名编码设置成UTF-8

def _format_addr(s):

name,addr=parseaddr(s)

return formataddr((Header(name, utf-8).encode(),addr))

#定义email的地址,口令和SMTP服务器地址

from_addr=sx_199610@163.com

password=input(请输入发送邮箱的密码:) #注意此处输入的密码是自己设置的协议密码

to_addr=sx_wy123@163.com

smtp_server=smtp.163.com

#定义邮件本身内容

msg=MIMEMultipart()

msg[From]=_format_addr(发送者的ReedSun<%s>%from_addr)

msg[To]=_format_addr(接收者的ReedSun<%s>%to_addr)

msg[Subject]=Header(hhh,这是二封测试信,utf-8).encode()

#定义邮件正文

msg.attach(MIMEText(使用python发来的邮件3,plain,utf-8))

#加附件

with open(rC:UsersAdministratorDesktop est est0.jpg,rb) as f:

# 设置附件的MIME和文件名,这里是jpg类型,可以换png或其他类型:

mime=MIMEBase(image,jpg,filename=test0.jpg)

mime.add_header(Content-Disposition,attchment,filename=test0.jpg)

mime.add_header(Content-ID,<0>)

mime.add_header(X-Attachment-ID,0)

mime.set_payload(f.read())

encoders.encode_base64(mime)

msg.attach(mime)

#定义发送文件

server=smtplib.SMTP_SSL(smtp_server,465)

server.set_debuglevel(1)

server.login(from_addr,password)

server.sendmail(from_addr,[to_addr],msg.as_string())

server.quit()

经验分享 程序员 微信小程序 职场和发展