mail_api_flask 接口開發及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'] = 'xxxxx@foxmail.com' 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, 'xxxxx@foxmail.com'), 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

浙公網安備 33010602011771號