- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我有一个线程化的 smtp 服务器,它在 Linux(ubuntu 14.04 和 fedora 20)上比在 OS x (10.8) 上多花 20 秒停止。
from email.parser import Parser
from smtpd import SMTPServer as StdLibSmtpServer
from smtplib import SMTP
from threading import Thread
import asyncore
import re
import select
import logging
import os.path
import datetime
import json
import random
from socket import gethostname
class SmtpServer(StdLibSmtpServer, object):
def __init__(self, listen='localhost', port=10025,
forward_address='localhost', forward_port=10026):
super(SmtpServer, self).__init__((listen, port), None)
self.forward_address = forward_address
self.forward_port = forward_port
self._thread = None
self._smtp = SMTP()
self._should_re_raise_exceptions = False
def start(self):
if self._thread:
raise Exception("Already running")
logging.debug("Starting up")
self._thread = Thread(target=self._thread_func)
self._thread.daemon = True
self._thread.start()
logging.info("Started")
def stop(self):
if not self._thread:
raise Exception("Not running")
logging.debug("Stopping")
self.close()
self._thread.join()
self._thread = None
logging.info("Stopped")
def _thread_func(self):
try:
asyncore.loop()
except select.error:
pass # socket was closed, we are shutting down
它发生在 self._thread.join() 行,我似乎能弄清楚原因。
关于如何进一步解决此问题的任何建议?我通过执行以下操作运行文件:
from test import SmtpServer
serv = SmtpServer()
serv.start()
serv.stop()
serv.stop() 是在 Linux 上速度较慢的部分。
最佳答案
原来根本原因是 asyncore.loop() 需要在使用 select 而不是 epoll 的系统上设置超时。非常感谢@binarydud 提供的帮助。事实证明,在 thread.join 上设置一个较短的超时也可以,但它可能会导致 asyncore 被孤立。
关于python - 在 Python 2.7 中使用线程 smtpd 的 linux 和 os x 之间的奇怪行为差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25830057/
我希望对电子邮件进行各种处理 - 例如。检查 header ,如果它们符合某些标准(看起来像垃圾邮件),则断开连接,或检查收件人列表并执行特殊过滤。 看起来 Python 的 smtpd 库提供了一个
我想收到一封带有 python 的电子邮件。然后我想退出邮件服务器并在我的脚本中使用电子邮件的内容。 例如: if "any_string" in data: print "success"
假设您在重写的类中处理一条消息,例如: class MailProcessorServer(smtpd.SMTPServer): def process_message(self, peer, s
有没有办法通过管道从 Python smtpd 调试服务器输出 python -m smtpd -n -c DebuggingServer localhost:1025 在数据库/文件中? 我想在一个
在我的 smtpd.SMTPServer 实现中,我可以通过 process_message() 回调接收消息。如何将回复消息发送回发件人? 最佳答案 这是一个可以发送电子邮件的脚本,它适合我。不知道
我正在尝试使用 Python 发送电子邮件并使用了以下代码: import smtplib import datetime SERVER = "localhost" PORT = 1025 FROM
所以,我想扩展 Python smtpd SMTPServer 类,以便它可以处理 SMTP AUTH 连接。看起来很简单...... 所以,看起来我可以这样开始: def smtp_EHLO(sel
我正在使用 postfix v3.3.0 设置新服务器 (Ubuntu 18.04.1 LTS)。 我遵循了 postfix 到只发送设置的标准部署。 http://www.postfix.org/S
我有一个线程化的 smtp 服务器,它在 Linux(ubuntu 14.04 和 fedora 20)上比在 OS x (10.8) 上多花 20 秒停止。 from email.parser im
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许在 Stack Overflow 上提出有关专业服务器或网络相关基础设施管理的问题。您可以编辑问
我是一名优秀的程序员,十分优秀!