zoukankan      html  css  js  c++  java
  • python发送email邮件

    一.开启邮箱SMTP服务

    发送邮件需要使用SMTP服务器,常用的免费服务器有:163、126、qq等邮箱。

    QQ邮箱配置方式如下:

    1) 登录qq邮箱,选择【设置】-【账户】

    2) 在POP3/IMAP/SMAP/Exchage/CardDAV/CalDAV服务中,找到POP3/SMTP服务和IMAP/SMTP服务,点击开启。

    163邮箱配置方式如下:

    1)注册163邮箱,登录后设置。

    2) 在新页面点击“客户端授权密码”,勾选“开启”,弹出新窗口填写手机验证码。

    3) 填写授权码

    4) 提示开启成功。

    二、使用python发送邮件

    • 使用python自带的模块:smptlib、email
    import smtplib
    from email.mime.text import MIMEText
    from email.header import Header

    1、发送普通的邮件

    # 发送邮件的步骤
    import smtplib
    from email.mime.text import MIMEText     # 用来构造文本类型的邮件
    from email.header import Header          # 用来构造邮件的头部
    # 第一步:创建一个SMTP的对象
    s = smtplib.SMTP()
    # 第二步:连接到SMTP的服务器
    host = 'smtp.163.com'    # 设置163邮箱服务器,端口为:25
    port = 25
    #  host = 'smtp.qq.com'  port = 465  # 设置qq邮箱服务器,端口为:465
    s.connect(host,port)       # 连接服务器
    # s.connect(host = 'smtp.163.com',port = 25)
    # 第三步:登录SMTP服务器
    mail_user = '18814726725@163.com'           # 163邮箱的用户名
    mail_pass = 'password'                      # 注意:此处填写的是邮箱的SMTP服务器授权码
    s.login(user=mail_user,password=mail_pass)
    # 第四步:构建邮件内容
    content = '使用python测试发送邮件'             # 构建邮件内容
    msg = MIMEText(content,_charset='utf8')     # _charset 指定编码格式
    msg['Subject'] = Header('测试报告','utf8')   # 邮件主题
    msg['From'] = 'wl18814726725@163.com'       # 发件人邮箱,可传入列表,用于给多个人发送文件
    msg['To'] = '1572533878@qq.com'             # 收件人
    
    # 第五步:发送邮件
    s.sendmail(from_addr=msg['From'],to_addrs=msg['To'],msg=msg.as_string())     #将邮件内容转换为字符串

    2、发送HTML格式邮件及附件

    import smtplib
    from email.mime.text import MIMEText     # 文本类型的邮件,用来构造邮件
    from email.header import Header          # 用来构造邮件的头部
    from email.mime.application import MIMEApplication   
    from email.mime.multipart import MIMEMultipart  # 用来构造附件
    
    # 发送邮件的步骤
    # 第一步:创建一个SMTP的对象
    s = smtplib.SMTP()
    # 第二步:连接到SMTP的服务器
    host = 'smtp.163.com'    # 设置163邮箱服务器,端口为:25
    port = 25
    #  host = 'smtp.qq.com'    # 设置qq邮箱服务器,端口为:465
    s.connect(host,port)   # 连接服务器
    # 第三步:登录SMTP服务器
    mail_user = 'wl18814726725@163.com'     # 163邮箱的用户名
    mail_pass = 'wl987654321'               # 注意:此处填写的是邮箱的SMTP服务器授权码
    s.login(user=mail_user,password=mail_pass)
    
    # 构造文本邮件内容
    content = '使用python测试发送邮件'             # 构建邮件内容
    textcontent = MIMEText(content,_charset='utf8')        # _charset 指定编码格式
    # 构造附件(二进制字节流形式)
    part = MIMEApplication(open("report.html",'rb').read(),_subtype=None) 
    # part = MIMEApplication(open("report.html",'rb').read()) 需要查看_subtype=None 是否会引发异常
    part.add_header('content-disposition', 'attachment', filename='report18.html')  # 对方收到邮件之后,附件在邮件中显示的名称
    # 封装一封邮件
    msg = MIMEMultipart()
    # 加入文本内容
    msg.attach(textcontent)
    msg.attach(part)
    # 发送邮件
    msg['From'] = 'wl18814726725@163.com'       #发件人邮箱
    msg['To'] = '1572533878@qq.com'             #收件人
    
    #第五步:发送邮件
    s.sendmail(from_addr='wl18814726725@163.com',to_addrs='1572533878@qq.com',msg=msg.as_string())      # 将邮件内容转换为字符串
      定义send_email函数
    import smtplib
    from email.mime.text import MIMEText     #文本类型的邮件,用来构造邮件
    from email.header import Header          #用来构造邮件的头部
    from email.mime.application import MIMEApplication
    from email.mime.multipart import MIMEMultipart  #用来构造附件
    
    def send_email(filepath):
        """
        :param filepath:   #传入报告文件的路径
        :return:
        """
        # 发送邮件的步骤
        # 第一步:创建一个SMTP的对象
        s = smtplib.SMTP()
        # 第二步:连接到SMTP的服务器
        host = 'smtp.163.com'    #设置163邮箱服务器,端口为:25
        port = 25
        #  host = 'smtp.qq.com'    #设置qq邮箱服务器,端口为:465
        s.connect(host,port)   #连接服务器
        # 第三步:登录SMTP服务器
        mail_user = 'wl18814726725@163.com'     #163邮箱的用户名
        mail_pass = 'wl987654321'               #注意:此处填写的是邮箱的SMTP服务器授权码
        s.login(user=mail_user,password=mail_pass)
    
        #构造文本邮件内容
        content = '使用python测试发送邮件'             #构建邮件内容
        textcontent = MIMEText(content,_charset='utf8')        #_charset 指定编码格式
        #构造附件(二进制字节流形式)
        part = MIMEApplication(open(filepath,'rb').read())
        part.add_header('content-disposition', 'attachment', filename='report988.html')  #对方收到邮件之后,附件在邮件中显示的名称
        # 封装一封邮件
        msg = MIMEMultipart()
        #加入附件和文本内容
        msg.attach(textcontent)
        msg.attach(part)
        #发送邮件
        msg['From'] = 'wl18814726725@163.com'       #发件人邮箱
        msg['To'] = '1572533878@qq.com'             #收件人
    
        #第五步:发送邮件
        s.sendmail(from_addr=msg['From'],to_addrs=msg['To'],msg=msg.as_string())      #将邮件内容转换为字符串
    
    send_email('report.html')

    定义send_email函数

    import smtplib
    from email.mime.text import MIMEText     # 文本类型的邮件,用来构造邮件
    from email.header import Header          # 用来构造邮件的头部
    from email.mime.application import MIMEApplication   
    from email.mime.multipart import MIMEMultipart  # 用来构造附件
    
    # 发送邮件的步骤
    # 第一步:创建一个SMTP的对象
    s = smtplib.SMTP()
    # 第二步:连接到SMTP的服务器
    host = 'smtp.163.com'    # 设置163邮箱服务器,端口为:25
    port = 25
    #  host = 'smtp.qq.com'    # 设置qq邮箱服务器,端口为:465
    s.connect(host,port)   # 连接服务器
    # 第三步:登录SMTP服务器
    mail_user = 'wl18814726725@163.com'     # 163邮箱的用户名
    mail_pass = 'password'               # 注意:此处填写的是邮箱的SMTP服务器授权码
    s.login(user=mail_user,password=mail_pass)
    
    # 构造文本邮件内容
    content = '使用python测试发送邮件'             # 构建邮件内容
    textcontent = MIMEText(content,_charset='utf8')        # _charset 指定编码格式
    # 构造附件(二进制字节流形式)
    part = MIMEApplication(open("report.html",'rb').read(),_subtype=None) 
    # part = MIMEApplication(open("report.html",'rb').read()) 需要查看_subtype=None 是否会引发异常
    part.add_header('content-disposition', 'attachment', filename='report18.html')  # 对方收到邮件之后,附件在邮件中显示的名称
    # 封装一封邮件
    msg = MIMEMultipart()
    # 加入文本内容
    msg.attach(textcontent)
    msg.attach(part)
    # 发送邮件
    msg['From'] = 'wl18814726725@163.com'       #发件人邮箱
    msg['To'] = '1572533878@qq.com'             #收件人
    
    #第五步:发送邮件
    s.sendmail(from_addr='wl18814726725@163.com',to_addrs='1572533878@qq.com',msg=msg.as_string())      # 将邮件内容转换为字符串

    使用python发送邮件时常见错误:

    错误1:smtplib.SMTPAuthenticationError: (550, b'User has no permission')   

    我们使用python发送邮件时相当于自定义客户端根据用户名和密码登录,然后使用SMTP服务发送邮件,新注册的163邮箱是默认不开启客户端授权的(对指定的邮箱大师客户端默认开启),因此登录总是被拒绝,解决办法(以163邮箱为例):进入163邮箱-设置-客户端授权密码-开启(授权码是用于登录第三方邮件客户端的专用密码)。上述有专门的设置方法。

    错误2:smtplib.SMTPAuthenticationError: (535, b'Error: authentication failed')   

    以163邮箱为例,在开启POP3/SMTP服务,并开启客户端授权密码时会设置授权码,将这个授权码代替smtplib.SMTP().login(user,password)方法中的password即可。

    错误3:给多人发送邮件是,可能会出现“AttributeError: 'list' object has no attribute 'encode'”或者写了多个人,实际只给第一个人发了邮件等错误。

    # 将所有的收件人邮箱写入到一个字符串中
    msg['To'] = '1668010021@qq.com, 1572533878@qq.com, wangle@kyee.com.cn, 2685083419@qq.com'
    # 发送邮件时,通过字符串函数split分割,分割后返回的每一个邮箱账号
    s.sendmail(from_addr=msg['From'], to_addrs=msg['To'].split(','), msg=msg.as_string())
  • 相关阅读:
    组合模式/composite模式/对象结构型模式
    迭代器模式/iterator模式/对象行为型模式
    复制Eclipse工作空间设置
    各种命令
    Java相关框架
    基于hk2框架的功能测试Mock注入
    个人项目----词频统计(补全功能)
    小组项目----用户需求调查
    四人小组项目申请
    补第一周“四人小组项目“
  • 原文地址:https://www.cnblogs.com/wanglle/p/12838856.html
Copyright © 2011-2022 走看看