我正在使用 Erlang 在电子邮件服务器和 Spamassassin 之间发送消息。
我想要实现的是检索 SA 完成的测试以生成报告(我正在做某种邮件测试程序)
当 SpamAssassin 回答(通过原始 TCP)时,它会发送一个如下所示的二进制字符串:

<<"SPAMD/1.1 0 EX_OK\r\nContent-length: 728\r\nSpam: True ; 6.3 / 5.0\r\n\r\nReceived: from localhost by debpub1.cs2cloud.internal\r\n\twith SpamAssassin (version 3.4.2);\r\n\tSat, 04 Jan 2020 18:24:37 +0100\r\nFrom: bibi <bibi@XXXXX.local>\r\nTo: <aZphki8N05@XXXXXXXX>\r\nSubject: i\r\nDate: Sat, 4 Jan 2020 18:24:36 +0100\r\nMessage-Id: <3b68dede-f1c3-4f04-62dc-f0b2de6e980a@PPPPPP.local>\r\nX-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on\r\n\tdebpub1.cs2cloud.internal\r\nX-Spam-Flag: YES\r\nX-Spam-Level: ******\r\nX-Spam-Status: Yes, score=6.3 required=5.0 tests=BODY_SINGLE_WORD,\r\n\tDKIM_ADSP_NXDOMAIN,DOS_RCVD_IP_TWICE_C,HELO_MISC_IP,\r\n\tNO_FM_NAME_IP_HOSTN autolearn=no autolearn_force=no version=3.4.2\r\nMIME-Version: 1.0\r\nContent-Type: multipart/mixed; boundary=\"----------=_5E10CA56.0200B819\"\r\n\r\n">>
Run Code Online (Sandbox Code Playgroud)
我把我想拿起的物品加粗:
然后我想像这样序列化:[<<"DKIM_ADSP_NXDOMAIN">>,<<"DOS_RCVD_IP_TWICE_C">>,...]
但这并不容易,术语没有常规的“分隔符”,有 \r\n 或 \r\n\t
我以该表达式开头(在二进制字符串上拆分 ','),但结果不完整
split(BinaryString, ",", all),
case lists:member(<<"HELO_MISC_IP">>, Data3 ) …Run Code Online (Sandbox Code Playgroud)