python发送邮件
絮絮叨的前言
去年开始琢磨股票了,作为一个数据富集的事情,自然要掌握更多的数据。
不过看盘研究盘面时候却容易犯懒。
有个想法,每天用邮件推送一点收盘的总结数据,在下班路上打开瞅瞅。
写了一年sql,这不又捡起python整个活
干活用的代码
网上使用python发送邮件的教程不少,这里主要参考了菜鸟教程的代码,并且实现。
提一嘴:
1.本次使用的是qq邮箱的smtp服务器,网易的没弄成功(ಥ_ಥ) ,要生成授权码。没有用本身的登录密码
2.这次的目的是发一张图片和一份文件
调试用的代码如下:
# -*- coding: utf-8 -*-
"""
Created on Fri Feb 24 15:13:36 2023
"""
from smtplib import SMTP_SSL
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.mime.image import MIMEImage
def sendMail(message,Subject,sender_show,recipient_show,to_addrs,cc_show=''):
'''
:param message: str 邮件内容
:param Subject: str 邮件主题描述
:param sender_show: str 发件人显示,不起实际作用如:"xxx"
:param recipient_show: str 收件人显示,不起实际作用 多个收件人用','隔开如:"xxx,xxxx"
:param to_addrs: str 实际收件人
:param cc_show: str 抄送人显示,不起实际作用,多个抄送人用','隔开如:"xxx,xxxx"
'''
# 填写真实的发邮件服务器用户名、密码
user = '25XXXXXXXX69@qq.com'
password = 'xuXXXXXXXXXXiig' #授权码
# 邮件内容
# msg = MIMEText(message, 'plain', _charset="utf-8")
msg=MIMEMultipart('related')
# 邮件主题描述
msg["Subject"] = Subject
# 发件人显示,不起实际作用
msg["from"] = sender_show
# 收件人显示,不起实际作用
msg["to"] = recipient_show
# 抄送人显示,不起实际作用
msg["Cc"] = cc_show
#添加附件
att=MIMEText(open('.\hisdata\test.csv',encoding='utf-8').read(),'base64','utf-8')
att["Content-Type"]='application/octet-stream'
att['Content-Disposition']='attachment;filename="test.csv"'
msg.attach(att)
# 添加图片
mail_msg="""
<p><img decoding="async" src="cid:image1"></p>
"""
msgAlternative=MIMEMultipart('alternative')
msgAlternative.attach(MIMEText(mail_msg,'html','utf-8'))
msg.attach(msgAlternative)
fp = open(r'.\hisdata\test.png', 'rb')
msgImage = MIMEImage(fp.read())
fp.close()
# 定义图片 ID,在 HTML 文本中引用
msgImage.add_header('Content-ID', '<image1>')
msg.attach(msgImage)
with SMTP_SSL(host="smtp.qq.com",port=465) as smtp:
# 登录发邮件服务器
smtp.login(user = user, password = password)
# 实际发送、接收邮件配置
smtp.sendmail(from_addr = user, to_addrs=to_addrs.split(','), msg=msg.as_string())
if __name__ =='__main':
message = 'Python 测试邮件...' # 正文内容
Subject = '主题测试' #标题
sender_show = '复盘程序' #发送人
recipient_show = '本人' # 显示收件人
to_addrs = '2XXXXXX69@qq.com' # 收件邮箱,可以为列表
sendMail(message,Subject,sender_show,recipient_show,to_addrs)
上面代码里发送的文件和图片我直接指定的,没有通过函数传递。有需要可以把文件名和图片名通过函数传入。