如何给QQ邮箱自动发邮件?无惧「小爱」下线!代码全公开,两步搞定

前两天,搞了个微信 AI 小助理-小爱(AI),爸妈玩的不亦乐乎。

最近一直在迭代中,挖掘小爱的无限潜力:

不过,机器人基于 web 端微信,大概一两天会掉线,很是闹挺!

能否在它掉线后,自动提醒我?

还有,用什么方式提醒我呢?

  • 微信消息?它都下线了,咋给我发微信消息?

  • QQ 邮件?可行!我们可以写个轮询任务,每隔一小时查看下接口状态,一旦发现下线,自动给我发邮件,类似下面这样:

在这里插入图片描述

今日分享,带大家实操:如何自动给你的 QQ 邮箱发送邮件。

注:其它邮箱的食用方式基本一致,因为微信端绑定了 QQ 邮箱,接收提醒更方便,故本文以 QQ 邮箱为例。

私以为,这个技能还有很多应用场景,而且实操也非常简单。此所谓:一学就会,不学后悔。哈哈,建议收藏~

1. 邮箱设置

首先,前往你的 QQ 邮箱,找到 “设置”=>“账号” 。

在这里插入图片描述

拉到下面,找到 POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV 服务。

在这里插入图片描述

然后,点击管理服务,会跳转到账号与安全页面,点击生成授权码以生成授权码,把授权码保存好,后面会用到。

2. 邮件发送接口实现

以 Python 为例:

2.1 通用接口

首先,引入邮件发送所需要的包(Python 自带,无需 pip 安装):

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

然后,定义一个发送类,并实现发送邮件的通用接口:

class MailSender:
    def __init__(self, username='QQ 号', password='授权码'):
        self.username = username
        self.password = password
    def sendMail(self, msg):
        try:
            smtp = smtplib.SMTP_SSL('smtp.qq.com', 465)
            smtp.login(self.username, self.password) 
            smtp.sendmail(msg['From'], msg['To'], msg.as_string()) 
            smtp.quit()
        except Exception as e:  
            print(e)

2.2 发送纯文本

如果仅仅是发送纯文本,那么非常简单:

def sendText(self, text='邮件发送测试', title='SMTP 文本测试'):
    msg = MIMEText(text, 'plain', 'utf-8') # 邮件正文
    msg['From'] = self.username + '@qq.com' 
    msg['To'] = self.username + '@qq.com' 
    msg['Subject'] = title # 邮件标题
    self.sendMail(msg)

至此,本文开头的核心诉求就已经完成了,因为我们只需要把登录链接放到邮件中即可。

但是,除了纯文本,smtplib 还支持更复杂的消息内容。

2.3 发送 HTML

比如我们可以放入 html 文本,邮件中自动渲染:

def sendHtml(self, htmlContent, title='SMTP html测试'):
    msg = MIMEMultipart()
    msg['From'] = self.username + '@qq.com' 
    msg['To'] = self.username + '@qq.com' 
    msg['Subject'] = title # 邮件标题
    body = MIMEText(htmlContent, 'html', 'utf-8')
    msg.attach(body)
    self.sendMail(msg)

2.4 发送附件

当然,如果你需要在邮件中添加附件,而不仅仅是嵌入在 HTML 中,也是 OK 的,示例代码如下:

def sendMultiPart(self, text='',
                    att_src='data/xxx.csv',
                    img_src='data/xxx.jpg', 
                    title='SMTP html测试'):
      msg = MIMEMultipart()
      msg['From'] = self.username + '@qq.com' 
      msg['To'] = self.username + '@qq.com' 
      msg['Subject'] = title # 邮件标题
      # 写入html内容
      filename = img_src.split('/')[-1]
      htmlContent = '<html><head></head><body><p>'\
          + text + \
          '</p><img src="cid:'+filename+'"/>'\
          '</body></html>'
      body = MIMEText(htmlContent, 'html', 'utf-8')
      msg.attach(body)
      # 写入图片内容
      if os.path.exists(img_src):
          imgFile = MIMEImage(open(img_src, 'rb').read())
          imgFile['Content-ID'] = filename
          imgFile['Content-Disposition'] = 'attachment;filename="'+filename+'"'
          msg.attach(imgFile)
      # 写入附件内容
      if os.path.exists(att_src):
          attFile = MIMEText(open(att_src, 'r').read(), 'plain', 'utf-8')
          attFile['Content-Type'] = 'application/text'
          attFile['Content-Disposition'] = 'attachment;filename=%s' % (att_src.split('/')[-1])
          msg.attach(attFile)
      self.sendMail(msg)

2.5 邮件群发

群发?多调用几次接口不就好了。。。

当然没问题,不过你还可以:把接收者列表,采用 list 赋值给 msg['To'] :

msg['To'] = ['xx1@qq.com', 'xx2@xxx.edu.cn', 'xx3@gmail.com']

写在最后

本文带大家实操了自动发邮件的魔法,无论你是想监控 AI 助手的在线状态,还是要定时给朋友发生日祝福… 这个小技能都能派上用场。

感兴趣的朋友,赶紧去试试吧!

如果对你有帮助,不妨点个免费的赞收藏备用。


为了方便大家交流,新建了一个 AI 交流群,欢迎感兴趣的小伙伴加入。

小爱也在群里,想进群体验的朋友,公众号后台「联系我」即可,拉你进群。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值