From deaddd813286740efcf1381babf52b3479ccfb86 Mon Sep 17 00:00:00 2001 From: VivianDee <115420678+VivianDee@users.noreply.github.com> Date: Wed, 16 Jul 2025 14:19:10 +0100 Subject: [PATCH] [add]: mail --- app/__init__.py | 6 +++++- app/config.py | 10 +++++++++- app/extensions.py | 2 ++ app/utils/mail.py | 40 ++++++++++++++++++++++++++++++++++++++++ requirements.txt | 3 +++ send_report.py | 15 +++++++++++++++ 6 files changed, 74 insertions(+), 2 deletions(-) create mode 100644 app/utils/mail.py create mode 100644 send_report.py diff --git a/app/__init__.py b/app/__init__.py index 6239e16..84ef02b 100644 --- a/app/__init__.py +++ b/app/__init__.py @@ -1,4 +1,5 @@ from flask import Flask +from flask_mail import Mail import os from flask_swagger_ui import get_swaggerui_blueprint from flask_cors import CORS @@ -7,7 +8,7 @@ from app.api.routes import api from app.errors import register_error_handlers from flask_sqlalchemy import SQLAlchemy from flask_migrate import Migrate -from app.extensions import db, migrate +from app.extensions import db, migrate, mail from flask_jwt_extended import ( JWTManager, jwt_required, @@ -47,6 +48,9 @@ def create_app(): from . import models + # Initialize Flask-Mail + mail.init_app(app) + # Database and Migrations db.init_app(app) diff --git a/app/config.py b/app/config.py index d1f4a86..ec03c5d 100644 --- a/app/config.py +++ b/app/config.py @@ -85,7 +85,15 @@ class Config: "salarypaymenT_6" ] - + MAIL_SERVER = os.getenv('MAIL_SERVER','smtp.zoho.com') + MAIL_PORT = 587 + MAIL_USERNAME = os.getenv('MAIL_USERNAME', 'firstadvance@dynamikservices.tech') + MAIL_PASSWORD = os.getenv('MAIL_PASSWORD') + MAIL_USE_TLS = True + MAIL_USE_SSL = False + MAIL_DEFAULT_SENDER = ('FirstAdvance', 'firstadvance@dynamikservices.tech') + MAIL_RECEIVER= os.getenv('MAIL_RECEIVER', 'vdagbue@gmail.com') + settings = Config() diff --git a/app/extensions.py b/app/extensions.py index de1947d..b2b6af8 100644 --- a/app/extensions.py +++ b/app/extensions.py @@ -1,5 +1,7 @@ from flask_sqlalchemy import SQLAlchemy from flask_migrate import Migrate +from flask_mail import Mail +mail = Mail() db = SQLAlchemy() migrate = Migrate() \ No newline at end of file diff --git a/app/utils/mail.py b/app/utils/mail.py new file mode 100644 index 0000000..3e39255 --- /dev/null +++ b/app/utils/mail.py @@ -0,0 +1,40 @@ +from flask_mail import Message +from flask import current_app +from app.extensions import mail +import pandas as pd +from io import BytesIO + +def get_report_data(): + """ + Fetch and return loan summary data. + """ + return [ + {"Type": "Disbursement", "Count": 45}, + {"Type": "Repayment", "Count": 32}, + ] +def send_report_email(report_data: list, recipients: list): + """ + Sends an HTML + Excel report to the given email recipients. + """ + df = pd.DataFrame(report_data) + output = BytesIO() + df.to_excel(output, index=False) + output.seek(0) + + html_table = df.to_html(index=False, border=1) + + msg = Message( + subject="Loan Report Summary", + recipients=recipients, + html=f"