Skip to content

Instantly share code, notes, and snippets.

@ashish-mj
Created December 31, 2024 09:33
Show Gist options
  • Save ashish-mj/32337c99c784c8f3346330e216ad8773 to your computer and use it in GitHub Desktop.
Save ashish-mj/32337c99c784c8f3346330e216ad8773 to your computer and use it in GitHub Desktop.
import os
import uuid
from datetime import datetime
from dotenv import load_dotenv
from couchbase.exceptions import DocumentExistsException
from src.cb import CouchbaseClient
from flask import Flask, request, jsonify
from flask_restx import Api, Resource, fields
from mailjet_rest import Client
app = Flask(__name__)
env_path = "./src/.env"
load_dotenv(env_path)
senderMail = os.getenv("SENDER_MAIL")
mailjet = Client(auth=(os.getenv("API_KEY"), os.getenv("API_SECRET")), version='v3.1')
api = Api(app)
nsProduct = api.namespace("api/v1/email", "Send Email")
emailInsert = api.model(
"emailInsert",
{
"name": fields.String(required=True, description="Name of Customer"),
"mailId": fields.String(required=True, description="Mail Id of customer"),
},
)
emailResponse = api.model(
"emailResponse",
{
"id": fields.String(required=True, description="Audit for email sent"),
"mailId": fields.String(required=True, description="Mail Id of customer"),
"status" : fields.String(required=True, description="Email Status"),
"deliveredAt" : fields.String(required=True, description="Time email is delivered"),
"statusCode" : fields.Integer(required=True, description="Status code of SMTP")
},
)
@nsProduct.route("/sendMail")
class Email(Resource):
# tag::post[]
@nsProduct.doc(
"Send Email",
reponses={200: "Success", 500: "Unexpected Error"},
)
@nsProduct.expect(emailInsert, validate=True)
@nsProduct.marshal_with(emailResponse)
def post(self):
reqData = request.json
print(reqData)
data = {
'Messages': [
{
"From": {
"Email": senderMail,
"Name": senderMail
},
"To": [
{
"Email": reqData["mailId"],
"Name": reqData["name"]
}
],
"Subject": "Greetings from DealBazaar",
"TextPart": f"Welcome",
"HTMLPart": f"<h3>Dear {reqData['name']} , Your order is successfully placed.Thank you!"
}
]
}
response = {}
rep = mailjet.send.create(data=data)
print(rep.status_code)
if rep.status_code==200:
print("Entered 1")
response["status"] = "SUCCESS"
response["deliveredAt"] = datetime.now().strftime("%d/%m/%Y %H:%M:%S")
elif rep.status_code==200:
print("Entered 2")
response["status"] = "SUCCESS"
response["deliveredAt"] = datetime.now().strftime("%d/%m/%Y %H:%M:%S")
else:
print("Entered 3")
response["status"] = "FAILURE"
response["deliveredAt"] = None
id = uuid.uuid4().__str__()
response["id"] = id
response["mailId"] = reqData["mailId"]
response["statusCode"] = rep.status_code
try :
print("Entered DB insert")
cb.insert(id, response)
print(response)
print("DB insert success")
return jsonify({"message":"Mail Accepted"}), 202
except DocumentExistsException:
return jsonify({"message":"Mail DB failure"}), 409
except Exception as e:
print(response)
print("Excepted Error")
print(e)
return jsonify({"message": f"Unexpected error: {e}"}), 500
db_info = {
"host": os.getenv("DB_HOST"),
"bucket": os.getenv("BUCKET"),
"scope": os.getenv("SCOPE"),
"collection": os.getenv("COLLECTION"),
"username": os.getenv("USERNAME"),
"password": os.getenv("PASSWORD")
}
print(db_info)
cb = CouchbaseClient(*db_info.values())
cb.connect()
if __name__ == "__main__":
app.run(debug=True,port=5004)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment