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)

上面代码里发送的文件和图片我直接指定的,没有通过函数传递。有需要可以把文件名和图片名通过函数传入。

posted @ 2023-03-01 15:33  菲克纽斯  阅读(7)  评论(0编辑  收藏  举报