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())
  • 相关阅读:
    53. Maximum Subarray
    64. Minimum Path Sum
    28. Implement strStr()
    26. Remove Duplicates from Sorted Array
    21. Merge Two Sorted Lists
    14. Longest Common Prefix
    7. Reverse Integer
    412. Fizz Buzz
    linux_修改域名(centos)
    linux_redis常用数据类型操作
  • 原文地址:https://www.cnblogs.com/NancyRM/p/8405099.html
Copyright © 2011-2022 走看看