Email邮件提醒

Email邮件提醒

前言:今天在看书的时候,发现一个挺有趣的玩意,就是用python写一个自动发送Email邮件的模块。那Email在Python爬虫开发中有什么作用呢?主要起到提醒作用,当爬虫在运行过程中遇到异常或者服务器遇到问题,可以通过Email及时向自己报告。

代码中涉及的邮箱授权密码,QQ跟网易的获取方式如下:

1.QQ邮箱授权密码获取方式:

在这里插入图片描述
在这里插入图片描述

2.网易邮箱授权密码获取方式:

在这里插入图片描述
在这里插入图片描述

3.完整代码

直接拷贝下来,分别注释代码去查看效果,相应的代码,也写上了注释,就不一一提出来作说明了。

# -*- coding: UTF-8 -*-
"""
@author:林健
@file:Email_Alert.py
@time:2020/10/25
"""
import time
from email.mime.multipart import MIMEMultipart  # 打包多个部分的邮件内容(正文、附件、图片...)
from email.mime.text import MIMEText  # 邮件的正文内容
from email.mime.application import MIMEApplication  # 用来发送附件
from email.mime.image import MIMEImage  # 用来发送图片
import smtplib  # 发送邮件
from email.utils import parseaddr, formataddr
from email.header import Header


class EmailAlert(object):
    def __init__(self):
        """连接smtp服务器"""
        # 1.邮箱服务地址
        smtp_server = 'smtp.qq.com'  # 网易邮箱服务地址:smtp.163.com;QQ邮箱服务地址:smtp.qq.com
        # 2.实例化smtplib模块中的SMTP对象
        self.server = smtplib.SMTP()
        # 3.连接服务器,需要2个参数[邮箱服务地址、SMTP端口号]
        self.server.connect(smtp_server, 25)

        """登录邮箱"""
        # 1.发件人地址
        self.from_addr = '2445301989@qq.com'
        # 2.邮箱授权密码 【注意】该密码不是你邮箱的登录密码
        password = 'xxxxxxxxxxxxxxxx'  # 替换成自己的邮箱授权密码
        # 3.登录邮箱
        self.server.login(self.from_addr, password)
        # 当前时间(看是实际开发需求)
        self.time1 = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(time.time()))

    def _format_addr(self, s):
        name, addr = parseaddr(s)
        # 如果包含中文,需要通过Header对象进行编码。
        return formataddr((Header(name, 'utf-8').encode(), addr))

    def Mail_Notice(self):
        """'编辑发送信息"""
        # 1.收件人/抄送人地址
        # 如果要发给多人,格式为['***@qq.com','***@163.com','***@qq.com']
        to_addrs = ['896263973@qq.com', '2916812162@qq.com']  # 收件人地址
        cc_addrs = ['2097182629@qq.com']  # 抄送人地址

        # 2.构造一个邮件对象
        msg = MIMEMultipart()
        subject = '租房一号爬虫运行状态'
        msg['Subject'] = Header(subject, 'utf-8').encode()  # 邮件主题
        msg['From'] = self._format_addr('租房一号爬虫<%s>' % self.from_addr)  # 发件人名称
        msg['To'] = ','.join(to_addrs)  # 收件人
        msg['Cc'] = ','.join(cc_addrs)  # 抄送人

        # 3.1.1如果是纯文本邮件 构造MIMEText对象,需要3个参数[邮件正文、MIME的subtype,传入'plain'表示纯文本,最终的MIME就是'text/plain'、编码格式]
        # 其中,'_subtype'值默认为'palin'
        # text_str = f'Python爬虫运行异常,异常信息为遇到HTTP 403...{time1}'
        # content = MIMEText(text_str, 'plain', 'utf-8')  # 正文内容

        # 3.1.2有时候我们发送的可能不是纯文本,需要发送HTML邮件,将异常网页信息发送回去。在构造MIMEText对象时,把HTML字符串传进去,再把第二个参数由“plain" 变为“html”
        html_str = f'<h5>Python爬虫运行异常,异常信息为遇到HTTP 403...{self.time1}</h5><p>send by <a href="http://www.python.org"><img src="cid:img1" width="400px"></a></p>'
        content = MIMEText(html_str, 'html', 'utf-8')

        # 4.添加到 MIMEMultipart
        msg.attach(content)

        # 3.2如果在HTML邮件中,想添加图片
        file_path = 'C:\\Users\\admin\\Pictures\\Camera Roll\\背景图片\\其他\\wallhaven-j5mj3w.png'  # 你本地图片的路径
        img = MIMEImage(open(file_path, 'rb').read())  # 打开读取图片
        img.add_header('Content-ID', 'img1')  # 给图片一个ID值  需要跟上面html_str = '...img src="cid:img1">...'中的cid值对应
        msg.attach(img)

        # 3.3在邮件中添加附件(xlsx、docx、pdf、MP3、MP4...)
        file_path = 'C:\\Users\\admin\\Desktop\\租房信息.xlsx'  # 本地路径
        app = MIMEApplication(open(file_path, 'rb').read())
        app.add_header('content-disposition', 'attachment', filename='租房信息.xlsx')
        msg.attach(app)

        """发送邮件"""
        try:
            # 方法中介绍需要传入msg, from_addr=None, to_addrs=None,mail_options=[], rcpt_options={}
            # 为什么这里只传入一个msg呢,因为在方法下面还介绍了,如果没有传入会自动去msg中找这些参数
            self.server.send_message(msg)  # 发送邮件
            print('邮件发送  ...OK')
        except Exception as e:
            print(f'邮件发送  ...fail\n原因如下:{e}')

        """退出邮箱"""
        self.server.quit()


if __name__ == '__main__':
    email_alert = EmailAlert()
    email_alert.Mail_Notice()

新手上路,代码写得不好,如果有理解错误的或者不理解的,欢迎在评论区中,指出来,非常感谢!

以上就是Email邮件提醒的所有内容了,点赞收藏加评论是最大的支持哦!

📑编写不易,转载请注明出处,如有侵权,请联系我!

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
以下是使用Java发送邮件的示例代码: ```java import java.util.Properties; import javax.mail.*; import javax.mail.internet.*; public class EmailSender { public static void sendEmail(String subject, String content, String receiver) { // 配置SMTP服务器 Properties properties = new Properties(); properties.setProperty("mail.smtp.host", "smtp.example.com"); properties.setProperty("mail.smtp.port", "587"); properties.setProperty("mail.smtp.auth", "true"); properties.setProperty("mail.smtp.starttls.enable", "true"); properties.setProperty("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory"); // 创建话 Session session = Session.getInstance(properties, new Authenticator() { protected PasswordAuthentication getPasswordAuthentication() { return new PasswordAuthentication("your_email@example.com", "your_password"); } }); try { // 创建邮件消息 Message message = new MimeMessage(session); message.setFrom(new InternetAddress("your_email@example.com")); message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(receiver)); message.setSubject(subject); message.setText(content); // 发送邮件 Transport.send(message); System.out.println("邮件发送成功!"); } catch (MessagingException e) { System.out.println("邮件发送失败:" + e.getMessage()); } } public static void main(String[] args) { String subject = "测试邮件"; String content = "这是一封测试邮件,请勿回复。"; String receiver = "recipient@example.com"; sendEmail(subject, content, receiver); } } ``` 请注意,上述代码中的SMTP服务器地址、端口号、发件人邮箱和密码需要根据实际情况进行修改。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CodeBoy‍

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值