This commit is contained in:
huangzhenpc
2025-02-26 18:42:59 +08:00
parent 1b81f4eebd
commit ce450544b1
6 changed files with 13 additions and 50 deletions

View File

@@ -1,15 +1,7 @@
from flask import Flask from flask import Flask
from .config import Config from .config import Config
from .models import db
def create_app(): def create_app():
app = Flask(__name__) app = Flask(__name__)
app.config.from_object(Config) app.config.from_object(Config)
# 初始化数据库
db.init_app(app)
with app.app_context():
db.create_all()
return app return app

View File

@@ -1,9 +1,4 @@
class Config: class Config:
# 使用 1Panel MySQL 内部连接
SQLALCHEMY_DATABASE_URI = 'mysql://gitea_HN5jYh:mysql_KbBZTN@1Panel-mysql-vjz9:3306/gitea_2l82ep'
# 如果内部连接不通,可以尝试使用外部连接
# SQLALCHEMY_DATABASE_URI = 'mysql://gitea_HN5jYh:mysql_KbBZTN@rnpanel.586vip.cn:3306/gitea_2l82ep'
SQLALCHEMY_TRACK_MODIFICATIONS = False
# 使用 1Panel Redis 内部连接 # 使用 1Panel Redis 内部连接
REDIS_URL = "redis://1Panel-redis-r3Pz:6379/0" REDIS_URL = "redis://1Panel-redis-r3Pz:6379/0"
# 如果内部连接不通,可以尝试使用外部连接 # 如果内部连接不通,可以尝试使用外部连接

View File

@@ -1,11 +0,0 @@
from flask_sqlalchemy import SQLAlchemy
db = SQLAlchemy()
class Email(db.Model):
id = db.Column(db.Integer, primary_key=True)
subject = db.Column(db.String(255))
sender = db.Column(db.String(255))
recipient = db.Column(db.String(255))
body = db.Column(db.Text)
timestamp = db.Column(db.DateTime, server_default=db.func.now())

View File

@@ -5,7 +5,6 @@ import logging
from email.parser import BytesParser from email.parser import BytesParser
from email.policy import default from email.policy import default
from datetime import datetime from datetime import datetime
from .models import db, Email
import redis import redis
import smtpd import smtpd
import asyncore import asyncore
@@ -23,23 +22,6 @@ logger = logging.getLogger('smtp_server')
redis_client = redis.from_url(Config.REDIS_URL) redis_client = redis.from_url(Config.REDIS_URL)
def receive_email():
# 这里实现邮件接收逻辑
# 假设我们从某个 SMTP 服务器接收邮件
# 解析邮件并存储到 Redis
# 示例:
raw_email = b'...' # 这里应该是接收到的原始邮件内容
email = BytesParser(policy=default).parsebytes(raw_email)
email_data = {
'subject': email['subject'],
'sender': email['from'],
'recipient': email['to'],
'body': email.get_body(preferencelist=('plain')).get_content()
}
# 将邮件信息存储到 Redis
redis_client.hmset(f'email:{email_data['subject']}', email_data)
class CustomSMTPServer(smtpd.SMTPServer): class CustomSMTPServer(smtpd.SMTPServer):
def process_message(self, peer, mailfrom, rcpttos, data): def process_message(self, peer, mailfrom, rcpttos, data):
try: try:

View File

@@ -1,6 +1,3 @@
Flask==2.0.1 Flask==2.0.1
Flask-SQLAlchemy==2.5.1
Flask-Mail==0.9.1
redis==3.5.3 redis==3.5.3
mysqlclient==2.0.3 Flask-Mail==0.9.1
SQLAlchemy==1.4.23

16
run.py
View File

@@ -1,17 +1,25 @@
import threading import threading
import argparse
from app import create_app from app import create_app
from app.utils import start_smtp_server from app.utils import start_smtp_server
app = create_app() app = create_app()
def run_smtp_server(): def run_smtp_server(host, port):
start_smtp_server(host='0.0.0.0', port=25) start_smtp_server(host=host, port=port)
if __name__ == '__main__': if __name__ == '__main__':
parser = argparse.ArgumentParser(description='Email System Server')
parser.add_argument('--host', default='0.0.0.0', help='Host to bind')
parser.add_argument('--port', type=int, default=5000, help='Port for web server')
parser.add_argument('--smtp-port', type=int, default=25, help='Port for SMTP server')
args = parser.parse_args()
# 在单独的线程中启动 SMTP 服务器 # 在单独的线程中启动 SMTP 服务器
smtp_thread = threading.Thread(target=run_smtp_server) smtp_thread = threading.Thread(target=run_smtp_server, args=(args.host, args.smtp_port))
smtp_thread.daemon = True smtp_thread.daemon = True
smtp_thread.start() smtp_thread.start()
# 启动 Flask 应用 # 启动 Flask 应用
app.run(host='0.0.0.0', port=5000, debug=True) app.run(host=args.host, port=args.port)