用python发送邮件用的是什么原理

 

基本步骤

  1. 引入python的标准模块,email.message.Message和smtplib。
  2. 创建一个email.message.Message实例。
  3. 添加邮件头必须有的字段,例如’From’,‘To’。
  4. 添加邮件内容。根据内容的不同,调用不同的方法。
    * 最简单的方式,调用message.set_content。
    * 最简单的方式,调用message.set_content。
    * html内容有内嵌资源内容,调用message.add_related。
    * 有附件,调用message.add_attachment。
  5. 创建一个stmplib实例。
  6. 在stmp实例里设置邮箱smtp服务器地址、账号、密码。
  7. 如果smtp服务器不在本机,登录stmp服务器,用stmplib.login。
  8. 发送邮件,调用smtp.send_message。

说明

  • 邮件体及邮件内的内容主要有3中类型。
    * multipart-alternative: 邮件体内的同级内容,根据邮箱系统的环境,只显示最优效果的一个内容。
    * multipart-related: 邮件体内的内容,显示一个主体内容,其他内容以相关的内联方式显示在主体内。一般主体是html内容,其他是要显示在html中的图片、音乐、视频。关联是通过Content-来实现。
    * multipart-mixed: 邮件体内各种内容,包括前面两种,另外还可以处理附件。
  • smtp的方式可以是普通的smtp(用smtp.SMTP),或者SSL方式(用smtp.SMTP_SSL)。
  • smtp.sendmail发送内容只能是文本的内容(编码后的二进制文件也可以);smtp.send_message发送内容可以是未编码的内容,内部处理后,会调用sendmail发送。
  • message.set_content,message.add_alternative,message.add_related,message.add_attachment的内核会调用email.contentmanager.set_content。根据邮件内容的不同,需要的参数也有不同,具体参考官方文档,content manager instance
  • 邮件的编码有两种,1)based64编码 2)QP编码。
  • 邮件体内容可以无限嵌套,邮件体内也可以是另一个邮件,会以附件的eml格式呈现。

示例

import smtplib
from email.message import EmailMessage

msg = EmailMessage()
msg['Subject'] = 'use EmailMessage'
msg['From'] = 'aipython@gmailx.com'
msg['To'] = 'datadriver'

msg.set_content('a email test useing Emailmessage.')

s = smtplib.SMTP('smtp.gmailx.com')
s.set_debuglevel(1)
s.login('aipython', 'Iq349nGkPjWHFpz3')
s.sendmail('datadriver@gmailx.com', msg.as_string())
s.quit()

邮件结构的图示

在这里插入图片描述