邮件发送(SMTP)

发送邮件

import smtplib
from email.mime.text import MIMEText  # 负责构造文本
from email.mime.multipart import MIMEMultipart  # 负责将多个对象集合起来
from email.header import Header


class SendEmail:
    """邮件发送类"""

    def __init__(self, sub_title, sub_content):
        """
        初始化
        :param sub_title: 邮件主题
        :param sub_content: 邮件正文
        """
        self.host = "100.100.100.100"  # smtp服务器地址
        self.sender = "sender@sender.com"  # 发件人邮箱
        self.s_name = self.sender.split('@')[0]
        self.password = "admin"  # 邮箱授权码(不一定是密码)
        self.receivers = ["receiver1@receiver.com", "receiver2@receiver.com"]  # 收件人邮箱,可以为多个
        self.r_name_list = []
        self.subject_content = sub_title
        self.body_content = sub_content
        self.port = 25  # 端口地址默认为 25
        # 构造文本, 参数: 正文内容, 文本格式, 编码方式
        self.message_text = MIMEText(self.body_content, "plain", "utf-8")
        # 创建邮件对象
        self.mm = MIMEMultipart('related')
        # 抄送
        # self.mm['Cc'] = "Aiden<aiden@aiden.com>"
        # 创建SMTP对象
        self.stp = smtplib.SMTP(
        # 邮件信息设置
        self.set_info()

    def receiver_handle(self):
        """
        收件人处理
        设置接受者, 注意严格遵守格式, 里面邮箱为接受者邮箱
        self.mm["To"] = f"{self.r_name}<{self.receivers[0]}>"
        """
        for receiver in self.receivers:
            r_name = receiver.split('@')[0]
            to_result = f'{r_name}<{receiver}>'
            self.r_name_list.append(to_result)
        for r_name in self.r_name_list:
            self.mm['To'] = r_name

    def set_info(self):
        """设置邮件信息"""

        # 设置发送者, 注意严格遵守格式, 里面邮箱为发件人邮箱
        self.mm["From"] = f"{self.s_name}<{self.sender}>"
        # 设置接受者
        self.receiver_handle()
        # 设置邮件主题
        self.mm["Subject"] = Header(self.subject_content, 'utf-8')
        # 向MIMEMultipart对象中添加文本对象
        self.mm.attach(self.message_text)

    def add_file(self, f_path, f_name, charset='utf-8'):
        """
        添加附件
        :param f_path: 附件路径
        :param f_name: 重命名附件
        :param charset: 文件名编码格式
        """
        # 构造附件
        self.atta = MIMEText(open(f_path, 'rb').read(), 'base64', 'utf-8')
        # 设置附件信息
        self.atta.add_header("Content-Disposition", "attachment", filename=(charset, '', f_name))
        # 添加附件到邮件信息当中去
        self.mm.attach(self.atta)

    def send_mail(self, is_ssl=False, debug=False):
        """
        发送邮件
        :param is_ssl: 是否使用SSL
        :param debug: 是否打印交互信息
        """
        if is_ssl:
            self.stp = smtplib.SMTP_SSL(self.host)  # 不加此段代码则用25的端口, 否则要用465端口
            self.port = 465

        self.stp.connect(self.host, self.port)  # 设置发件人邮箱的域名和端口

        if debug:
            self.stp.set_debuglevel(1)  # set_debuglevel(1)可以打印出和SMTP服务器交互的所有信息

        # 登录邮箱, 参数: 邮箱地址, 邮箱授权码
        self.stp.login(self.sender, self.password)
        # 发送邮件, 参数: 发件人邮箱地址, 收件人邮箱地址, 把邮件内容格式改为str
        self.stp.sendmail(self.sender, self.receivers, self.mm.as_string())

    def quit(self):
        # 关闭 SMTP 对象
        self.stp.quit()
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Aiden_SHI

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

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

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

打赏作者

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

抵扣说明:

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

余额充值