普通发邮件写法一

import smtplib
from email.mime.text import MIMEText

# 第三方 SMTP 服务
mail_host = "smtp.qq.com"  # SMTP服务器
mail_user = "1159038@qq.com"  # 用户名
mail_pass = "pgs"  # 密码 客户端授权码,不是邮箱密码

sender = '115908@qq.com'  # 发件人邮箱
receivers = ['154747@163.com']  # 接收人邮箱

content = 'Python Send Mail !'
title = 'Python SMTP Mail Test'  # 邮件主题
message = MIMEText(content, 'plain', 'utf-8')  # 内容, 格式, 编码
message['From'] = "{}".format(sender)
message['To'] = ",".join(receivers)
message['Subject'] = title

try:
    smtpObj = smtplib.SMTP_SSL(mail_host, 465)  # 启用SSL发信, 端口一般是465
    smtpObj.login(mail_user, mail_pass)  # 登录验证
    smtpObj.sendmail(sender, receivers, message.as_string())  # 发送
    print("mail has been send successfully.")
except smtplib.SMTPException as e:
    print(e)

普通发邮件写法二

import smtplib
import time
from email.header import Header
from email.mime.text import MIMEText
from email.utils import parseaddr, formataddr


# 发件人地址
    from_addr = 'not.cn'
    # 邮箱密码
    password = 'S'
    # 收件人地址
    to_addrs = [
        "li@baata.com",
    ]
    # 邮箱服务器地址
    smtp_server = 'smtp.china.com'

    local_time = time.strftime('%Y-%m-%d %H:%M:%S')

    content = f'''
        您好,                
        {info}

        发送时间: {local_time} 
    '''
    # 设置邮件信息
    msg = MIMEText(content, 'plain', 'utf-8')

    msg['From'] = _format_addr('发件人: <%s>' % from_addr)
    msg['To'] = _format_addr('收件人: <%s>' % to_addrs)
    msg['Subject'] = Header('splash 服务运行状态', 'utf-8').encode()

    # 发送邮件
    server = smtplib.SMTP_SSL(host=smtp_server, port=465)
    server.login(from_addr, password)
    server.sendmail(from_addr, to_addrs=to_addrs[1], msg=msg.as_string())
    server.sendmail(from_addr, to_addrs=to_addrs[0], msg=msg.as_string())

    server.quit()

发送txt附件

# -*- encoding=utf-8 -*-
# Author: Andy
# @Time: 20200117
import os, time
import smtplib
from email import encoders
from email.header import Header
from email.mime.base import MIMEBase
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.utils import parseaddr, formataddr


class Mail(object):
    """发送邮件类"""

    def __init__(self):
        # 发件人的邮箱SMTP发送邮件服务器
        self.smtpServer = 's.com'
        # 发件人的邮箱地址
        self.fromEmailAddress = 'npin.cn'
        # 发件人的密码
        self.passWord = 'S6487hj'
        # 收件人的邮箱地址列表
        self.toEamilAddressList = ["li.com", "yingop"]
        # 邮件的主题
        self.subject = "抖音屏蔽认证关键词内容"
        # 文本信息
        self.message = "我发送的是普通文本"
        # html 信息
        self.html = """<strong style="color:rgb(255,0,0)">我是红色字体</strong>"""

    # 发件人邮件显示处理
    def _format_addr(self, s):
        name, addr = parseaddr(s)
        return formataddr((Header(name, 'utf-8').encode(), addr))

    # 发送邮件模块 普通文本
    def sendMailText(self):
        # 创建MIMEMultipart类对象进行邮件发送和接收的配置
        msg = MIMEMultipart()
        # 显示发送人邮箱地址
        msg['From'] = self._format_addr('Kevin<{}>'.format(self.fromEmailAddress))
        # 显示收件人的邮箱地址,多个邮箱用逗号隔开
        msg['To'] = ",".join(self.toEamilAddressList)
        # 邮件的主题
        msg['Subject'] = Header(self.subject, 'utf-8').encode()
        # 传入需要的文本信息,文本格式或者html格式的,设定格式:普通文本,或者html
        msg.attach(MIMEText('{}'.format(self.message), 'plain', 'utf-8'))
        try:
            # 发件邮箱的发送服务器和端口,port:指定连接服务器的端口号,默认为25
            server = smtplib.SMTP(host=self.smtpServer, port=25)
            # 向该发送服务器发送SMTP 'ehlo' 命令
            # server.ehlo()  # 向Gamil
            # server.starttls()
            # 使用邮箱地址和密码进行登录邮箱
            server.login(self.fromEmailAddress, self.passWord)
            # 开始发送邮件
            server.sendmail(self.fromEmailAddress, ",".join(self.toEamilAddressList), msg.as_string())
            # 关闭邮件服务器
            server.quit()
        except Exception as e:
            print("发送邮件失败,错误原因:{}".format(repr(e)))

    # 发送邮件模块 HTML
    def sendMailHtml(self):
        # 创建MIMEMultipart类对象进行邮件发送和接收的配置
        msg = MIMEMultipart()
        # 显示发送人邮箱地址
        msg['From'] = self._format_addr('Kevin<{}>'.format(self.fromEmailAddress))
        # 显示收件人的邮箱地址,多个邮箱用逗号隔开
        msg['To'] = ",".join(self.toEamilAddressList)
        # 邮件的主题
        msg['Subject'] = Header(self.subject, 'utf-8').encode()
        # 传入需要的文本信息,文本格式或者html格式的,设定格式:普通文本,或者html
        msg.attach(MIMEText('{}'.format(self.html), 'html', 'utf-8'))
        try:
            # 发件邮箱的发送服务器和端口,port:指定连接服务器的端口号,默认为25
            server = smtplib.SMTP(host=self.smtpServer, port=25)
            # 向该发送服务器发送SMTP 'ehlo' 命令
            # server.ehlo()  # 向Gamil
            # server.starttls()
            # 使用邮箱地址和密码进行登录邮箱
            server.login(self.fromEmailAddress, self.passWord)
            # 开始发送邮件
            server.sendmail(self.fromEmailAddress, ",".join(self.toEamilAddressList), msg.as_string())
            # 关闭邮件服务器
            server.quit()
        except Exception as e:
            print("发送邮件失败,错误原因:{}".format(repr(e)))

    # 发送邮件模块 增加 txt 附件
    def sendMailAttachment(self):
        # 创建MIMEMultipart类对象进行邮件发送和接收的配置
        msg = MIMEMultipart()
        # 显示发送人邮箱地址
        msg['From'] = self._format_addr('Andy<{}>'.format(self.fromEmailAddress))
        # 显示收件人的邮箱地址,多个邮箱用逗号隔开
        msg['To'] = ",".join(self.toEamilAddressList)
        # 邮件的主题
        msg['Subject'] = Header(self.subject, 'utf-8').encode()
        # 传入需要的文本信息,文本格式或者html格式的,设定格式:普通文本,或者html
        msg.attach(MIMEText('%s 抖音屏蔽认证 txt 文件..... ↓ ↓ ↓' % time.strftime('%Y-%m-%d', time.localtime(time.time())), 'plain', 'utf-8'))
        # 发送txt文件
        file_name = os.path.abspath(os.path.join(os.getcwd(), "../..")) + '/douyin_user_shield_{}.txt'.format(time.strftime('%Y-%m-%d', time.localtime(time.time())))
        if file_name.endswith(".txt"):
            print("当前需要发送的文件:{}".format(file_name))
            try:
                att1 = MIMEText(open(file_name, 'rb').read(), 'base64', 'utf-8')
                att1["Content-Type"] = 'application/octet-stream'
                # 这里的filename可以任意写,写什么名字,邮件中显示什么名字
                att1["Content-Disposition"] = 'attachment; filename="%s"' % 'douyin_user_shield_{}.txt'.format(time.strftime('%Y-%m-%d', time.localtime(time.time())))
                msg.attach(att1)
            except Exception as e:
                print("添加附件失败,错误原因:{}".format(repr(e)))

        try:
            # 发件邮箱的发送服务器和端口,port:指定连接服务器的端口号,默认为25
            server = smtplib.SMTP_SSL(host=self.smtpServer, port=25)
            # 向该发送服务器发送SMTP 'ehlo' 命令
            # server.ehlo()  # 向Gamil
            # server.starttls()
            # 使用邮箱地址和密码进行登录邮箱
            server.login(self.fromEmailAddress, self.passWord)
            # 开始发送邮件
            server.sendmail(self.fromEmailAddress, ",".join(self.toEamilAddressList), msg.as_string())
            # 关闭邮件服务器
            server.quit()

        except Exception as e:
            print("发送邮件失败,错误原因:{}".format(repr(e)))


if __name__ == '__main__':
    m = Mail()
    m.sendMailAttachment()