email --- 电å�邮件与 MIME 处ç�†åŒ…¶
æº�代ç �: Lib/email/__init__.py
email 包是一个用于管ç�†ç”µå�邮件消æ�¯çš„库。 它 å¹¶é�ž 被设计为执行å�‘ SMTP (RFC 2821), NNTP 或其他æœ�务器å�‘é€�电å�邮件消æ�¯çš„æ“�作;这些是 smtplib å’Œ nntplib ç‰æ¨¡å�—的功能。 email 包试图尽å�¯èƒ½åœ°é�µå¾ª RFC,支æŒ� RFC 5322 å’Œ RFC 6532,以å�Šä¸Ž MIME 相关的å�„个 RFC 例如 RFC 2045, RFC 2046, RFC 2047, RFC 2183 å’Œ RFC 2231。
email 包的总体结构�以分为三个主�组件,�外还有第四个组件用于控制其他组件的行为。
这个包的ä¸å¿ƒç»„件是代表电å�邮件消æ�¯çš„“对象模型â€�。 应用程åº�主è¦�通过在 message å�模å�—ä¸å®šä¹‰çš„对象模型接å�£ä¸Žè¿™ä¸ªåŒ…进行交互。 应用程åº�å�¯ä»¥ä½¿ç”¨æ¤ API æ�¥è¯¢é—®æœ‰å…³çŽ°æœ‰ç”µå�邮件的问题ã€�æž„é€ æ–°çš„ç”µå�é‚®ä»¶ï¼Œæˆ–è€…æ·»åŠ æˆ–ç§»é™¤è‡ªèº«ä¹Ÿä½¿ç”¨ç›¸å�Œå¯¹è±¡æ¨¡åž‹æŽ¥å�£çš„电å�邮件å�组件。 也就是说,é�µå¾ªç”µå�邮件消æ�¯å�Šå…¶ MIME å�组件的性质,电å�邮件对象模型是所有æ��ä¾› EmailMessage API 的对象所构æˆ�çš„æ ‘çŠ¶ç»“æž„ã€‚
这个包的å�¦å¤–两个主è¦�组件是 parser å’Œ generator。 parser 接å�—电å�邮件消æ�¯çš„åº�列化版本(å—节æµ�)并将其转æ�¢ä¸º EmailMessage å¯¹è±¡æ ‘ã€‚ generator 接å�— EmailMessage 并将其转回åº�列化的å—节æµ�。 (parser å’Œ generator 还能处ç�†æ–‡æœ¬å—符æµ�,但ä¸�建议这ç§�ç”¨æ³•ï¼Œå› ä¸ºè¿™å¾ˆå®¹æ˜“å¯¼è‡´æŸ�ç§�å½¢å¼�çš„æ— æ•ˆæ¶ˆæ�¯ã€‚
控制组件是 policy 模å�—。 æ¯�一个 EmailMessageã€�æ¯�一个 generator å’Œæ¯�一个 parser 都有一个相关è�”çš„ policy 对象æ�¥æŽ§åˆ¶å…¶è¡Œä¸ºã€‚ 通常应用程åº�å�ªæœ‰åœ¨ EmailMessage 被创建时æ‰�需è¦�指明控制ç–略,或者通过直接实例代 EmailMessage æ�¥æ–°å»ºç”µå�邮件,或者通过使用 parser æ�¥è§£æž�输入æµ�。 但是ç–略也å�¯ä»¥åœ¨ä½¿ç”¨ generator åº�列化消æ�¯æ—¶è¢«æ›´æ”¹ã€‚ 例如,这å…�许从ç£�盘解æž�通用电å�邮件消æ�¯ï¼Œè€Œåœ¨å°†æ¶ˆæ�¯å�‘é€�到电å�邮件æœ�åŠ¡å™¨æ—¶ä½¿ç”¨æ ‡å‡† SMTP 设置对其进行åº�列化。
email 包会尽é‡�地对应用程åº�éš�è—�å�„ç§�控制类 RFC 的细节。 从概念上讲应用程åº�应当能够将电å�邮件消æ�¯è§†ä¸º Unicode æ–‡æœ¬å’ŒäºŒè¿›åˆ¶é™„ä»¶çš„ç»“æž„åŒ–æ ‘ï¼Œè€Œä¸�必担心在åº�列化时è¦�如何表示它们。 但在实际ä¸ï¼Œç»�常有必è¦�至少了解一部分控制类 MIME 消æ�¯å�Šå…¶ç»“构的规划,特别是 MIME "内容类型" çš„å��称和性质以å�Šå®ƒä»¬æ˜¯å¦‚ä½•æ ‡è¯†å¤šéƒ¨åˆ†æ–‡æ¡£çš„ã€‚ 在大多数情况下这些知识应当仅对于更å¤�æ�‚的应用程åº�æ�¥è¯´æ‰�是必需的,并且å�³ä¾¿åœ¨é‚£æ—¶å®ƒä¹Ÿåº”当仅是特定的高层级结构,而ä¸�是如何表示这些结构的细节信æ�¯ã€‚ 由于 MIME å†…å®¹ç±»åž‹è¢«å¹¿æ³›åº”ç”¨äºŽçŽ°ä»£å› ç‰¹ç½‘è½¯ä»¶ï¼ˆè€Œé�žå�ªæ˜¯ç”µå�é‚®ä»¶ï¼‰ï¼Œå› æ¤è¿™å¯¹è®¸å¤šç¨‹åº�员æ�¥è¯´å°†æ˜¯å¾ˆç†Ÿæ‚‰çš„æ¦‚念。
以下�节�述了 email 包的具体功能。 我们会从 message 对象模型开始,它是应用程�将�使用的主�接�,之�是 parser 和 generator 组件。 然�我们会介� policy 控制组件,它将完�对这个库的主�组件的处�。
接下æ�¥çš„三个å°�节会介ç»�这个包å�¯èƒ½å¼•å�‘的异常以å�Š parser å�¯èƒ½æ£€æµ‹åˆ°çš„缺陷(å�³ä¸Ž RFC ä¸�相符)。 ç„¶å�Žæˆ‘们会介ç»� headerregistry å’Œ contentmanager å�组件,它们分别æ��供了用于更精细地æ“�çºµæ ‡é¢˜å’Œè½½è�·çš„工具。 这两个组件除了包å�«ä½¿ç”¨ä¸Žç”Ÿæˆ�é�žç®€å�•消æ�¯çš„相关特性,还记录了它们的å�¯æ‰©å±•性 API,这将是高级应用程åº�所感兴趣的内容。
在æ¤ä¹‹å�Žæ˜¯ä¸€ç»„使用之å‰�å°�节所介ç»�çš„ API 的基本部分的示例。
å‰�é�¢çš„内容是 email 包的现代(对 Unicode 支æŒ�良好)API。 从 Message 类开始的其余å°�节则介ç»�了旧å¼� compat32 API,它会更直接地处ç�†å¦‚何表示电å�邮件消æ�¯çš„细节。 compat32 API ä¸�会 å�‘应用程åº�éš�è—� RFC 的相关细节,但对于需è¦�进行æ¤ç§�层级æ“�作的应用程åº�æ�¥è¯´å°†æ˜¯å¾ˆæœ‰ç”¨çš„工具。 æ¤æ–‡æ¡£å¯¹äºŽå› å�‘下兼容ç�†ç”±è€Œä»�然使用 compat32 API 的应用程åº�也是很适å�ˆçš„。
在 3.6 版本�生�更: 文档�过�新组织和撰写以鼓励使用新的 EmailMessage/EmailPolicy API。
email 包文档的内容:
旧� API:
��
smtplib模å�—SMTP (简å�•é‚®ä»¶ä¼ è¾“å��è®®) 客户端
poplib模�POP (邮局�议) 客户端
imaplib模�IMAP (互�网消�访问�议) 客户端
nntplib模å�—NNTP (ç½‘ç»œæ–°é—»ä¼ è¾“å��è®®) 客户端
mailbox模å�—创建ã€�读å�–和管ç�†ä½¿ç”¨ä¿�å˜åœ¨ç£�盘ä¸çš„多ç§�æ ‡å‡†æ ¼å¼�的消æ�¯é›†çš„工具。