欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

使用线程实现异步的邮件发送,以及简单普通的邮件发送。

程序员文章站 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()

以上就是两种邮件发送的方式。