zoukankan      html  css  js  c++  java
  • 发送邮件smtplib,email,邮件头header,定时器schedule,爬虫requests(转)

    发送邮件

    发一份简单的邮件
    发一份完整的带邮件头的群邮件
    自动定时发邮件
    自动定时爬取天气预报发送邮件

    ——————————————————————

    发一份简单的邮件

    代码结构:

    也就是这样:

    以QQ邮箱为例发送一封简单的邮件如下:

    # 以qq邮箱为例
    
    import smtplib                            #我们要发送邮件,就需要用到smtplib模块
    
    from email.mime.text import MIMEText      #要发送文本内容用email.mime.text模块
    #email是个包,包里面有好几个模块,调用包(email)文本模块(mime.text)里的类(MIMEText)可以发文本消息
    
    
    #服务器,端口
    host='smtp.qq.com'     
    port=465
    #我方账户,授权码
    username='**********@qq.com'
    password='***********'
    #对方账户
    to_addr='*********.com'
    #要发送的内容
    moment='测试python'
    
    
    msg = MIMEText(moment,'plain','utf-8')       #给文本添加属性,让电脑能够识别
     #moment是文本内容,type:文本类型,默认为plain(纯文本),文本编码,中文为“utf-8”
    
    server = smtplib.SMTP_SSL(host)      #【调用服务器】SMTP(“简单邮件传输协议) 是一个类,调用smtplib模块中的类SMTP赋值给server.
                                         # 如果是加密的话,写成:smtplib.SMTP_SSL(),这里在()里面加上变量host,是由于在3.7 版本以上才是这种写法
    
    server.connect(host, port)     
                                         #【设置服务器名称和端口】调用connect(指定的服务器),host指定服务器的域名(服务器地址),port 是“端口”(默认是25)
    
    server.login(username, password)
                                         #【登录你的服务器账户】调用login(登录),username(你的邮箱名),password(授权码)。
    
    server.sendmail(username, to_addr, msg.as_string())
                                         #【发送消息】调用sendmail(发送邮件),sender(发件人,就是你的邮箱名),to_addr(收件人邮箱),,msg指要发送的内容(as_string()是将发送的信息msg变为字符串类型。因为电脑不知道你要发送的信息msg是什么,我们也没有定义。这就需要用到email 模块)
    
    server.quit() 
                                         #【退出服务器】调用quit(退出) 
    
    #如果你用的是QQ以外的其他邮箱,也可能会出现一种报错。smtplib.SMTPException: No suitable authentication method found
    #解决方案是:在登录(login)之前调用starttls()方法就可以了。也就是在代码中加入这样一行:server.starttls()

    email 模块:也就是用来写邮件内容的模块。这个内容可以是纯文本、HTML内容、图片、附件等多种形式。

    每种形式对应的导入方式是这样的:

    from email.mime.text import MIMEText
    from email.mime.image import MIMEImage
    from email.mime.multipart import MIMEMultipart
    发一份完整的带邮件头的群邮件

    邮件头(header)是这一块区域,包括主题、发件人、收件人等信息如下:

    from email.header import Header   #1从email包引入Header()方法。Header()是用来构建邮件头的
    
    msg['From'] = Header('xxx')       #2.from收件人邮箱地址
    msg['To'] = Header('xxx')         #3.to发件人邮箱地址
    msg['Subject'] = Header('xxx')    #4.主题

    发一封带有文件头的邮件:

    #引用模块
    import smtplib      #发邮件
    from email.mime.text import MIMEText    #用于构建内容文本
    from email.header import Header    #用于构建邮件头
    
    #服务器,端口
    host='smtp.qq.com'
    port=465
    #我方账户,授权码
    username='********@qq.com'
    password='***********'
    #对方账户
    to_addr=['bn****@live.com','di******@gmail.com']  #添加多个账户采用列表形式
    
    
    #要发送的内容
    moment='测试python'
    #构建纯文本的邮件内容
    msg = MIMEText(moment,'plain','utf-8') 
    #构建邮件头
    msg['From'] = Header('丁丁')       #2.from来自哪里,指发件人的名称或地址
    msg['To'] = Header('小可爱')         #3.to发件人邮箱地址
    msg['Subject'] = Header('我用python')    #4.主题
    
    # 开启发信服务
    server = smtplib.SMTP_SSL(host)         
    server.connect(host, port)  
    # 登录发信邮箱
    server.login(username, password)
    # 发送邮件
    server.sendmail(username, to_addr, msg.as_string())
    # 关闭服务器
    server.quit() 
    自动定时发邮件

    【定时】+【发邮件】
    先看看定时功能实现的方法:
    定时模块schedule,安装第三方库 pip install schedule
    先看看定时模块使用方法:

     1                       #定时模块schedule
     2 import schedule     
     3 import time         
     4 #引入schedule和time
     5 
     6 def job():
     7     print("I'm working...")
     8 #定义一个叫job的函数,函数的功能是打印'I'm working...'
     9 schedule.every(2).seconds.do(job)        #每2s执行一次job()函数
    10 schedule.every(10).minutes.do(job)       #部署每10分钟执行一次job()函数的任务
    11 schedule.every().hour.do(job)            #部署每×小时执行一次job()函数的任务
    12 schedule.every().day.at("10:30").do(job) #部署在每天的10:30执行job()函数的任务
    13 schedule.every().monday.do(job)          #部署每个星期一执行job()函数的任务
    14 schedule.every().wednesday.at("13:15").do(job)#部署每周三的13:15执行函数的任务
    15 
    16 while True:
    17     schedule.run_pending()     #检查上面的任务部署情况,如果任务已经准备就绪,就去启动执行。
    18     time.sleep(1)              #让程序按1秒来检查,如果检查太快,会浪费计算机的资源。
    19 #16-18都是检查部署的情况,如果任务准备就绪,就开始执行任务。 

    开始封装邮件,用定时器发送:

    #引用模块
    import smtplib      #发邮件
    from email.mime.text import MIMEText    #用于构建内容文本
    from email.header import Header    #用于构建邮件头
    import schedule      #定时模块
    import time          #时间模块
    
    def Email():     #定义函数Email(),一旦调用将会执行下面的功能
        #服务器,端口
        host='smtp.qq.com'
        port=465
        #我方账户,授权码
        username='6*******@qq.com'
        password='********'
        #对方账户
        to_addr=['********@live.com','*********@gmail.com']  #添加多个账户采用列表形式
    
    
        #要发送的内容
        moment='测试定时发送'
        #构建纯文本的邮件内容
        msg = MIMEText(moment,'plain','utf-8') 
        #构建邮件头
        msg['From'] = Header('丁丁')       #2.from来自哪里,指发件人的名称或地址
        msg['To'] = Header('我的小可爱')         #3.to发件人邮箱地址
        msg['Subject'] = Header('我用python')    #4.主题
        try:
            # 开启发信服务
            server = smtplib.SMTP_SSL(host)         
            server.connect(host, port)  
            # 登录发信邮箱
            server.login(username, password)
            # 发送邮件
            server.sendmail(username, to_addr, msg.as_string())
            # 关闭服务器
            server.quit() 
            print('发送成功')
        except:
            print('发送失败')   
             
    
    def job():        #定时器
        Email()
    
    schedule.every().day.at("7:30").do(job) #每天早上7点半执行一次
    while True:
        schedule.run_pending()     #检查上面的任务部署情况,如果任务已经准备就绪,就去启动执行。
        time.sleep(1)
                      #让程序按1秒来检查   
    自动定时爬取天气预报发送邮件:

    【定时】+【发邮件】+【爬虫】

          #爬取天气,需要用到爬虫里面requests模块
    #引用模块
    import smtplib      #发邮件
    from email.mime.text import MIMEText    #用于构建内容文本
    from email.header import Header    #用于构建邮件头
    import schedule      #定时模块
    import time          #时间模块
    import requests      #请求网页信息模块
    from bs4 import BeautifulSoup   #用来解析和提取网页中的数据的模块
    
    def weather():  #定义函数
        headers={'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (like Gecko) Chrome/75.0.3770.142 Safari/537.36'}
        r=requests.get('http://www.weather.com.cn/weather/101281601.shtml',headers=headers)  #跟网站要数据赋值给r
        r.encoding='utf-8'    #重申r的编码为'utf-8'
        bs=BeautifulSoup(r.text,'html.parser')  #解码,'html.parser'是解析器
        a=bs.find('li',class_="sky skyid lv1")   #提取数据
        b=a.find('h1').text        
        c=a.find('p').text
        d=a.find('p',class_="tem").text[-7:]
        return'今天%s
    天气:%s
    温度:%s' % (b,c,d)
    
    
    
    def Email(weathers):     #定义函数Email(),一旦调用将会执行下面的功能,参数为weathers
        #服务器,端口
        host='smtp.qq.com'
        port=465
        #我方账户,授权码
        username='************@qq.com'
        password='***********'
        #对方账户
        to_addr=['******@live.com','*******@qq.com']  #添加多个账户采用列表形式
    
    
        #要发送的内容
        moment=weathers
        #构建纯文本的邮件内容
        msg = MIMEText(moment,'plain','utf-8') 
        #构建邮件头
        msg['From'] = Header('丁丁')       #2.from来自哪里,指发件人的名称或地址
        msg['To'] = Header('我的小可爱')         #3.to发件人邮箱地址
        msg['Subject'] = Header('天气预报')    #4.主题
        try:
            # 开启发信服务
            server = smtplib.SMTP_SSL(host)         
            server.connect(host, port)  
            # 登录发信邮箱
            server.login(username, password)
            # 发送邮件
            server.sendmail(username, to_addr, msg.as_string())
            # 关闭服务器
            server.quit() 
            print('发送成功')
        except:
            print('发送失败')   
             
    
    def job():
        weathers=weather()   #调用函数weather(),返回的值赋值给weathers
        Email(weathers)      #调用函数Email(weathers),参数为weathers
    
    schedule.every().day.at("7:30").do(job) #每天早上7点半执行一次
    
    while True:
        schedule.run_pending()     #检查上面的任务部署情况,如果任务已经准备就绪,就去启动执行。
        time.sleep(1)
                      #让程序按1秒来检查   

    转:https://blog.csdn.net/weixin_45239949/article/details/96617183

     

  • 相关阅读:
    [译]Mongoose指南
    shell去掉后缀方法
    memcache和memcached区别
    ssh隧道远程连接mysql
    nginx实现某个页面http访问,其余全部跳转到https
    es快照和备份
    elasticsearch 单节点实现
    logstash5安装并实现mariadb数据写入到elasticsearch
    linux 内存分析
    zabbix api创建screen vsize限制解决
  • 原文地址:https://www.cnblogs.com/annatest/p/14985944.html
Copyright © 2011-2022 走看看