zoukankan      html  css  js  c++  java
  • Python自动发送邮件(可带附件)

    Python内置对SMTP的支持,可以发送纯文本邮件、HTML邮件以及带附件的邮件。

    Python对SMTP支持有smtplib和email两个模块,email负责构造邮件,smtplib负责发送邮件。

    注意:使用前需要开启SMTP服务

    案例:使用163邮箱来结合smtp模块发送邮件


     准备工作:

    注册或者登陆163邮箱,进入“设置”-->“POP3/SMTP/IMAP”,打开“POP3/SMTP服务”,短信验证后输入客户端授权密码保存


    Python代码:

    send_email.py:

    import smtplib
    from email.mime.text import MIMEText
    from email.header import Header
    
    # 发送邮箱服务器
    smtpserver = "smtp.163.com"
    
    # 发送邮箱用户名密码
    user = "nancyrm2018@163.com"
    password = "输入自己的客户端授权密码"
    
    # 发送和接收邮箱
    sender = "nancyrm2018@163.com"
    receive = "nancyrm2018@126.com"
    
    # 发送邮件主题和内容
    subject = "Web Selenium 自动化测试报告"
    content = "<html><h1 style='color:red'>自动化测试,自学成才</h1></html>"
    
    # HTML邮件正文
    msg = MIMEText(content, 'html', 'utf-8')
    msg['Subject'] = Header(subject, 'utf-8')
    msg['From'] = "nancyrm2018@163.com"
    msg['To'] = "nancyrm2018@126.com"
    
    
    # SSL协议端口号要使用465
    smtp = smtplib.SMTP_SSL(smtpserver, 465)
    
    # HELO向服务器标志用户身份
    smtp.helo(smtpserver)
    
    # 服务器返回结果确认
    smtp.ehlo(smtpserver)
    
    # 登录邮箱服务器用户名密码
    smtp.login(user, password)
    
    print("Send email start...")
    smtp.sendmail(sender, receive, msg.as_string())
    smtp.quit()
    print("email send end!")

    代码分析:

    我们可以使用SMTP对象的sendmail方法发送邮件,其中部分方法如下:
    login(user,password)方法参数说明如下:

    • user:登录邮箱用户名
    • password:登录邮箱密码

    sendmail(from_addr,to_addrs,msg,..)方法参数说明如下:

    • from_addr:邮件发送者地址
    • to_addrs:字符串列表,邮件发送地址
    • msg:发送信息

    除SMTP模块,还用到了email模块,主要用来定义邮件的标题和正文:

    Header()方法用来定义邮件标题

    MIMETText()用于定义邮件正文,参数为html格式的文本。


     实现结果:

    登录126邮箱查看,显示内容如图:


     带附件的邮件:

    Python代码:

    from email.mime.multipart import MIMEMultipart
    # ...
    send_file = open(r"E:python_script123.png", "rb").read()
    
    att = MIMEText(send_file, "base64", 'utf-8')
    att['Content-Type'] = 'application/octet-stream'
    att['Content-Disposition'] = 'attachment;filename="logo.png"'
    
    msgRoot = MIMEMultipart()
    msgRoot.attach(MIMEText(content, 'html', 'utf-8'))
    msgRoot['Subject'] = subject
    msgRoot['From'] = sender
    msgRoot['To'] = ','.join(receives)
    msgRoot.attach(att)
    #...
    smtp.sendmail(sender, receives, msgRoot.as_string())
  • 相关阅读:
    Linux-redis实现session复制
    Linux-sentinel实现redis主从高可用
    Linux-初识redis
    Docker-docker-machine
    Linux-Nginx服务调优(下)
    Linux-Nginx服务调优(上)
    Linux-nginx.conf配置文件模板
    Linux-编译安装Nginx
    VS Code (visual studio code) VSC 编辑器(微软出品,js开发的编辑器)
    好用的在线工具
  • 原文地址:https://www.cnblogs.com/NancyRM/p/8405099.html
Copyright © 2011-2022 走看看