[英]how to output decoded base64 encoded emails with python's smptd DebuggingServer
我發現了這個很棒的襯板,可以使用python快速創建smtp服務器:
python -m smtpd -n -c DebuggingServer localhost:1025
麻煩的是,我的應用程序發送了以base64編碼的郵件內容,因此輸出確實看起來像垃圾:
---------- MESSAGE FOLLOWS ----------
b'Content-Type: multipart/alternative; boundary="===============7226846835346479139=="'
b'MIME-Version: 1.0'
b'Subject: redacted subject'
b'From: ACME Online 2'
b'To: john.doe@acme.com'
b'Cc: '
b'X-Peer: 10.255.13.37'
b''
b'--===============7226846835346479139=='
b'Content-Type: text/html; charset="utf-8"'
b'MIME-Version: 1.0'
b'Content-Transfer-Encoding: base64'
b''
b'PCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMCBUcmFuc2l0aW9uYWwv'
b'L0VOIj4KPGh0bWw+CjxoZWFkPgogICAgPG1ldGEgaHR0cC1lcXVpdj0iY29udGVudC10eXBlIiBj'
b'b250ZW50PSJ0ZXh0L2h0bWw7Y2hhcnNldD1pc28tODg1OS0xIj4KICAgIDx0aXRsZT5XZWVrbHkg'
等等。
如果我不喜歡這個,我會得到:
atob('PCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMCBUcmFuc2l0aW9uYWwv')
"<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional/"
如何獲得干凈的base64輸出解碼日志? 附言:我不想以后再處理日志,我希望直接輸出干凈的日志。 它在linux docker容器中運行。
感謝@zwer的回答,我自己實現了一個服務器:
import asyncore
import email
from smtpd import DebuggingServer
class ActualDebuggingServer(DebuggingServer):
def _print_message_content(self, peer, data):
msg = email.message_from_string(data)
for (header,value) in msg.items():
print(header, ': ', value)
for part in msg.walk():
print('---------- a part: ----------')
maybe_decoded_payload = part.get_payload(decode=True)
if (maybe_decoded_payload is not None):
print(bytes.decode(maybe_decoded_payload, encoding="utf-8"))
if __name__ == '__main__':
ActualDebuggingServer(
('0.0.0.0', 1025),
('0.0.0.0', 1025)
)
try:
asyncore.loop()
except KeyboardInterrupt:
pass
這確實很粗糙,它假定部分是以UTF-8編碼的。 另外,我不確定第二個參數是什么。 請謹慎使用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.