【发布时间】:2017-07-18 19:42:54
【问题描述】:
我需要在从 IMAP 获取电子邮件消息后立即将其存储在数据库中以供以后处理。我使用FETCH 请求提取消息,并使用BODY.PEEK[] 返回数据。
据我了解,所有 IMAP 邮件都以US-ASCII 的形式返回(邮件服务器只接受那个),但我可能是错的。
我的选择(按照我认为正确的顺序)是:
- US-ASCII 文本列
- 字节亚
- BLOB
我正在考虑使用 US-ASCII,但我担心编码有问题,我不知道是否有“故障”IMAP 服务器没有返回 us-ascii 邮件。 另一种选择是 Bytea,但我读到您必须处理编码,所以我不确定与 US-ASCII 相比有什么优势/劣势。 BLOB 是原始的,我不确定它在这种情况下会带来什么问题。我假设我必须处理字节到字符串的转换。
推荐的数据类型是什么?
【问题讨论】:
-
你使用什么库/语言?
-
可以使用 UTF-8 编码的文本吗?
-
经典电子邮件假定为 US_AScii,但实际上并非如此,并且可以包含高字节字符。解释取决于标题,因此文本类型不合适。
-
我使用 Ruby 作为语言并使用
net/imap和uid_fetch下载消息。我使用FetchData#attr["BODY[]"]获取整个消息,到目前为止,该字符串始终编码为us-ascii。我不需要对该文本执行任何操作,稍后将其取回、解析并创建它的“可用”版本 -
@Fire-Dragon-DoL 是的。符合标准的电子邮件是(曾经)7 位 US-ASCII。大量电子邮件不完全符合标准。 8 位的东西潜入其中。它们应该存储为非文本数据。此外,8 位电子邮件已经出现多年(请参阅 SMTPUTF8 和 IMAP UTF8 扩展)。此外,很少有邮件服务器会直接拒绝包含 8 位内容的邮件,即使未声明也是如此。
标签: postgresql email imap