ทำไมไม่เริ่มเซิร์ฟเวอร์ SMTP ที่เรียบง่ายของคุณเองโดยรับช่วงจากsmtpd.SMTPServer
และthreading.Thread
:
class TestingSMTPServer(smtpd.SMTPServer, threading.Thread):
def __init__(self, port=25):
smtpd.SMTPServer.__init__(
self,
('localhost', port),
('localhost', port),
decode_data=False
)
threading.Thread.__init__(self)
def process_message(self, peer, mailfrom, rcpttos, data, **kwargs):
self.received_peer = peer
self.received_mailfrom = mailfrom
self.received_rcpttos = rcpttos
self.received_data = data
def run(self):
asyncore.loop()
process_message ถูกเรียกเมื่อใดก็ตามที่เซิร์ฟเวอร์ SMTP ของคุณได้รับคำร้องขอเมลคุณสามารถทำอะไรก็ได้ที่คุณต้องการ
ในโค้ดทดสอบให้ทำดังนี้:
smtp_server = TestingSMTPServer()
smtp_server.start()
do_thing_that_would_send_a_mail()
smtp_server.close()
self.assertIn(b'hello', smtp_server.received_data)
ก็อย่าลืมโดยโทรไปสิ้นสุดการวนรอบ asyncore (การหยุดเซิร์ฟเวอร์จากการฟัง)close()
asyncore.dispatcher
smtp_server.close()