精华内容
下载资源
问答
  • Python自动发邮件脚本

    2020-09-21 09:24:32
    本文主要介绍了Python自动发邮件脚本的相关知识。具有很好的参考价值,下面跟着小编一起来看下吧
  • Python自动发邮件

    万次阅读 2017-10-07 13:39:14
    摘要:使用Python利用自己的QQ邮箱发送邮件 步骤: 首先登录到自己的QQ邮箱,获取授权码 在此处选择”设置”选项 选择”账户”,下拉找到如图内容,选择开启 获得授权码后将其写在下面程序中,然后就可以给自己...

    摘要:本文介绍如何使用Python发邮件,主要原理是利用QQ邮箱发送邮件


    作者:yooongchun
    微信公众号:yooongchun小屋
    这里写图片描述


    1.获取QQ邮箱授权

    • 首先登录到自己的QQ邮箱,获取授权码
      • 在此处选择"设置"选项
        这里写图片描述
      • 选择"账户",下拉找到如图内容,选择开启
        这里写图片描述
        这里写图片描述

    2. 编写代码

    获得授权码后将其写在下面程序中,然后就可以给自己的邮箱发邮件了

    
    # 使用QQ邮箱发送邮件
    # Content是发送的内容,格式为{'header':'你的发送主题','text':'你的正文内容'}
    # HostUserName你自己的QQ邮箱名
    # KEY:QQ邮箱授权码,注意,不是密码,如何获取授权码请百度
    # ToUserName:接收方的邮箱账号
    import smtplib
    from email.mime.text import MIMEText
    
    def send_mail(Content, HostUserName, KEY, ToUserName):
        # 你的邮箱账号
        _user = HostUserName
        # 这里填写邮箱授权码,如何获得QQ邮箱授权码,请百度
        _pwd = KEY
        # 这里是接收方邮箱账号
        _to = ToUserName
    
        msg = MIMEText(Content['text'])
        msg["Subject"] = Content['header']
        msg["From"] = _user
        msg["To"] = _to
    
        try:
            s = smtplib.SMTP_SSL("smtp.qq.com", 465)
            s.login(_user, _pwd)
            s.sendmail(_user, _to, msg.as_string())
            s.quit()
            print("发送成功!")
        except smtplib.SMTPException as e:
            print("发送失败,%s" % e)
            return e
    

    3.测试结果

       HostUserName = "yooongchun@foxmail.com"
        KEY = "cswxlzceqmuqbjcc"
        ToUserName = "zyc121561@sjtu.edu.cn"
        send_mail({
            'text': '你好永春,这是一个测试邮件!',
            'header': '测试邮件'
        }, HostUserName, KEY, ToUserName)
    
    

    这里写图片描述

    4.Have fun!

    展开全文
  • python发邮件需要掌握两个模块的用法,smtplib和email,这俩模块是python自带的,只需import即可使用。这篇文章主要介绍了python自动发邮件总结及实例说明 ,需要的朋友可以参考下
  • 本篇文章主要介绍了python自动发邮件库yagmail的示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
  • 自动发送邮件可以将常规化得需求自动化,解放双手做更多有意义的事情
    背景: 自动发送邮件可以将常规化得需求自动化,解放双手做更多有意义的事情

    以下即为代码:

    # -*- coding: utf-8 -*-
    """
    Created on Wed Jul  3 12:22:58 2019
    
    @author: wuxian
    """
    import smtplib
    import email.mime.multipart
    import email.mime.text
    import email.mime.base
    import os.path
    import xlwt
    import time
    import schedule
    import sys
    import os
    with open(r'.\Desktop\PID.txt','a') as file:
        file.write(time.strftime('%Y-%m-%d %H:%M:%S',time.localtime())+'\t')
        file.write(str(sys.argv[0]).split('\\')[-1]+'\t')
        file.write('PID:'+str(os.getpid())+'\t')
        file.write('PPID:'+str(os.getppid())+'\n')
    #open-'a':写入打开,如果文件存在则添加到尾部
    # =============================================================================
    #连接数据库
    # =============================================================================
    import pymysql
    def dbreadsql(v_sql):
        conn = pymysql.connect(host=None, port=3306,
                           user='root', passwd='wx123456', db= 'testwuxian',
                           charset='utf8')
        cur = conn.cursor()
        cur.execute(v_sql)
        rows = cur.fetchall()
        cur.close()
        conn.close()
        return  rows
    
    
    sql0 = "select * from testwuxian.register_info"
    #sql1 = "select * from testwuxian.register_detail"
    sql2 = "select * from testwuxian.search_info"
    sql3 = "select * from testwuxian.search_detail"
    
    
    rows0 = dbreadsql(sql0)
    #rows1 = dbreadsql(sql1)
    rows2 = dbreadsql(sql2)
    rows3 = dbreadsql(sql3)
    
    
    # 生成excel文件名
    def mailsend(rows0,rows2,rows3):
        v_file_name = 'COCOK生产库数据.xls'
        # 生成excel文件
        book = xlwt.Workbook()#
        sheet1 = book.add_sheet('注册人数', cell_overwrite_ok=True)
    #    sheet2 = book.add_sheet('注册明细', cell_overwrite_ok=True)
        sheet3 = book.add_sheet('关键字搜索次数', cell_overwrite_ok=True)
        sheet4 = book.add_sheet('关键字搜索明细', cell_overwrite_ok=True)
        #表头标题
        sheet1.write(0, 0, '注册日期')
        sheet1.write(0, 1, '注册人数')
        
    #    sheet2.write(0, 0, '注册日期')
    #    sheet2.write(0, 1, '手机号')
    #    sheet2.write(0, 2, '设备型号')
    #    sheet2.write(0, 3, '神策标识码') 
        
        sheet3.write(0, 0, '搜索日期')
        sheet3.write(0, 1, '搜索总次数')
        
        sheet4.write(0, 0, '搜索日期')
        sheet4.write(0, 1, '搜索关键字')
        sheet4.write(0, 2, '搜索次数')
    
        # 每一列写入excel文件,不然数据会全在一个单元格中
        for i in range(len(rows0)):
            for j in range(2):
                # print (rows[i][j])-
                # print ("--------")
                sheet1.write(i + 1, j, rows0[i][j])
    
    #    for i in range(len(rows1)):
    #        for j in range(4):
    #            # print (rows[i][j])-
    #            # print ("--------")
    #            sheet2.write(i + 1, j, rows1[i][j])            
                
        for i in range(len(rows2)):
            for j in range(2):
                # print (rows[i][j])-
                # print ("--------")
                sheet3.write(i + 1, j, rows2[i][j])   
                
        for i in range(len(rows3)):
            for j in range(3):
                # print (rows[i][j])-
                # print ("--------")
                sheet4.write(i + 1, j, rows3[i][j])               
        
        book.save("C:/Users/wuxian/Desktop/" + v_file_name)
        
        # 邮件信息
        From = "发送者邮箱"
        To =  "收件人邮箱"
        Cc = "抄送人邮箱"
        file_name = v_file_name
        server = smtplib.SMTP_SSL("smtp.aliyun.com",465)
        server.login("邮箱", "密码")  # 仅smtp服务器需要验证时
        
        # 构造MIMEMultipart对象做为根容器
        main_msg = email.mime.multipart.MIMEMultipart()
        
        # 构造MIMEText对象做为邮件显示内容并附加到根容器
        text_msg = email.mime.text.MIMEText("Hi All,\n \n  正文部分内容,请查收,谢谢。\n \n Best Wishes!")
        main_msg.attach(text_msg)
        
        
        # 构造MIMEBase对象做为文件附件内容并附加到根容器
        maintype,subtype = 'ershoufanglianjia','.xls'
        
        # 读入文件内容并格式化
        data = open("C:/Users/wuxian/Desktop/" + file_name, 'rb')
        file_msg = email.mime.base.MIMEBase(maintype, subtype)
        file_msg.set_payload(data.read())
        data.close()
        email.encoders.encode_base64(file_msg)
        
        # 设置附件头
        basename = os.path.basename("./Desktop/" + file_name)
        file_msg.add_header('Content-Disposition',
                            # 附件如果有中文会出现乱码问题,加入gbk
                            'attachment', filename=('gbk', '', basename))
        main_msg.attach(file_msg)
        
       
        # 设置根容器属性
        main_msg['From'] = From
        main_msg['To'] = To
        main_msg['Cc'] = Cc
        main_msg['Subject'] = "邮件主题"
        main_msg['Date'] = email.utils.formatdate()
        
        # 得到格式化后的完整文本
        fullText = main_msg.as_string()
    # 用smtp发送邮件
        try:
            server.sendmail(From, To.split(',') + Cc.split(','), fullText)
            print("发送成功")
        except Exception as e:
            print("发送失败")
            print(str(e))
        finally:
            server.quit()         
    mailsend(rows0,rows2,rows3)  
      
    #若是需要定时发送则使用以下代码:
    #schedule.every().day.at('8:00').do(mailsend) 
    #while True:
    #    schedule.run_pending()
    #    time.sleep(60)
    
    展开全文
  • [333]python自动发邮件总结及实例说明

    千次阅读 2018-07-14 15:28:03
    python发邮件需要掌握两个模块的用法,smtplib和email,这俩模块是python自带的,只需import即可使用。smtplib模块主要负责发送邮件,email模块主要负责构造邮件。 smtplib模块主要负责发送邮件:是一个发送邮件的...

    python发邮件需要掌握两个模块的用法,smtplib和email,这俩模块是python自带的,只需import即可使用。smtplib模块主要负责发送邮件,email模块主要负责构造邮件。

    smtplib模块主要负责发送邮件:是一个发送邮件的动作,连接邮箱服务器,登录邮箱,发送邮件(有发件人,收信人,邮件内容)。

    email模块主要负责构造邮件:指的是邮箱页面显示的一些构造,如发件人,收件人,主题,正文,附件等。

    image

    1.smtplib模块

    smtplib使用较为简单。以下是最基本的语法。

    导入及使用方法如下:

    import smtplib
    
    smtp = smtplib.SMTP() 
    smtp.connect('smtp.163.com',25) 
    smtp.login(username, password) 
    smtp.sendmail(sender, receiver, msg.as_string()) 
    smtp.quit()
    

    说明:

    smtplib.SMTP():实例化SMTP()

    connect(host,port):

    • host:指定连接的邮箱服务器。常用邮箱的smtp服务器地址如下:

    新浪邮箱:smtp.sina.com,新浪VIP:smtp.vip.sina.com,搜狐邮箱:smtp.sohu.com,126邮箱:smtp.126.com,139邮箱:smtp.139.com,163网易邮箱:smtp.163.com。

    • port:指定连接服务器的端口号,默认为25.

    login(user,password):

    • user:登录邮箱的用户名。

    • password:登录邮箱的密码,像笔者用的是网易邮箱,网易邮箱一般是网页版,需要用到客户端密码,需要在网页版的网易邮箱中设置授权码,该授权码即为客户端密码。

    sendmail(from_addr,to_addrs,msg,…):

    • from_addr:邮件发送者地址

    • to_addrs:邮件接收者地址。字符串列表[‘接收地址1’,‘接收地址2’,‘接收地址3’,…]或’接收地址’

    • msg:发送消息:邮件内容。一般是msg.as_string():as_string()是将msg(MIMEText对象或者MIMEMultipart对象)变为str。

    • quit():用于结束SMTP会话。

    2.email模块

    email模块下有mime包,mime英文全称为“Multipurpose Internet Mail Extensions”,即多用途互联网邮件扩展,是目前互联网电子邮件普遍遵循的邮件技术规范。

    该mime包下常用的有三个模块:text,image,multpart。

    导入方法如下:

    from email.mime.multipart import MIMEMultipart    
    from email.mime.text import MIMEText    
    from email.mime.image import MIMEImage
    

    构造一个邮件对象就是一个Message对象,如果构造一个MIMEText对象,就表示一个文本邮件对象,如果构造一个MIMEImage对象,就表示一个作为附件的图片,要把多个对象组合起来,就用MIMEMultipart对象,而MIMEBase可以表示任何对象。它们的继承关系如下:

    Message
    ± MIMEBase
    ± MIMEMultipart
    ± MIMENonMultipart
    ± MIMEMessage
    ± MIMEText
    ± MIMEImage

    2.1 text说明

    邮件发送程序为了防止有些邮件阅读软件不能显示处理HTML格式的数据,通常都会用两类型分别为"text/plain"和"text/html"

    构造MIMEText对象时,第一个参数是邮件正文,第二个参数是MIME的subtype,最后一定要用utf-8编码保证多语言兼容性。

    2.1.1添加普通文本

    text = "Hi!\nHow are you?\nHere is the link you wanted:\nhttp://www.baidu.com"    
    text_plain = MIMEText(text,'plain', 'utf-8')   
    

    查看MIMEText属性:可以观察到MIMEText,MIMEImage和MIMEMultipart的属性都一样。

    print dir(text_plain)
    ['__contains__', '__delitem__', '__doc__', '__getitem__', '__init__', '__len__', '__module__', '__setitem__', '__str__', '_charset', '_default_type', '_get_params_preserve', '_headers', '_payload', '_unixfrom', 'add_header', 'as_string', 'attach', 'defects', 'del_param', 'epilogue', 'get', 'get_all', 'get_boundary', 'get_charset', 'get_charsets', 'get_content_charset', 'get_content_maintype', 'get_content_subtype', 'get_content_type', 'get_default_type', 'get_filename', 'get_param', 'get_params', 'get_payload', 'get_unixfrom', 'has_key', 'is_multipart', 'items', 'keys', 'preamble', 'replace_header', 'set_boundary', 'set_charset', 'set_default_type', 'set_param', 'set_payload', 'set_type', 'set_unixfrom', 'values', 'walk']
    

    2.1.2添加超文本

    html = """
    <html>  
      <body>  
        <p> 
           Here is the <a href="http://www.baidu.com">link</a> you wanted.
        </p> 
      </body>  
    </html>  
    """    
    text_html = MIMEText(html,'html', 'utf-8')  
    

    2.1.3添加附件

    sendfile=open(r'D:\pythontest\1111.txt','rb').read()
    text_att = MIMEText(sendfile, 'base64', 'utf-8')    
    text_att["Content-Type"] = 'application/octet-stream'    
    text_att["Content-Disposition"] = 'attachment; filename="显示的名字.txt"'  
    
    #excle附件
    from email.mime.application import MIMEApplication
    
    #filepath = 'C:/Users/SheYuanWang/Desktop/数据.xlsx'
    basename = "债投.xls"
    text_att = MIMEApplication(open(filepath, 'rb').read())
    text_att.add_header('Content-Disposition', 'attachment',filename=('gbk', '', basename))  # 注意:此处basename要转换为gbk编码,否则中文会有乱码。
    msg.attach(text_att)
    

    2.2 image说明

    添加图片:

    sendimagefile=open(r'D:\pythontest\testimage.png','rb').read()
    image = MIMEImage(sendimagefile)
    image.add_header('Content-ID','<image1>')
    

    查看MIMEImage属性:

    print dir(image)
    ['__contains__', '__delitem__', '__doc__', '__getitem__', '__init__', '__len__', '__module__', '__setitem__', '__str__', '_charset', '_default_type', '_get_params_preserve', '_headers', '_payload', '_unixfrom', 'add_header', 'as_string', 'attach', 'defects', 'del_param', 'epilogue', 'get', 'get_all', 'get_boundary', 'get_charset', 'get_charsets', 'get_content_charset', 'get_content_maintype', 'get_content_subtype', 'get_content_type', 'get_default_type', 'get_filename', 'get_param', 'get_params', 'get_payload', 'get_unixfrom', 'has_key', 'is_multipart', 'items', 'keys', 'preamble', 'replace_header', 'set_boundary', 'set_charset', 'set_default_type', 'set_param', 'set_payload', 'set_type', 'set_unixfrom', 'values', 'walk']
    

    2.3 multpart说明

    常见的multipart类型有三种:multipart/alternative, multipart/related和multipart/mixed。

    • 邮件类型为"multipart/alternative"的邮件包括纯文本正文(text/plain)和超文本正文(text/html)。

    • 邮件类型为"multipart/related"的邮件正文中包括图片,声音等内嵌资源。

    • 邮件类型为"multipart/mixed"的邮件包含附件。向上兼容,如果一个邮件有纯文本正文,超文本正文,内嵌资源,附件,则选择mixed类型。

    msg = MIMEMultipart(‘mixed’)
    我们必须把Subject,From,To,Date添加到MIMEText对象或者MIMEMultipart对象中,邮件中才会显示主题,发件人,收件人,时间(若无时间,就默认一般为当前时间,该值一般不设置)。

    msg = MIMEMultipart('mixed') 
    msg['Subject'] = 'Python email test'
    msg['From'] = 'XXX@163.com <XXX@163.com>'
    msg['To'] = 'XXX@126.com'
    msg['Date']='2012-3-16'
    

    查看MIMEMultipart属性:

    msg = MIMEMultipart('mixed') 
    print dir(msg) 
    结果:
    
    ['__contains__', '__delitem__', '__doc__', '__getitem__', '__init__', '__len__', '__module__', '__setitem__', '__str__', '_charset', '_default_type', '_get_params_preserve', '_headers', '_payload', '_unixfrom', 'add_header', 'as_string', 'attach', 'defects', 'del_param', 'epilogue', 'get', 'get_all', 'get_boundary', 'get_charset', 'get_charsets', 'get_content_charset', 'get_content_maintype', 'get_content_subtype', 'get_content_type', 'get_default_type', 'get_filename', 'get_param', 'get_params', 'get_payload', 'get_unixfrom', 'has_key', 'is_multipart', 'items', 'keys', 'preamble', 'replace_header', 'set_boundary', 'set_charset', 'set_default_type', 'set_param', 'set_payload', 'set_type', 'set_unixfrom', 'values', 'walk']
    

    说明:

    • msg.add_header(_name,_value,**_params):添加邮件头字段。

    • msg.as_string():是将msg(MIMEText对象或者MIMEMultipart对象)变为str,如果只有一个html超文本正文或者plain普通文本正文的话,一般msg的类型可以是MIMEText;如果是多个的话,就都添加到MIMEMultipart,msg类型就变为MIMEMultipart。

    • msg.attach(MIMEText对象或MIMEImage对象):将MIMEText对象或MIMEImage对象添加到MIMEMultipart对象中。MIMEMultipart对象代表邮件本身,MIMEText对象或MIMEImage对象代表邮件正文。

    以上的构造的文本,超文本,附件,图片都何以添加到MIMEMultipart(‘mixed’)中:

    msg.attach(text_plain)    
    msg.attach(text_html)    
    msg.attach(text_att)    
    msg.attach(image)
    

    3.文字,html,图片,附件实现实例

    #coding: utf-8    
      
    import smtplib    
    from email.mime.multipart import MIMEMultipart    
    from email.mime.text import MIMEText    
    from email.mime.image import MIMEImage 
    from email.header import Header   
        
    #设置smtplib所需的参数
    #下面的发件人,收件人是用于邮件传输的。
    smtpserver = 'smtp.163.com'
    username = 'XXX@163.com'
    password='XXX'
    sender='XXX@163.com'
    #receiver='XXX@126.com'
    #收件人为多个收件人
    receiver=['XXX@126.com','XXX@126.com']
    
    subject = 'Python email test'
    #通过Header对象编码的文本,包含utf-8编码信息和Base64编码信息。以下中文名测试ok
    #subject = '中文标题'
    #subject=Header(subject, 'utf-8').encode()
        
    #构造邮件对象MIMEMultipart对象
    #下面的主题,发件人,收件人,日期是显示在邮件页面上的。
    msg = MIMEMultipart('mixed') 
    msg['Subject'] = subject
    msg['From'] = 'XXX@163.com <XXX@163.com>'
    #msg['To'] = 'XXX@126.com'
    #收件人为多个收件人,通过join将列表转换为以;为间隔的字符串
    msg['To'] = ";".join(receiver) 
    #msg['Date']='2012-3-16'
    
    #构造文字内容   
    text = "Hi!\nHow are you?\nHere is the link you wanted:\nhttp://www.baidu.com"    
    text_plain = MIMEText(text,'plain', 'utf-8')    
    msg.attach(text_plain)    
    
    #构造图片链接
    sendimagefile=open(r'D:\pythontest\testimage.png','rb').read()
    image = MIMEImage(sendimagefile)
    image.add_header('Content-ID','<image1>')
    image["Content-Disposition"] = 'attachment; filename="testimage.png"'
    msg.attach(image)
    
    #构造html
    #发送正文中的图片:由于包含未被许可的信息,网易邮箱定义为垃圾邮件,报554 DT:SPM :<p><img src="cid:image1"></p>
    html = """
    <html>  
      <head></head>  
      <body>  
        <p>Hi!<br>  
           How are you?<br>  
           Here is the <a href="http://www.baidu.com">link</a> you wanted.<br> 
        </p> 
      </body>  
    </html>  
    """    
    text_html = MIMEText(html,'html', 'utf-8')
    text_html["Content-Disposition"] = 'attachment; filename="texthtml.html"'   
    msg.attach(text_html)    
    
    
    #构造附件
    sendfile=open(r'D:\pythontest\1111.txt','rb').read()
    text_att = MIMEText(sendfile, 'base64', 'utf-8') 
    text_att["Content-Type"] = 'application/octet-stream'  
    #以下附件可以重命名成aaa.txt  
    #text_att["Content-Disposition"] = 'attachment; filename="aaa.txt"'
    #另一种实现方式
    text_att.add_header('Content-Disposition', 'attachment', filename='aaa.txt')
    #以下中文测试不ok
    #text_att["Content-Disposition"] = u'attachment; filename="中文附件.txt"'.decode('utf-8')
    msg.attach(text_att)    
           
    #发送邮件
    smtp = smtplib.SMTP()    
    smtp.connect('smtp.163.com')
    #我们用set_debuglevel(1)就可以打印出和SMTP服务器交互的所有信息。
    #smtp.set_debuglevel(1)  
    smtp.login(username, password)    
    smtp.sendmail(sender, receiver, msg.as_string())    
    smtp.quit()
    

    方法二:

    # -*- coding: utf-8 -*-
    import smtplib  #加载smtplib模块
    from email.mime.text import MIMEText
    from email.utils import formataddr
    
    
    #发件人邮箱账号,为了后面易于维护,所以写成了变量
    my_sender='发件人邮箱账号'
    # 收件人邮箱账号,为了后面易于维护,所以写成了变量
    my_user='收件人邮箱账号'
    def mail():
        ret=True
        try:
            msg=MIMEText('填写邮件内容','plain','utf-8')
            # 括号里的对应发件人邮箱昵称、发件人邮箱账号
            msg['From']=formataddr(["发件人邮箱昵称",my_sender])   
            # 括号里的对应收件人邮箱昵称、收件人邮箱账号,,邮箱昵称可为空
            msg['To']=formataddr(["收件人邮箱昵称",my_user])
            # 邮件的主题,也可以说是标题
            msg['Subject']="主题" 
            
            # 发件人邮箱中的SMTP服务器,端口是25
            server=smtplib.SMTP("smtp.xxx.com",25)  
            # 括号中对应的是发件人邮箱账号、邮箱密码
            server.login(my_sender,"发件人邮箱密码")    
            # 括号中对应的是发件人邮箱账号、收件人邮箱账号、发送邮件
            server.sendmail(my_sender,[my_user,],msg.as_string())   
            server.quit()   #这句是关闭连接的意思
        except Exception:   #如果try中的语句没有执行,则会执行下面的ret=False
            ret=False
        return ret
    
    ret=mail()
    if ret:
        print("ok") #如果发送成功则会返回ok,稍等20秒左右就可以收到邮件
    else:
        print("filed")  #如果发送失败则会返回filed
    

    参考:https://www.cnblogs.com/yufeihlf/p/5726619.html
    https://www.cnblogs.com/xcblogs-python/p/5727238.html
    http://www.runoob.com/python/python-email.html
    http://help.163.com/09/1224/17/5RAJ4LMH00753VB8.html

    展开全文
  • Python提供smtplib模块,该模块定义了一个SMTP客户端会话对象,可用于使用SMTP或ESMTP侦听器守护程序向任何互联网机器发送邮件。 SMTP通讯的基本流程可以概括为以下几点: 1.连接SMTP服务器 2.登陆用户名和密码 ...

    简单邮件传输协议(SMTP)是一种协议,用于在邮件服务器之间发送电子邮件和路由电子邮件。Python提供smtplib模块,该模块定义了一个SMTP客户端会话对象,可用于使用SMTP或ESMTP侦听器守护程序向任何互联网机器发送邮件。

    SMTP通讯的基本流程可以概括为以下几点:

    1.连接SMTP服务器

    2.登陆用户名和密码

    3.发送指定邮件内容

    4.退出SMTP连接

              使用smtplib库

    一、发送纯文本格式邮件

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    25

    26

    27

    28

    29

    30

    31

    32

    33

    34

    #coding:utf-8

    import sys

    reload(sys)

    sys.setdefaultencoding('utf8')

    import smtplib

    from smtplib import SMTP

    from email.mime.text import MIMEText

    from email.header import Header

     

    #构造纯文本邮件内容

    msg = MIMEText('hello,send by Python.....','plain','utf-8')

     

    #发送者邮箱

    sender = 'xxxxx@XXXXX.com.cn'

     

    #发送者的登陆用户名和密码

    user = 'xxxxx@XXXX.com.cn'

    password = 'xxxxxx'

     

    #发送者邮箱的SMTP服务器地址

    smtpserver = 'xxxx'

     

    #接收者的邮箱地址

    receiver = ['xxxxxx@qq.com','xxxxxx@outlook.com'] #receiver 可以是一个list

     

    smtp = smtplib.SMTP() #实例化SMTP对象

    smtp.connect(smtpserver,25) #(缺省)默认端口是25 也可以根据服务器进行设定

    smtp.login(user,password) #登陆smtp服务器

    smtp.sendmail(sender,receiver,msg.as_string()) #发送邮件 ,这里有三个参数

    '''

    login()方法用来登录SMTP服务器,sendmail()方法就是发邮件,由于可以一次发给多个人,所以传入一个list,邮件正文

    是一个str,as_string()把MIMEText对象变成str。

    '''

    smtp.quit()

    运行之后就会收到邮件:

     

    但是仔细观察会发现:

    1.邮件没有主题

    2.看不到收件人的信息

    这是因为邮件主题、如何显示发件人、收件人等信息并不是通过SMTP协议发给MTA,而是包含在发给MTA的文本中的,所以,我们必须把From、To和Subject添加到MIMEText中,才是一封完整的邮件:

    1

    2

    3

    4

    5

    msg = MIMEText('hello,send by Python.....','plain','utf-8')

    msg['From'] = Header('Python测试','utf-8')

    msg['To'] = Header('管理员','utf-8')

    subject = 'python SMTP 测试邮件'

    msg['Subject'] = Header(subject,'utf-8')

    二、发送HTML格式的邮件

    如果我们要发送HTML邮件,而不是普通的纯文本文件怎么办?方法很简单,在构造MIMEText对象时,把HTML字符串传进去,再把第二个参数由plain变为html就可以了:

    1

    2

    msg = MIMEText('<html><h1>你好!<h1><html>','html','utf-8')

    #发送HTML格式邮件就只需要把对应的第二个参数改为html即可

    三、发送带附件的邮件

    发送带附件的邮件,首先要创建MIMEMultipart()实例,然后构造附件,如果有多个附件,可依次构造,最后利用smtplib.smtp发送。

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    25

    26

    27

    28

    29

    30

    31

    32

    33

    34

    35

    36

    37

    38

    39

    40

    41

    #coding:utf-8

    import sys

    reload(sys)

    sys.setdefaultencoding('utf8')

    import smtplib

    from email.mime.text import MIMEText

    from email.mime.multipart import MIMEMultipart

    from email.header import Header

     

    #发送邮件服务器

    smtpserver = 'xxxxx'

    #发送邮箱用户名和密码

    user = 'xxxxxx'

    password = 'xxxxxx'

    #发送邮箱

    sender = 'xxxxx'

    #接受邮箱

    receiver = 'xxxxxxx'

     

    #创建一个带附件的实例

    message = MIMEMultipart()

    message['From'] = Header('Python 测试','utf-8')

    message['To'] = Header('测试','utf-8')

    subject = 'Python SMTP邮件测试'

    message['Subject'] = Header(subject,'utf-8')

     

    #邮件正文内容

    message.attach(MIMEText('这是测试Python发送附件功能....','plain','utf-8'))

     

    #构造附件1,传送当前目录下的test.txt文件

    att1 = MIMEText(open('123.txt','rb').read(),'base64','utf-8')

    att1['Content-Type'] = 'application/octet-stream'

    #这里的filename可以任意写,写什么名字 邮件中就显示什么名字

    att1['Content-Disposition'] = 'attachment;filename:"123.txt"'

    message.attach(att1)

     

    smtp = smtplib.SMTP()

    smtp.connect(smtpserver,25)

    smtp.login(user,password)

    smtp.sendmail(sender,receiver,message.as_string())

    smtp.quit()

    小结

    使用Python的smtplib发送邮件十分简单,只要掌握了各种邮件类型的构造方法,正确设置好邮件头,就可以顺利发出。

    构造一个邮件对象就是一个Messag对象,如果构造一个MIMEText对象,就表示一个文本邮件对象,如果构造一个MIMEImage对象,就表示一个作为附件的图片,要把多个对象组合起来,就用MIMEMultipart对象,而MIMEBase可以表示任何对象。它们的继承关系如下:

    Message
    +- MIMEBase
       +- MIMEMultipart
       +- MIMENonMultipart
          +- MIMEMessage
          +- MIMEText
          +- MIMEImage

    这种嵌套关系就可以构造出任意复杂的邮件。你可以通过email.mime文档查看它们所在的包以及详细的用法

     

    import smtplib
    from email.mime.text import MIMEText
    from email.header import Header
    
    # 发送邮箱服务器
    smtpserver = 'smtp.sina.com'
    # 发送邮箱用户/密码
    user = 'username@sina.com'
    password = '123456'
    # 发送邮箱
    sender = 'username@sina.com'
    # 接收邮箱
    receiver = 'receive@126.com'
    # 发送邮件主题
    subject = 'Python email test'
    
    # 编写HTML类型的邮件正文
    msg = MIMEText('<html><h1>你好!</h1></html>','html','utf-8')
    msg['Subject'] = Header(subject, 'utf-8')
    
    
    # 连接发送邮件
    smtp = smtplib.SMTP()
    smtp.connect(smtpserver)
    smtp.login(user, password)
    smtp.sendmail(sender, receiver, msg.as_string())
    smtp.quit()

    其实,这段代码也并不复杂,只要你理解使用过邮箱发送邮件,那么以下问题是你必须要考虑的:

    • 你登录的邮箱帐号/密码
    • 对方的邮箱帐号
    • 邮件内容(标题,正文,附件)
    • 邮箱服务器(SMTP.xxx.com/pop3.xxx.com)

     

    使用yagmail 实现发邮件

    yagmail 可以更简单的来实现自动发邮件功能。

    github项目地址: https://github.com/kootenpv/yagmail

    安装

    pip install yagmail

    简单例子

    import yagmail
    
    #链接邮箱服务器
    yag = yagmail.SMTP( user="user@126.com", password="1234", host='smtp.126.com')
    
    # 邮箱正文
    contents = ['This is the body, and here is just text http://somedomain/image.png',
                'You can find an audio file attached.', '/local/path/song.mp3']
    
    # 发送邮件
    yag.send('taaa@126.com', 'subject', contents)
    

    总共四行代码搞定,是不是比上面的例子简单太多了。

    给多个用户发送邮件

    # 发送邮件
    yag.send(['aa@126.com','bb@qq.com','cc@gmail.com'], 'subject', contents)

    只需要将接收邮箱 变成一个list即可。

    发送带附件的邮件

    # 发送邮件
    yag.send('aaaa@126.com', '发送附件', contents, ["d://log.txt","d://baidu_img.jpg"])

    只需要添加要发送的附件列表即可。

    我都快感动哭了,到哪儿去找这么良心库去?简单的有点不像编程语言!

    展开全文
  • 0x01:由于业务需要用到这个功能,所以顺便简单讲下如何使用python实现。 整个流程如下所示: 登录->写邮件->发送 下面以使用qq邮箱发送为例: 首先需要再qq邮箱里面设置好SMTP这个件功能以及授权码。 ...
  • import smtplib from email.mime.text import MIMEText from email.utils import formataddr from datetime import ...# 件人邮箱账号 my_sender = 'l1525943131@163.com' # my_sender = '1525943131@qq.com' # 收...
  • 此问题是在mac机器上遇到 之前在windows平台运行ok的脚本在mac上报错 后来查了半天 发现是网络接入不对 切换下网络后问题就解决了 转载于:https://www.cnblogs.com/xiaobaichuangtianxia/p/5942348.html...
  • import smtplibfrom email.mime.text import MIMETextfrom email.utils import formataddrfrom datetime import datetime # 件人邮箱账号my_sender = 'XXXX@163.com'# my_sender = '1525943131@qq.com'# 收件人...
  • username = '' password = '' #件人和收件人信息 sender = '@com.cn' receiver = [''] #收件人,多人逗号分开 cc = [''] #抄送人,多人逗号分开 ##邮件内容编辑 ##邮件主题 subject = 'Process_Monitor' #########...
  • python3自动发邮件脚本

    2019-09-09 11:29:43
    python3自动发邮件脚本,以QQ邮箱为例,自己配置发送邮箱和授权码
  • 主要为大家详细介绍了python自动发送邮件的脚本源码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • python脚本自动发邮件

    2018-01-14 09:52:14
    python脚本自动发邮件 有一个邮箱,长期不用就会被收回了。自己想保留这个邮箱,又不想经常人为登录,所以想写个脚本来定时完成这个工作。 网上搜索了解了一下,多是说使用smtplib这个库。确实这个库就是原始的库...
  • Python-自动发邮件

    千次阅读 2017-06-19 11:26:48
    Python-自动发邮件 一、在自动化测试中我们可以报测试报告用户邮件的形式发送给相关同事。 Python 的 smtplib 模块提供了一种很方便的途径发送电子邮件。它对 smtp 协议进行了简单的封装
  • Python-自动发邮件

    千次阅读 2017-06-22 21:13:20
    上一篇博客介绍了如何使用python发送qq邮件,下面介绍怎么定时自动执行测试用例完并发送邮件
  • Python内置对SMTP的支持,可以发送纯文本邮件、HTML邮件以及带附件的邮件
  • 本文实例讲述了Python自动发送邮件的方法。分享给大家供大家参考,具体如下: python发邮件需要掌握两个模块的用法,smtplib和email,这俩模块是python自带的,只需import即可使用。smtplib模块主要负责发送邮件,...
  • 每天工作忙,学会python自动收发邮件,代替你问候女友 1、相关库介绍 1)yagmail Yet Another GMAIL/SMTP client; 非常方便的SMTP包,超简单的Python发邮件模块; 需要单独安装,不包含在Python标准模块里; ...
  • Python自动发送邮件并添加附件的源代码,真特定网站,比较具有参考价值
  • python自动下载邮件附件

    千次阅读 2021-03-23 16:04:55
    继上一次的 群聊机器人开发 之后的工作流程再优化,上次研究完群聊机器人之后,开发了三个机器人替我处理表格并自动发出去。其中有一项工作的数据源来源于邮件,还需要我自己手动下载,放入指定位置才可以处理!虽然...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 63,973
精华内容 25,589
关键字:

python自动发邮件

python 订阅