首页 > 其他分享 >mail_api_flask 接口开发及uwsgi部署项目

mail_api_flask 接口开发及uwsgi部署项目

时间:2023-03-21 17:22:21浏览次数:60  
标签:flask api time mail local uwsgi

一、项目代码

#vim /usr/local/src/mail_api_flask/run.py

"""
    mail_api_flask 为基于Flask web框架开发的在线发送邮件api,实现功能复用。支持html模板邮件。
"""
from flask import Flask
from flask import request
from flask_mail import Mail, Message
from concurrent.futures import ThreadPoolExecutor  # 线程池
import time

executor = ThreadPoolExecutor(max_workers=10)  # max_workers 配置最大线程数
app = Flask(__name__)


def sendmail(subject, sender_name, recipients, html):
    """
    发送邮件
    :param subject: 邮件主题
    :param sender_name: 发件人别名
    :param recipients: 接收邮箱,list格式
    :param html: html内容模板
    :return: 状态
    """
    app.config['MAIL_SERVER'] = 'smtp.qq.com'
    app.config['MAIL_PORT'] = 465
    app.config['MAIL_USERNAME'] = '[email protected]'
    app.config['MAIL_PASSWORD'] = 'xxxxx'
    app.config['MAIL_USE_TLS'] = False
    app.config['MAIL_USE_SSL'] = True
    mail = Mail(app)
    print("sendmail is running..." + time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()))

    try:
        msg = Message(subject=subject, sender=(sender_name, '[email protected]'), recipients=recipients)
        msg.html = html
        executor.submit(mail.send(msg))  # 多线程发送邮件
        status = {"msg": "Successed", "code": "1000", "sendtime": time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())}
        print("邮件已成功发送到【%s】" % recipients + time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()))
    except Exception as e:
        status = {"msg": e, "code": "1001", "sendtime": time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())}
        print("邮件未发送到【%s】" % recipients + time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()))
    return status


# http://127.0.0.1:5000/api/v1/sendmail
@app.route("/api/v1/sendmail", methods=["GET", "POST"])
def index():
    if request.method == "POST":
        subject = request.values.get("subject")
        sender_name = request.values.get("sender_name")
        recipients = request.values.get("recipients")
        html = request.values.get("html")
        return sendmail(subject=subject, sender_name=sender_name, recipients=[recipients], html=html)
    return "sendmail接口运行正常!" + time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())


if __name__ == '__main__':
    app.run(debug=False, host='0.0.0.0')

 

二、uwsgi部署项目

1、创建虚拟环境

cd /usr/local/src/pyENV/
virtualenv mail_api_flask_EN

 

2、创建uwsgi.ini文件

# vim /usr/local/src/mail_api_flask/uwsgi/uwsgi.ini

[uwsgi]
#服务端口号
http = 127.0.0.1:5000
#项目路径
chdir  = /usr/local/src/mail_api_flask
#wsgi文件 run就是flask启动文件去掉后缀名 app是run.py里面的Flask对象 
module  = run:app
virtualenv =/usr/local/src/pyENV/mail_api_flask_ENV
wsgi-file = /usr/local/src/mail_api_flask/run.py
pidfile = /usr/local/src/mail_api_flask/master.pid
#指定工作进程
processes  = 4
#主进程
master = true
#每个工作进程有2个线程
threads = 2
#指的后台启动 日志输出的地方
daemonize = /usr/local/src/mail_api_flask/uwsgi/logs/uwsgi.log
#保存主进程的进程号
pidfile = master.pid
#服务启动的参数
pyargv = -f web_etl.yml

3、uwsgi 启动 停止 重新启动 命令

#启动
uwsgi --ini uwsgi.ini
#停止
uwsgi --stop master.ini
#重新启动
uwsgi --reload master.ini

 

4、创建start_project.sh文件,赋予可执行权限

#chmod +x start_project.sh

#vim /usr/local/src/mail_api_flask/uwsgi/start_project.sh

uwsgi --ini /usr/local/src/mail_api_flask/uwsgi/uwsgi.ini

 

5、编辑nginx配置文件

    # sendmail api
    server {
        listen       8082;
        server_name  _;

        location =/sendmail {
            #include /etc/nginx/uwsgi_params;
            proxy_pass http://127.0.0.1:5000/api/v1/sendmail;
        }

    }

 

6、设置开机自启动

#赋予rc.local可执行权限
chmod +x /etc/rc.d/rc.local

#在rc.local添加启动脚本路径
/usr/local/src/mail_api_flask/uwsgi/start_project.sh

#使rc.local文件生效
source /etc/rc.d/rc.local

 

标签:flask,api,time,mail,local,uwsgi
From: https://www.cnblogs.com/QiuPing-blog/p/17240722.html

相关文章

  • steamship上GPT4 API免费用,简单三步无需OpenAI账号
    零、会编程开发的可以用来开发一个GPT4应用,如在线网页或客户端。一、打开steamship网站简单注册自己的账户,操作很快,只账户基础信息。https://www.steamship......
  • 通过appId和appSecret生成accessToken访问api后端接口(接口授权)
    功能点(1)申请获取appId和appSecret(2)通过appId和appSecret获取accessToken(3)mysql和redis进行key-value键值对存储(4)对需要的接口url进行请求地址拦截效果图:(1)正确的accessToken......
  • GPT-4 来了!GPT-4 介绍与 API 申请
    自从老王接触了ChatGPT后就开始关注OpenAI这个人工智能项目了,前段时间最新的GPT-4架构也推出了,并且开放了申请渠道。本文分享下GPT-4是什么,有哪些更新,以及如何申请......
  • javaSE-day03(常用API一)
    API(ApplicationProgramminginterface)意思是应用程序编程接口,说人话就是Java帮我们写好的一些程序,如:类、方法等,我们直接拿过来用就可以解决一些问题。可以在API文档进行查......
  • iOS之Runtime - 常用的API
    Runtime常用的API1-类②成员变量③属性④方法⑤其他2-如何使用①新建Person和Animal两个类,如下②代码示例1#import<Foundation/Found......
  • Cucumber post API
    1.接口RequestURL:http://10.194.109.125/UserHabit/ICSUI/QuickLoginRequestMethod:POSTStatusCode:204NoContent 2.feature文件Feature:APItest......
  • 微信小程序封装API接口(2)
    先建一个api文件夹(叫什么都可以,但是为了规范化),在下面新建文件request.js// ----http----// api URLconst apiUrl = "https://接口地址:端口";// 公共的请求地址......
  • flask-cookie,session用法
    cookie用法cookie是存储在浏览器上的少量用户信息.```python.....```  session用法session可以加密后存在浏览器.也可以存储在服务器.使用session需要在配置中......
  • Windows 环境下用 smtp 实现 Email 客户端
    计算机网络原理实验二先来看看smtp协议具体写的时候不用这么多,先ehlo一下,然后登录,发邮件就可以了。使用QQ邮箱,搜了搜写出来以下代码:importjava.io.*;importjava.n......
  • 通过appId和appSecret生成accessToken访问api后端接口(接口授权)
    功能点(1)申请获取appId和appSecret(2)通过appId和appSecret获取accessToken(3)mysql和redis进行key-value键值对存储(4)对需要的接口url进行请求地址拦截效果图:(1)正确的accessToken......