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
使用Python及SMTP协议发送邮件(以163邮箱为例)
于 2022-01-17 15:59:15 首次发布