python yeah 邮箱发邮件

设置

先理一下常见的电子邮件协议: SMTP、POP、IMAP 都遵循TCP/IP协议规范。至于Exchange是邮件服务器,不是收邮件和发邮件的协议,不要混淆概念,一般情况下不用,因为它是微软的产品。

  • SMTP:即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式。简单来说是 发送协议。
  • POP:协议允许电子邮件客户端下载服务器上的邮件,但是在客户端的操作(如移动邮件、标记已读等),不会反馈到服务器上。属于 收件协议。
  • IMAP:提供 邮件服务器 与电子邮件客户端之间的双向通信,客户端的操作都会反馈到服务器上,对邮件进行的操作,服务器上的邮件也会做相应的动作(这是和POP协议主要不同点)。属于 收件协议。

代码

import smtplib
from email.mime.text import MIMEText


def send_mail(subject: str, content: str, receiver: list, cc: list, _type='plain') -> bool:
    """
    发邮件

    :param subject: 邮件主题
    :param content: 邮件内容
    :param receiver: 接收者,多个用逗号分格
    :param cc: 抄送人, 多个用逗号分格
    :param _type: 邮件格式, 默认为文本格式, 可选值 html
    :return: 发送结果
    """

    # 使用的是yeah的smtp服务器地址
    _mail_host = "smtp.yeah.net"
    # 用户名
    _user = "xxxx@yeah.net"
    # 授权密码
    _password = xxxxx"

    try:
        msg = MIMEText(content, _subtype=_type, _charset='utf-8')
        msg['Subject'] = subject
        # 发件人显示,不起实际作用
        msg["from"] = _user
        # 收件人显示,不起实际作用
        msg["to"] = ','.join(receiver)
        # 抄送人显示,不起实际作用
        msg["Cc"] = ','.join(cc)
        with smtplib.SMTP_SSL(host=_mail_host, port=465) as smtp:
            # 登录发邮件服务器
            smtp.login(user=_user, password=_password)
            # 实际发送、接收邮件配置
            smtp.sendmail(from_addr=_user, to_addrs=receiver, msg=msg.as_string())
        return True
    except Exception as e:
        print(111, e)
        return False


if __name__ == '__main__':
    aa = """
    <H3>Hi</H3>:
           清华,你好,我是测试邮件,我试一下效果。
    """
    r = ['xxxx@yeah.net']
    send_mail('我是测试邮件', aa, r, [], 'html')
代码中的密码为授权密码,设置方式见下图

image

效果

image

常见的邮箱IMAP/POP3/SMTP 设置及端口号

https://www.bbsmax.com/A/pRdBy1Qa5n/

[SSL: WRONG_VERSION_NUMBER] wrong version number 问题解决方案

https://stackoverflow.com/questions/19390267/python-3-smtplib-exception-ssl-wrong-version-number-logging-in-to-outlook

参考链接 https://www.bbsmax.com/A/pRdBy1Qa5n/

posted @ 2023-04-12 15:35  一枚码农  阅读(116)  评论(0编辑  收藏  举报