python 每日定时自动发送问候邮件

python 脚本编写的每日定时发送问候邮件,需要先启动QQ邮箱smtp服务
QQ邮箱》设置》账号》POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务:开启服务并获取授权码
修改代码中的sender, passWord, receiver
具体代码:

import smtplib
from email.mime.text import MIMEText
from email.utils import formataddr
import requests
from bs4 import BeautifulSoup
import re
import random 
import schedule 

sender = 'xxxx@qq.com'       # 填写发信人的邮箱账号
passWord = 'xxxxxxxx'        # 发件人邮箱授权码
receiver = 'xxxxxxx@qq.com'  # 收件人邮箱账号 

weaurl = 'https://tianqi.2345.com/haizhu1d/72024.htm'   # 获取天气的url,可以从网页中选择地点,然后修改url
loveurl = 'https://www.guaze.com/juzi/23389.html'      # 获取问候语句的url

def get_weatherAndLove():
    # 爬取天气网页
    web1 = requests.get(weaurl)   
    page = BeautifulSoup(web1.text,'html.parser')   
    weather = page.find('div',class_='real-today') 
    
    # 爬取情话网页
    web2 = requests.get(loveurl)
    web2.encoding='gb2312'  
    page = BeautifulSoup(web2.text, "html.parser")
    div = page.find('div', class_="content")

    # 处理文字(删去无效符号,取一句话)
    div = str(div.text)       
    print(type(div))
    grep = re.compile(r"\d+、(.*)") 
    content = grep.findall(div) 
    love = content[random.randint(1, len(content) - 1)]  

    return weather, love

def mail():
    # 爬取信息
    weather, love = get_weatherAndLove()

    # 构造邮件内容
    weather = weather.text + "\n\n"+love
    print(weather)
    ret = True
    try:
        # 定义邮件类
        msg = MIMEText(weather, 'plain', 'utf-8')     
        msg['From'] = formataddr(["sender", sender])   # 发件人邮箱昵称、发件人邮箱账号
        msg['To'] = formataddr(["receiver", receiver])          # 收件人邮箱昵称、收件人邮箱账号
        msg['Subject'] = "Daily greetings"                             # 标题

        # 设置发件人信息
        server = smtplib.SMTP_SSL("smtp.qq.com", 465)           # 发件人邮箱中的SMTP服务器
        server.login(sender, passWord)                          # 发件人邮箱账号、授权码

        # 发送邮件
        server.sendmail(sender, [receiver, ], msg.as_string())  # 发件人邮箱账号、收件人邮箱账号、发送邮件
        server.quit()  # 关闭连接
        print("Success!")
    except Exception: 
        print("Error!")
        ret = False
    return ret

# schedule.every().day.at("08:00").do(mail)      # 每天8点8执行函数mail
schedule.every(30).seconds.do(mail)  # 每30秒执行函数mail
while True:
    schedule.run_pending()
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值