使用Python及SMTP协议发送邮件(以163邮箱为例)

import os
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.mime.image import MIMEImage
'''
使用Python及SMTP协议发送邮件(以163邮箱为例)
一是尝试封装成类,和支持with上下文管理器。
二是构建了text和mutli两种类型的邮件。
三是实现抄送和独立出附件添加。
'''

class My163:
    def __init__(self):
        self._mail_host = 'smtp.163.com'  # 163邮箱服务器地址
        self._mail_user = 'xxxxxx@163.com'  # 163用户名
        self._mail_pass = 'HUHSANADHISAHSNDJ'  # 密码(部分邮箱为授权码)
        # self._smtpObj = smtplib.SMTP()  # 根据是否ssl认证进行二选一
        self._smtpObj = smtplib.SMTP_SSL(self._mail_host, port=465)  # 根据是否ssl认证进行二选一

    def __enter__(self):
        print('Info: Enter My163 ... ')
        try:
            # 连接到服务器
            # self._smtpObj.connect(host=self._mail_host, port=25)
            self._smtpObj.connect(host=self._mail_host, port=465)
            # 登录到服务器
            res = self._smtpObj.login(user=self._mail_user, password=self._mail_pass)
            print(f'登录结果:{res}')
        except smtplib.SMTPException as e:
            print("163 email login failed with error: %s" % e)  # 打印错误
        finally:
            return self  # 注意enter里面一定要返回类的对象self,否则无法调用run方法。

    def __exit__(self, exc_type, exc_val, exc_tb):
        print('Info: Exit My163')
        self._smtpObj.quit()

    def email_send(self, to_addrs, message):
        '''
        # 邮件发送
        :param to_addrs: 包含所有收件人的列表
        :param message: 邮件格式化的字符串,或邮件对象
        如 message = '\n'.join(['From: {}'.format(FROM), 'To: {}'.format(TO), 'Subject: {}'.format(SUBJECT), '', CONTENT])
        :return:
        '''
        try:
            rst = self._smtpObj.sendmail(from_addr=self._mail_user, to_addrs=to_addrs, msg=str(messa
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值