76 lines
2.3 KiB
Python
76 lines
2.3 KiB
Python
#!/usr/bin/env python3
|
|
"""
|
|
Simple SMTP email sender for echo@romfast.ro
|
|
Usage: python3 email_send.py "recipient@email.com" "Subject" "Body text"
|
|
"""
|
|
|
|
import smtplib
|
|
import ssl
|
|
import sys
|
|
import os
|
|
from email.mime.text import MIMEText
|
|
from email.mime.multipart import MIMEMultipart
|
|
from email.header import Header
|
|
from email.utils import formataddr
|
|
from pathlib import Path
|
|
|
|
# Load .env file
|
|
env_path = Path(__file__).parent.parent / '.env'
|
|
if env_path.exists():
|
|
with open(env_path) as f:
|
|
for line in f:
|
|
line = line.strip()
|
|
if line and not line.startswith('#') and '=' in line:
|
|
key, value = line.split('=', 1)
|
|
os.environ.setdefault(key, value)
|
|
|
|
# SMTP Configuration from environment
|
|
SMTP_SERVER = os.environ.get('EMAIL_SERVER', 'mail.romfast.ro')
|
|
SMTP_PORT = 465
|
|
SMTP_USER = os.environ.get('EMAIL_USER', 'echo@romfast.ro')
|
|
SMTP_PASS = os.environ.get('EMAIL_PASSWORD', '')
|
|
FROM_NAME = "Echo"
|
|
|
|
def send_email(to_email: str, subject: str, body: str, html: bool = False) -> dict:
|
|
"""Send an email via SMTP SSL"""
|
|
try:
|
|
# Create message
|
|
msg = MIMEMultipart("alternative")
|
|
msg["Subject"] = Header(subject, 'utf-8')
|
|
msg["From"] = formataddr((FROM_NAME, SMTP_USER))
|
|
msg["To"] = to_email
|
|
|
|
# Attach body
|
|
if html:
|
|
msg.attach(MIMEText(body, "html", "utf-8"))
|
|
else:
|
|
msg.attach(MIMEText(body, "plain", "utf-8"))
|
|
|
|
# Connect and send
|
|
context = ssl.create_default_context()
|
|
with smtplib.SMTP_SSL(SMTP_SERVER, SMTP_PORT, context=context) as server:
|
|
server.login(SMTP_USER, SMTP_PASS)
|
|
server.sendmail(SMTP_USER, to_email, msg.as_string())
|
|
|
|
return {"ok": True, "to": to_email, "subject": subject}
|
|
|
|
except Exception as e:
|
|
return {"ok": False, "error": str(e)}
|
|
|
|
if __name__ == "__main__":
|
|
if len(sys.argv) < 4:
|
|
print("Usage: python3 email_send.py <to> <subject> <body> [--html]")
|
|
sys.exit(1)
|
|
|
|
to = sys.argv[1]
|
|
subject = sys.argv[2]
|
|
body = sys.argv[3]
|
|
|
|
# Auto-detect HTML or use --html flag
|
|
is_html = "--html" in sys.argv or body.strip().startswith("<!DOCTYPE") or body.strip().startswith("<html")
|
|
|
|
result = send_email(to, subject, body, html=is_html)
|
|
|
|
import json
|
|
print(json.dumps(result))
|