from dotenv import load_dotenv from flask import Flask from flask import current_app from flask import json from flask import jsonify from flask import make_response from flask import request from flask_mail import Mail from flask_mail import Message from os import getenv from werkzeug.middleware.proxy_fix import ProxyFix load_dotenv() app = Flask(__name__) app.config.update( DEBUG=True if getenv('FLASK_DEBUG') == 'True' else False, SECRET_KEY=getenv('FLASK_SECRET_KEY'), MAIL_SERVER=getenv("FLASK_MAIL_SERVER"), MAIL_PORT=getenv("FLASK_MAIL_PORT"), MAIL_USE_SSL=getenv("FLASK_MAIL_USE_SSL"), MAIL_DEBUG=False, MAIL_USERNAME=getenv("FLASK_MAIL_USERNAME"), MAIL_PASSWORD=getenv("FLASK_MAIL_PASSWORD"), MAIL_RECIPIENT=getenv("FLASK_MAIL_RECIPIENT") ) app.wsgi_app = ProxyFix(app.wsgi_app) mail = Mail(app) @app.after_request def after(response): response.headers["Access-Control-Allow-Origin"] = "*" response.headers["Access-Control-Allow-Headers"] = "*" return response @app.route("/rfq", methods=["POST"]) def send_rfq(): payload = request.json payload = json.loads(json.htmlsafe_dumps(payload)) if payload is None: resp = jsonify(error="invalid data") return make_response(resp, 400) if "email" not in payload: resp = jsonify(error="missing email") return make_response(resp, 400) if "body" not in payload: resp = jsonify(error="missing body") return make_response(resp, 400) if "configuration" not in payload: resp = jsonify(error="missing configuration") return make_response(resp, 400) recipient = current_app.config["MAIL_RECIPIENT"] msg = Message( "[ORDER HARDWARE - RFQ from %s]" % payload['email'], reply_to=recipient, sender=payload["email"], recipients=[recipient]) msg.body = payload["body"] msg.html = payload["body"] msg_client_confirmation = Message( "[M-Labs - Order Hardware]", reply_to=recipient, sender=recipient, recipients=[payload["email"]]) msg_client_confirmation.body = "Hello! We've received your request and " \ "will be in contact soon. " \ "Here is a reminder of your configuration: {}" \ "Thank you!".format(payload["configuration"]) msg_client_confirmation.html = "Hello!
" \ "We've received your request and will be in contact soon.
" \ "Here is a reminder of your configuration: {}

" \ "Thank you!".format(payload["configuration"]) with mail.connect() as conn: conn.send(msg) conn.send(msg_client_confirmation) return jsonify("ok")