使用线程实现异步的邮件发送,以及简单普通的邮件发送。
程序员文章站
2022-07-12 20:59:49
...
代码比较简单,也没有什么特别复杂的逻辑,就直接上代码吧。如果缺少相关的库,就pip安装一下。
异步发送(简单的使用了Flask框架,代码跑起来,在浏览器中,输入127.0.0.1:5000/send/ 就实现了异步发送邮件IP/端口/路由===》执行对应的视图函数,执行,并返回)template的话自己随便定义一个就好。在同级目录下,创建template目录,里边创建一个html文件,就可以作为你发送的邮件的模板了。:
from flask import Flask, render_template, current_app from flask_script import Manager from flask_mail import Mail, Message import os from threading import Thread app = Flask(__name__) manager = Manager(app) # 邮件发送配置,一定要放在创建Mail对象之前 app.config['MAIL_SERVER'] = 'smtp.163.com' # 用户名 app.config['MAIL_USERNAME'] = '自己的163邮箱' # 密码 app.config['MAIL_PASSWORD'] = '这个密码并非163登录密码,而是开启163服务的密码’ # 创建发送邮件的对象 mail = Mail(app) # 异步发送邮件任务 def async_send_mail(app, msg): # 邮件发送必须在程序上下文 # 新的线程中没有上下文,因此需要手动创建 with app.app_context(): mail.send(msg) # 封装函数发送邮件 def send_mail(subject, to, template, *args, **kwargs): if isinstance(to, list): recipients = to elif isinstance(to, str): recipients = to.split(',') else: raise Exception('邮件接收者参数类型有误') # 创建邮件消息对象 msg = Message(subject, recipients=recipients, sender=current_app.config['MAIL_USERNAME']) # 将邮件模板渲染后作为邮件内容 msg.html = render_template(template, *args, **kwargs) # 发送邮件 # mail.send(msg) # current_app是app的代理对象 # 根据代理对象current_app找到原始的app app = current_app._get_current_object() # 创建线程 thr = Thread(target=async_send_mail, args=(app, msg)) # 启动线程 thr.start() # 返回线程 return thr @app.route('/') def index(): return '邮件发送' @app.route('/send/') def send(): # 第二个参数允许多个传参,也就是可以一次发送给多个用户。也就是函数形参使用 * 格式的形参。 send_mail('账户**', '[email protected],', template='activate.html', name='帅哥') return '邮件已发送' if __name__ == '__main__': manager.run()
普通发送:
import smtplib from email.mime.text import MIMEText smtp_server = 'smtp.163.com' # 登录邮箱服务器的密码 password = 'xxxxxx' # 登录邮箱服务器的账号 sender = 'xxxxxx' # 指定发送给谁邮件 to = '[email protected]' # 确定发送内容 message = '今天晚上咱一起吃饭,好不好呢?吃完饭在一起看电影' # 字符串不能直接发送,需要先转化为指定的格式 message = MIMEText(message) # 定制邮件的标题 message['Subject'] = '我们约会吧' message['From'] = sender # 通过服务器和端口号创建一个对象 mail_server = smtplib.SMTP(smtp_server, 25) # 通过这个对象登录邮箱服务器 mail_server.login(sender, password) # print(mail_server) # 发送邮件 mail_server.sendmail(sender, to, message.as_string()) # 退出 mail_server.quit()
以上就是两种邮件发送的方式。
上一篇: webpack的安装使用
下一篇: CUDA流总结