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()
