SMTP-发送邮件

Excel文件用于存放信息,邮箱还需开启smtp服务:在这里插入图片描述

在这里插入图片描述

实现代码如下:

import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.application import MIMEApplication
from email.mime.text import MIMEText
import xlrd


class SendMails(object):
    def __init__(self):
        self.username = input('输入邮箱账号:')
        self.password = input('输入邮箱密码:')
        # 打开工作簿
        self.wb = xlrd.open_workbook('1.2_自动发送邮件Tool.xls')
        self.mails = []
        self.content = ''
        self.title = ''

    def get_content(self):
        # 读取工作簿中的第一个工作表
        sheet_1 = self.wb.sheet_by_index(0)
        # 获取标题
        self.title = sheet_1.cell(10, 1).value
        # 获取正文
        self.content = ''
        for i in range(14, 63):
            i = sheet_1.cell(i, 1).value
            self.content += i + '\n'
        self.content = self.content.strip()
        self.content += '\n\n\n'

        for i in range(15, 22):
            i = sheet_1.cell(i, 3).value
            self.content += '\n' + i

    def get_mails(self):
        # 获取抄送邮箱、接收邮箱、附件存放路径、附件名称
        ws = self.wb.sheet_by_index(1)
        for index, row in enumerate(ws.get_rows()):
            if index > 4 and len(row[5].value) != 0:
                self.mails.append([row[9].value, row[5].value, row[13].value, row[14].value])

    def send_one_mail(self, mail):
        cc = mail[0]
        receiver = mail[1]
        file_path = mail[2]
        file_name = mail[3]
        print(mail)
        try:
            # 创建一个多类型的消息
            message = MIMEMultipart('mixed')
            # 设置标题、发送人、接收人、抄送人
            message['Subject'] = self.title
            message['From'] = self.username
            message['To'] = receiver
            message['Cc'] = cc

            # 构建多类型消息的正文部分,并负载到消息中
            text_plain = MIMEText(self.content, _subtype='plain', _charset='UTF-8')
            message.attach(text_plain)

            # 添加附件到消息中
            file = MIMEApplication(open(file_path, 'rb').read())
            file.add_header('Content-Disposition', 'attachment', filename=file_name)
            message.attach(file)

            # 初始化一个smtp实例
            smtp = smtplib.SMTP(host='smtp.office365.com')
            # 链接outlook 服务器
            smtp.connect(host='smtp.office365.com', port=587)
            # 向邮箱发送ehlo 命令
            smtp.ehlo()
            # 将到SMTP 服务器的连接设置为TLS模式
            smtp.starttls()
            # 登录账号
            smtp.login(self.username, self.password)
            # 发送邮件
            smtp.sendmail(self.username, receiver, message.as_string())
            smtp.quit()

            print(receiver, 'success')
        except smtplib.SMTPException as e:
            print(receiver, 'error', e)

    def run(self):
        self.get_content()
        self.get_mails()
        print('发送邮件中。。。')
        for mail in self.mails:
            self.send_one_mail(mail)


if __name__ == '__main__':
    send_mail = SendMails()
    send_mail.run()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值