-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathserver.py
More file actions
79 lines (66 loc) · 2.61 KB
/
Copy pathserver.py
File metadata and controls
79 lines (66 loc) · 2.61 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
import os
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from typing import Optional
from fastapi import FastAPI, HTTPException
from fastapi.middleware.cors import CORSMiddleware
from pydantic import BaseModel
from dotenv import load_dotenv
BASE_DIR = os.path.dirname(os.path.abspath(__file__))
env_path = os.path.join(BASE_DIR, ".env")
load_dotenv(dotenv_path=env_path)
TARGET_EMAIL = os.getenv("TARGET_EMAIL")
MAIL_RU_PASSWORD = os.getenv("MAIL_RU_PASSWORD")
app = FastAPI()
app.add_middleware(
CORSMiddleware,
allow_origins=["*"],
allow_methods=["*"],
allow_headers=["*"],
)
class FeedbackForm(BaseModel):
name: str
phone: str
email: Optional[str] = None
message: str
@app.post("/send")
def send_message(data: FeedbackForm):
if not TARGET_EMAIL or not MAIL_RU_PASSWORD:
print("Ошибка: Не настроены переменные окружения (.env)")
raise HTTPException(status_code=500, detail="Server config error")
subject = f"SITE: Заявка от {data.name}"
body = f"""
<html>
<body style="font-family: sans-serif;">
<h2>Новая заявка с сайта</h2>
<p><strong>Имя:</strong> {data.name}</p>
<p><strong>Телефон:</strong> {data.phone}</p>
<p><strong>Email:</strong> {data.email or 'не указан'}</p>
<p><strong>Сообщение:</strong></p>
<div style="border-left: 4px solid #333; padding-left: 10px;">{data.message}</div>
</body>
</html>
"""
msg = MIMEMultipart()
msg['From'] = TARGET_EMAIL
msg['To'] = TARGET_EMAIL
msg['Subject'] = subject
msg.attach(MIMEText(body, 'html'))
try:
print(f"Попытка отправки письма на {TARGET_EMAIL}...")
with smtplib.SMTP_SSL('smtp.mail.ru', 465, timeout=30) as server:
server.login(TARGET_EMAIL, MAIL_RU_PASSWORD)
server.send_message(msg)
print("Письмо успешно отправлено!")
return {"ok": True}
except smtplib.SMTPAuthenticationError:
print("Ошибка: Неверный логин/пароль. Нужен пароль для приложений!")
return {"ok": False, "error": "Auth error"}
except Exception as e:
print(f"Ошибка при отправке: {type(e).__name__}: {e}")
return {"ok": False, "error": str(e)}
if __name__ == "__main__":
import uvicorn
print(f"Запуск сервера. Целевая почта: {TARGET_EMAIL}")
uvicorn.run(app, host="127.0.0.1", port=8000)