from flask import Flask, request, jsonify from flask_cors import CORS import base64 import os import traceback # For SendGrid from sendgrid import SendGridAPIClient from sendgrid.helpers.mail import (Mail, Attachment, FileContent, FileName, FileType, Disposition) app = Flask(__name__) CORS(app) # Environment variable for the Email API Key (set as a Secret in HF Space) SENDGRID_API_KEY = os.environ.get("SENDGRID_API_KEY") # Your sender email address - should be verified with SendGrid for best results SENDER_EMAIL_ADDRESS = os.environ.get("SENDER_EMAIL_ADDRESS") # e.g., epicamp.response@gmail.com or a domain email @app.route('/send-report-via-email', methods=['POST']) def handle_send_email_http_api(): request_id = base64.b64encode(os.urandom(6)).decode('utf-8') print(f"EMAIL_SENDER_API (HTTP - SendGrid) [{request_id}]: Received request") if not SENDGRID_API_KEY: error_msg = f"EMAIL_SENDER_API (HTTP - SendGrid) [{request_id}]: ERROR - SENDGRID_API_KEY (Secret) not set." print(error_msg) return jsonify({"status": "error", "message": "Email API key configuration incomplete."}), 500 if not SENDER_EMAIL_ADDRESS: error_msg = f"EMAIL_SENDER_API (HTTP - SendGrid) [{request_id}]: ERROR - SENDER_EMAIL_ADDRESS (Secret) not set." print(error_msg) return jsonify({"status": "error", "message": "Sender email address configuration incomplete."}), 500 data = request.json if not data: print(f"EMAIL_SENDER_API (HTTP - SendGrid) [{request_id}]: No JSON data received.") return jsonify({"status": "error", "message": "No data received by email API."}), 400 recipient_email = data.get('recipient_email') pdf_base64_data = data.get('pdf_base64_data') pdf_filename = data.get('pdf_filename') print(f"EMAIL_SENDER_API (HTTP - SendGrid) [{request_id}]: Attempting to send to: {recipient_email}, Filename: {pdf_filename}") if not all([recipient_email, pdf_base64_data, pdf_filename]): print(f"EMAIL_SENDER_API (HTTP - SendGrid) [{request_id}]: Missing required data.") return jsonify({"status": "error", "message": "Missing required data in payload."}), 400 message = Mail( from_email=SENDER_EMAIL_ADDRESS, to_emails=recipient_email, subject=f"EPIC-AMP Analysis Report: {pdf_filename}", html_content=f"""
Dear User,
Please find your EPIC-AMP analysis report attached.
Filename: {pdf_filename}
This report includes details on your sequence analysis.
Thank you for using EPIC-AMP!
Best regards,
The EPIC-AMP Team
Bioinformatics and Computational Biology Unit, Zewail City
For inquiries: epicamp.sup@gmail.com