利用python自动发送带附件的邮件

利用python自动发送邮件

说道邮件,必须要了解相关的协议。

简单地说,SMTP管‘发’,POP3/IMAP管‘收’。

    POP3协议允许电子邮件客户端下载服务器上的邮件,但是在客户端的操作(如移动邮件、标记已读等),不会反馈到服务器上,比如通过客户端收取了邮箱中的3封邮件并移动到其他文件夹,邮箱服务器上的这些邮件是没有同时被移动的 。

     而IMAP提供webmail 与电子邮件客户端之间的双向通信,客户端的操作都会反馈到服务器上,对邮件进行的操作,服务器上的邮件也会做相应的动作。

    同时,IMAP像POP3那样提供了方便的邮件下载服务,让用户能进行离线阅读。IMAP提供的摘要浏览功能可以让你在阅读完所有的邮件到达时间、主题、发件人、大小等信息后才作出是否下载的决定。此外,IMAP 更好地支持了从多个不同设备中随时访问新邮件。

     明白了协议还必须明白邮件服务器。python发送邮件的整个过程其实就是我利用python登陆我自己的163邮箱,然后用我自己的163邮箱给别人发邮件。当然连接我自己的163就必须用我自己的账号密码来登陆163邮件服务器的某一个端口。

利用python自动发送带附件的邮件_第1张图片

Python对SMTP支持有smtplib和email两个模块,email负责构造邮件,smtplib负责发送邮件。
而如下面代码,python需要首先实例化一个message的容器。然后用smtplib这个模块发送它。
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.header import Header
import os
smtpserver = 'smtp.163.com'
smtpport = 465
sender = '*******@163.com'
sender_pwd = input('请输入密码')
rece = '*******@qq.com'
mail_username = ''


# 创建一个带附件的邮件实例
message=MIMEMultipart()
# 编辑邮件的内容

# 往邮件容器中添加内容。这是邮件的主体
mail_title = '我发送的一个图片'
mail_inside = MIMEText(r'这是我程序自动发送的。内含图片','plain','utf-8')
# 邮件的其他属性
message['From'] = sender
message['To'] = rece
message['Subject'] = Header(mail_title,'utf-8')
message.attach(mail_inside)


#构造附件txt附件1
attr1=MIMEText(open(r'D:\houseinformation.txt','rb').read(),'base64','utf-8')
attr1["content_Type"]='application/octet-stream'
attr1["Content-Disposition"] = 'attachment; filename="houseinformation.txt"'  # 表示这是附件,名字是啥
message.attach(attr1)



# 构造图片附件2
att2 = MIMEText(open(r'D:\flower.jpg','rb').read(), 'base64', 'utf-8')
att2["Content-Type"] = 'application/octet-stream'
att2["Content-Disposition"] = 'attachment; filename="flower.jpg"'
message.attach(att2)

#构造html附件
att3 = MIMEText(open('report_test.html', 'rb').read(), 'base64', 'utf-8')
att3["Content-Type"] = 'application/octet-stream'
att3["Content-Disposition"] = 'attachment; filename="report_test.html"'
message.attach(att3)


smtpobj = smtplib.SMTP_SSL(smtpserver, port=smtpport)
smtpobj.login(sender, sender_pwd)
smtpobj.sendmail(sender,rece,message.as_string())
print ('邮件发送成功')
smtpobj.quit()

      需要注意的是。邮件系统都有针对垃圾邮件的策略。所以发送邮件的时候一不小就会被当做垃圾邮件被屏蔽。注意事项有:不能重复发送同一内容;不能高频率的发送邮件;不能发送大量的邮件。。。。。。等等。

    需要交流请联系我。 [email protected]

你可能感兴趣的:(python自动化)