test
This commit is contained in:
@@ -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
|
||||||
@@ -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"
|
||||||
# 如果内部连接不通,可以尝试使用外部连接
|
# 如果内部连接不通,可以尝试使用外部连接
|
||||||
|
|||||||
@@ -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())
|
|
||||||
18
app/utils.py
18
app/utils.py
@@ -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:
|
||||||
|
|||||||
@@ -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
16
run.py
@@ -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)
|
||||||
Reference in New Issue
Block a user