使用Python自动发送邮件

import smtplib
# 负责构造文本
from email.mime.text import MIMEText
# 负责构造图片
from email.mime.image import MIMEImage
# 负责将多个对象集合起来
from email.mime.multipart import MIMEMultipart
from email.header import Header
import os,sys
BASE_PATH = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
sys.path.insert(0, BASE_PATH)
import configparser
cf = configparser.ConfigParser()
cf.read(os.path.join(BASE_PATH, 'doc/config.ini'))
sender_dict = dict(cf.items('sender-config'))
recivers_dict = dict(cf.items('recivers-config'))


class Mail(object):
    def __init__(self):
        self.mail_host = sender_dict['host']  # SMTP服务器
        self.port = int(sender_dict['port']) # 端口号
        self.mail_sender = sender_dict['sender']  # 发件人邮箱
        self.mail_license = sender_dict['pwd']  # 授权密码
        self.mail_receivers = [v for k, v in recivers_dict.items() if 'reciver' in k]  # 收件人邮箱,可以为多个收件人
    def send(self,subject,body_content,attachs,pics):
        '''
        :param subject: str,邮件主题
        :param body_content: str,邮件正文
        :param attachs: list,附件地址
        :param pics: list,图片地址
        :return: 发送邮件
        '''
        mm = MIMEMultipart('related')# 构建MIMEMultipart对象代表邮件本身,可以往里面添加文本、图片、附件等
        # 设置发送者,注意严格遵守格式,里面邮箱为发件人邮箱
        mm["From"] = self.mail_sender
        # 设置接受者,注意严格遵守格式,里面邮箱为接受者邮箱
        mm["To"] = ','.join(self.mail_receivers)
        # 1. 设置邮件头部内容
        mm["Subject"] = Header(subject, 'utf-8')
        # 2. 添加正文内容
        body_footer = '<p style="color:red">此邮件为系统自动发送,请勿在此邮件上直接回复,谢谢~</p>'
        mm.attach(MIMEText(body_content + body_footer, "html", "utf-8"))
        # 3. 添加附件
        for attach_file in attachs:
            with open(attach_file, 'rb') as file_info:
                atta = MIMEText(file_info.read(), 'base64', 'utf-8')
                atta.add_header('Content-Disposition', 'attachment', filename=('utf-8', '', os.path.basename(attach_file)))
                # 添加附件到邮件信息当中去
                mm.attach(atta)
        # 4. 添加图片
        for pic_file in pics:
            with open(pic_file,'rb') as image:
                image_info = MIMEImage(image.read())
                image_info.add_header('Content-Disposition', 'attachment', filename=('utf-8', '', os.path.basename(pic_file)))
                mm.attach(image_info)
        # 创建SMTP对象
        stp = smtplib.SMTP(self.mail_host)
        # 设置发件人邮箱的域名和端口
        stp.connect(self.mail_host, self.port)
        # set_debuglevel(1)可以打印出和SMTP服务器交互的所有信息
        # stp.set_debuglevel(1)
        stp.starttls()
        # 登录邮箱,传递参数1:邮箱地址,参数2:邮箱授权码
        stp.login(self.mail_sender,self.mail_license)
        # 发送邮件,传递参数1:发件人邮箱地址,参数2:收件人邮箱地址,参数3:把邮件内容格式改为str
        stp.sendmail(self.mail_sender, self.mail_receivers, mm.as_string())
        print("邮件发送成功")
        # 关闭SMTP对象
        stp.quit()

if __name__ == '__main__':
    subject = """Python邮件测试"""
    body_content = """
    <h1>这是一封测试邮件 - 1级标题</h1>
    <h2>这是一封测试邮件 - 2级标题</h2>
    <h3>这是一封测试邮件 - 3级标题</h3>
    <!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Table</title>
</head>
<body>
	<table border="1" align="left" cellspacing="0" cellpadding="1">
	<caption></caption>
	<strong>
		<tr align="left" bgcolor="#4dbcee">
			<th>col1</th>
			<th>col2</th>
		</tr>
	</strong>
	<tbody>
		<tr align="left">
			<td>1</td>
			<td>a</td>
		</tr>
		<tr align="left" bgcolor="#bd321a">
			<td>2</td>
			<td>b</td>
		</tr>
		<tr align="left">
			<td>3</td>
			<td>c</td>
		</tr>
	</tbody>
</table>
</body>
</html>
    """
    attachs = [f'{BASE_PATH}/doc/attach1.txt',f'{BASE_PATH}/doc/attach2.xlsx']
    pics = [f'{BASE_PATH}/doc/pic1.jpg',f'{BASE_PATH}/doc/pic2.png']
    Mail().send(subject,body_content,attachs,pics)
    

结果如下
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值