创保网app下载,资源优化网站排名,网站开发客户的思路总结,wordpress 检索插件文章目录 一、SMTP协议邮件准备二、smtplib模块1.使用smtplib封装一个邮件类2.发送邮件 补充 一、SMTP协议邮件准备
需要一个smtp服务器
二、smtplib模块
smtplib模块是python自带的模块
1.使用smtplib封装一个邮件类
import smtplib
import logging # 加入日志#xff… 文章目录 一、SMTP协议邮件准备二、smtplib模块1.使用smtplib封装一个邮件类2.发送邮件 补充 一、SMTP协议邮件准备
需要一个smtp服务器
二、smtplib模块
smtplib模块是python自带的模块
1.使用smtplib封装一个邮件类
import smtplib
import logging # 加入日志保持这个好习惯使用前需要配置class Smtp(object): # 类名自定义def __init__(self, sender, pwd, server_url, server_port):sender 登录SMTP服务器的用户名 注意除了使用用户名和密码还可使用密钥pwd 登录SMTP服务器的密码server_url SMTP服务器域名或者IPserver_port SMTP服务所开放的端口self.sender senderself.smtp smtplib.SMTP(server_url, server_port, timeout5) # 创建smtp对象self.smtp.starttls() # 开始TSL加密self.smtp.login(sender, pwd) # 使用密码或者密码获取登陆凭证def mail(self, *args): # 发送邮件俩个参数依次为收信邮箱、内容self.smtp.sendmail(self.sender, args[0], args[1])def stop_mail(self): # 邮件发送完毕后需要关闭连接释放资源停止smtpself.smtp.quit()2.发送邮件
代码如下示例
import multiprocessing # 进程模块
import smtplib
from email.header import Header
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMETextdef send_mail(send_user send_pwd, server_url, server_port, to_mail, msg): # msg为smtp的html内容对象需要完成复杂邮件内容时需要用到MIMEMultipart此处的msg便为MIMEMultipart复杂内容为附件、表格、图片等smtp_send Smtp(send_user, send_pwd, server_url, server_port) # 户名、密码、域名、端口smtp_send.mail(to_mail, msg.as_string()) # 收信人邮箱、bytes数据直接放字符串内容也行smtplib会自动转化smtp_send.stop_mail() # 发信完毕停止连接补充
完成上诉代码就能发送邮件了但STMP协议发送邮件时会阻塞主进程以及网络所以当你要异步发送smtp协议的邮件时使用线程、协程时无法达成异步效果的需要开启新的进程
附上完整代码以及进程发送邮件
我代码中邮箱的表格样式
import logging
import multiprocessing
import smtplib
from email.header import Header
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMETexterror_logger logging.getLogger(celery-error)class Smtp(object): # 类名自定义def __init__(self, sender, pwd, server_url, server_port):sender登录SMTP服务器的用户名 一般为发信邮箱 注意除了使用用户名和密码还可使用密钥pwd 登录SMTP服务器的密码server_url SMTP服务器域名或者IPserver_port SMTP服务所开放的端口self.sender senderself.smtp smtplib.SMTP(server_url, server_port, timeout5) # 创建smtp对象self.smtp.starttls() # 开始TSL加密self.smtp.login(sender, pwd) # 使用密码或者密码获取登陆凭证def mail(self, *args): # 发送邮件俩个参数依次为收信邮箱、内容self.smtp.sendmail(self.sender, args[0], args[1])def stop_mail(self): # 邮件发送完毕后需要关闭连接释放资源停止smtpself.smtp.quit()def send_mail(send_user send_pwd, server_url, server_port, to_mail, msg): # msg为smtp的html内容对象需要完成复杂邮件内容时需要用到MIMEMultipart此处的msg便为MIMEMultipart复杂内容为附件、表格、图片等smtp_send Smtp(send_user, send_pwd, server_url, server_port) # 户名、密码、域名、端口smtp_send.mail(to_mail, msg.as_string()) # 收信人邮箱、bytes数据直接放字符串内容也行smtplib会自动转化smtp_send.stop_mail() # 发信完毕停止连接def mail_to_user(**kwargs):user_obj Users.objects.filter(usernamekwargs.get(touser)).first()try:if user_obj:# 收信人邮箱send_user kkkqq.com# 创建MIMEMultipart对象此处我生成了一个table表格msg MIMEMultipart()# 设置邮件主题和发件人信息msg[From] key_obj.accessSecretmsg[To] send_usermsg[Subject] Header(测试邮件, utf-8)# 创建表格内容的列表table_data [测试类型, 测试状态, 申请人, 2023-9-26]# 初始化表格HTML字符串table_html tabletrth类型/thth状态/thth申请人/thth预约完成日期/th/tr# 构建表格内容的HTML字符串 如果此处内容时多行的可以循坏拼接这一段table_html ftrtd{table_data[0]}/tdtd{table_data[1]}/tdtd{table_data[2]}/tdtd{table_data[3]}/td/trtable_html /table# 将表格内容html加入到html代码中html_content htmlstyle typetext/csstable thead, table tr {border-top-width: 1px;border-top-style: solid;border-top-color: rgb(211, 202, 221);}table {border-bottom-width: 1px;border-bottom-style: solid;border-bottom-color: rgb(211, 202, 221);}table td, table th {padding: 5px 10px;font-size: 12px;font-family: Verdana;color: rgb(95, 74, 121);}table tr:nth-child(even) {background: rgb(223, 216, 232)}table tr:nth-child(odd) {background: #FFF}/stylebody table_html /body/html# 将表格内容作为MIMEText对象添加到邮件中table_part MIMEText(html_content, html, utf-8)msg.attach(table_part)process multiprocessing.Process(targetsend_mail, args(adminqq.com, password, 127.0.0.1, 8043, testqq.com, msg))process.start()except Exception as e:print(str(e))error_logger.error(邮件发送错误 str(e))