This commit is contained in:
2026-02-02 15:17:44 +01:00
parent 63b50f279b
commit 81a4d00b62

89
app.py
View File

@@ -1,4 +1,8 @@
from fastapi import FastAPI, UploadFile, HTTPException, Body from fastapi import FastAPI, UploadFile, HTTPException, Body, Request
import smtplib
import base64
from email.message import EmailMessage
import os
from PIL import Image from PIL import Image
import pytesseract import pytesseract
from doctr.models import ocr_predictor from doctr.models import ocr_predictor
@@ -27,6 +31,12 @@ file_handler.setFormatter(logging.Formatter(
"%(asctime)s - %(levelname)s - %(name)s - %(message)s" "%(asctime)s - %(levelname)s - %(name)s - %(message)s"
)) ))
SMTP_SERVER = "smtp.gmail.com"
SMTP_PORT = 587
EMAIL_ACCOUNT = "faircotbot@gmail.com"
EMAIL_PASSWORD = "zmaqjfrvjpyvcrlg"
import pyodbc import pyodbc
def get_db_connection(): def get_db_connection():
@@ -981,4 +991,79 @@ def parse_report(text):
# if template not in PARSERS: # if template not in PARSERS:
# return {"template":"UNKNOWN"} # return {"template":"UNKNOWN"}
# return PARSERS[template].parse(text) # return PARSERS[template].parse(text)
return template return template
@app.post("/mail")
async def send_mail(request: Request):
try:
payload = await request.json()
except Exception:
raise HTTPException(status_code=400, detail="Invalid JSON")
# Champs obligatoires
to = payload.get("to")
subject = payload.get("subject")
body = payload.get("body")
if not to or not subject or not body:
raise HTTPException(
status_code=400,
detail="Missing required fields: to, subject, body"
)
cc = payload.get("cc", [])
attachments = payload.get("attachments", [])
# Création du message
msg = EmailMessage()
msg["From"] = EMAIL_ACCOUNT
msg["To"] = ", ".join(to)
if cc:
msg["Cc"] = ", ".join(cc)
msg["Subject"] = subject
msg.set_content(body)
# Pièces jointes (base64)
for att in attachments:
filename = att.get("filename")
content = att.get("content")
content_type = att.get("content_type", "application/octet-stream")
if not filename or not content:
raise HTTPException(
status_code=400,
detail="Attachment must contain filename and content"
)
try:
file_bytes = base64.b64decode(content)
except Exception:
raise HTTPException(
status_code=400,
detail=f"Invalid base64 for attachment {filename}"
)
maintype, subtype = content_type.split("/", 1)
msg.add_attachment(
file_bytes,
maintype=maintype,
subtype=subtype,
filename=filename
)
# Envoi SMTP
try:
with smtplib.SMTP(SMTP_SERVER, SMTP_PORT) as server:
server.starttls()
server.login(EMAIL_ACCOUNT, EMAIL_PASSWORD)
server.send_message(msg)
except Exception as e:
raise HTTPException(status_code=500, detail=str(e))
return {
"status": "sent",
"to": to,
"attachments": len(attachments)
}