| from flask import Flask, request, jsonify |
| import smtplib |
| from email.mime.text import MIMEText |
| from email.mime.multipart import MIMEMultipart |
| import os |
| from dotenv import load_dotenv |
|
|
| load_dotenv() |
|
|
| app = Flask(__name__) |
|
|
| API_KEY = os.environ.get('API_KEY', '') |
|
|
| @app.route('/send-email', methods=['POST']) |
| def send_email(): |
| if API_KEY: |
| provided_key = request.headers.get('x-api-key') |
| if provided_key != API_KEY: |
| return jsonify({'error': 'Unauthorized'}), 401 |
|
|
| data = request.json |
| if not data: |
| return jsonify({'error': 'Missing JSON payload'}), 400 |
|
|
| to_email = data.get('to_email') |
| subject = data.get('subject') |
| body = data.get('body') |
| |
| smtp_server = data.get('smtp_server') |
| smtp_port = data.get('smtp_port') |
| smtp_user = data.get('smtp_user') |
| smtp_password = data.get('smtp_password') |
|
|
| if not all([to_email, subject, body]): |
| return jsonify({'error': 'Missing to_email, subject, or body'}), 400 |
|
|
| if not all([smtp_server, smtp_port, smtp_user, smtp_password]): |
| return jsonify({'error': 'Missing SMTP credentials in payload'}), 400 |
|
|
| msg = MIMEMultipart() |
| msg['From'] = smtp_user |
| msg['To'] = to_email |
| msg['Subject'] = subject |
| msg.attach(MIMEText(body, 'plain', 'utf-8')) |
|
|
| try: |
| server = smtplib.SMTP(smtp_server, int(smtp_port), timeout=10) |
| server.starttls() |
| server.login(smtp_user, smtp_password) |
| server.send_message(msg) |
| server.quit() |
| return jsonify({'message': f'Email successfully sent to {to_email}'}), 200 |
| except Exception as e: |
| print(f"Error sending email: {e}") |
| return jsonify({'error': str(e)}), 500 |
|
|
| @app.route('/health', methods=['GET']) |
| def health(): |
| return jsonify({'status': 'ok'}), 200 |
|
|
| if __name__ == '__main__': |
| app.run(host='0.0.0.0', port=5000) |
|
|