python自动发送邮件

1.发送文字内容+附件

首先,我们要知道自己发送邮件需要的步骤:
选择邮箱—>登录邮箱(用户名、密码)—>发件人(默认为自己)—>收件人—>主题—>正文—>附件—>发送
python发邮件的步骤与其类似,主要是模仿这一系列动作。

python发邮件需要掌握两个模块的用法,smtplib和email,这俩模块是python自带的,只需import即可使用。

smtplib模块主要负责发送邮件:是一个发送邮件的动作,连接邮箱服务器,登录邮箱,发送邮件(有发件人,收信人,邮件内容)。

email模块主要负责构造邮件:指的是邮箱页面显示的一些构造,如发件人,收件人,主题,正文,附件等。

简单来说,smtplib负责登陆邮箱,emali负责构造邮件

import smtplib    
from email.mime.multipart import MIMEMultipart    
from email.mime.text import MIMEText    
from email.mime.image import MIMEImage 
from email.header import Header   


##设置smtplib所需的参数
#下面的发件人,收件人是用于邮件传输的
smtpserver = 'smtp.qq.com'    #指定发送邮箱的格式smtp.163.com   smtp.qq.com  使用的邮箱的smtp服务器地址,这里是qq的smtp地址,其他同理
username = '******@qq.com'#发件人用户名
password='******'#发件人授权码,注意对于网页版邮箱,需要的不是密码,而是授权码,授权码要合着写在一起,中间不能有空格
sender='******@qq.com'#发件人,即发件人用户名
receiver='***@163.com'#接收人
#receiver=['******@126.com','******@126.com'] 收件人为多个收件人,用列表表示

#构造邮件主题
subject = 'Python email test,邮件主题'#邮件主题为中英文均可

##构造邮件对象MIMEMultipart对象,用于写邮件的即显示出来的邮件
#下面的主题,发件人,收件人,日期是显示在邮件页面上的
msg = MIMEMultipart('mixed') 
msg['Subject'] = subject  #这里的subject即为上面构造的邮件主题
msg['From'] = '******@qq.com <******@qq.com>' #邮件发件人
msg['To'] = '******@163.com' #邮件收件人
#msg['To'] = ";".join(receiver) #收件人为多个收件人,通过join将列表转换为以;为间隔的字符串
#msg['Date']='2012-3-16'

#构造正文内容
text = "这是你要的需求,具体见附件,Have  a good time"    
text_plain = MIMEText(text,'plain', 'utf-8') #邮件发送程序为了防止有些邮件阅读软件不能显示处理HTML格式的数据,通常都会用两类型分别为"text/plain"和"text/html"。构造MIMEText对象时,第一个参数是邮件正文,第二个参数是MIME的subtype,最后一定要用utf-8编码保证多语言兼容性。


#构造附件
sendfile=open(r'C:\\Users\\431&1301197.xlsx','rb').read() #打开附件内容(路径名\\文件名.文件类型 )   
text_att = MIMEText(sendfile, 'base64', 'utf-8') 
text_att["Content-Type"] = 'application/octet-stream' 
#text_att.add_header('Content-Disposition', 'attachment', filename='aa需求.txt')#设置附件名字,中英文
均可
msg.attach(text_att)   

#发送邮件
try:
smtp = smtplib.SMTP()    #实例
smtp.connect('smtp.qq.com')
#我们用set_debuglevel(1)就可以打印出和SMTP服务器交互的所有信息。
#smtp.set_debuglevel(1)  
smtp.login(username, password)    
smtp.sendmail(sender, receiver, msg.as_string())    
print ("邮件发送成功")
except smtplib.SMTPException:
print ("Error: 无法发送邮件")

2.定时发送邮件

我们需要安装schedule这个第三方包,anaconda中没有预装,如果是想用jupyter notebook中安装,代码如下:

! pip install schedule

我们用一个小函数举例

import schedule
import time

def job():#定义一个叫job的函数,函数的功能是打印'I'm working...'
    print("I'm working...")

    schedule.every(10).minutes.do(job)       #部署每10分钟执行一次job()函数的任务
    schedule.every().hour.do(job)            #部署每×小时执行一次job()函数的任务
    schedule.every().day.at("10:30").do(job) #部署在每天的10:30执行job()函数的任务
    schedule.every().monday.do(job)          #部署每个星期一执行job()函数的任务
    schedule.every().wednesday.at("13:15").do(job)#部署每周三的13:15执行函数的任务

while True:
    schedule.run_pending()
    time.sleep(1)    

#13-15都是检查部署的情况,如果任务准备就绪,就开始执行任务。   

第1行和第2行,是引入schedule和time。

第5行和第6行,是定义了一个叫job()的函数,调用这个函数时,函数会打印I’m working…。

第9行-13行都是相关的时间设置,你可以根据自己的需要来确定。

第15-17行是一个while循环,是去检查上面的任务部署情况,如果任务已经准备就绪,就去启动执行。其中,第15行的time.sleep(1)是让程序按秒来检查,如果检查太快,会浪费计算机的资源。

参考链接:
https://www.cnblogs.com/yufeihlf/p/5726619.html
https://www.runoob.com/python/python-email.html
https://blog.csdn.net/mymatin1004/article/details/82698422
https://blog.csdn.net/WxyangID/article/details/80633534
https://blog.csdn.net/u012209894/article/details/78414638
https://www.cnblogs.com/mylearning-log/p/10840421.html

Python中,可以使用内置的`smtplib`和`email`模块来自动化发送电子邮件。以下是一个简单的步骤说明: 1. 首先,你需要导入必要的库: ```python import smtplib from email.mime.text import MIMEText from email.header import Header ``` 2. 创建一封包含邮件内容的`MIMEText`实例: ```python msg = MIMEText('这是一封测试邮件', 'plain', 'utf-8') msg['From'] = Header('发件人邮箱地址', 'utf-8') # 发送者邮箱 msg['To'] = Header('收件人邮箱地址', 'utf-8') # 收件人邮箱 msg['Subject'] = Header('邮件主题', 'utf-8') # 邮件标题 ``` 3. 设置SMTP服务器信息(如使用Gmail,需要开启“允许不够安全的应用”设置): ```python smtp_server = 'smtp.gmail.com' smtp_port = 587 # 对于Gmail通常使用465 for TLS 或 587 for SMTP username = 'your_email@gmail.com' # 登录邮箱地址 password = 'your_password' # 邮箱密码 # 如果是SSL连接,则将port设为465 if smtp_port == 465: smtp = smtplib.SMTP_SSL(smtp_server, smtp_port) else: smtp = smtplib.SMTP(smtp_server, smtp_port) ``` 4. 登录SMTP服务器并发送邮件: ```python smtp.login(username, password) smtp.send_message(msg) smtp.quit() # 发送完邮件后关闭连接 ``` 5. 将上述代码封装在一个函数里,你可以随时调用这个函数来发送邮件,只需要提供收件人和内容即可。 请注意保护好你的邮箱账号和密码,并且实时检查SMTP服务器的要求,因为不同的邮件服务商可能有不同的配置。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值