• Python——email模块


    一、发邮件的流程

    1、使用电子邮件软件MUA:mail user agent --邮件用户代理,填写完成点击发送
    2、点击发送的时候电子邮件软件发出去,到MTA:mail transfer agent–邮件传输代理,即email服务提供商,如网易等
    3、MTA–邮箱传输代理会把邮箱投递到邮件的最终目的地MDA:mail delivery agent—邮箱投递服务
    4、email到达MDA后就会放在某个服务器上,存在数据库里,收件人必须通过MUA从MDA中把邮箱放到自己电脑上

    流程:发件人 -> MUA -> MTA -> MTA -> 若干个MTA -> MDA<-MUA<-收件人

    二、smtplib的用法

    2.1 使用步骤:

    • 创建SMTP的操作对象并连接smtp目标服务器,例如163、QQ等
    • 根据自己的账号登录目标服务器(自己的邮箱地址和邮箱授权码)
    • 调用对象中的方法,发送邮件到目标地址

    2.2 常用SMTP地址

    • 浪邮箱:smtp.sina.com,搜狐邮箱:smtp.sohu.com,qq邮箱:smtp.qq.com
    • 网易126邮箱的相关服务器信息
    邮件服务器 | 服务器地址 | 端口
    POP3服务器 | pop.126.com | 110
    SMTP服务器 | smtp.126.com | 25
    IMAP服务器 | imap.126.com | 143
    
    • 1
    • 2
    • 3
    • 4

    2.3 MIME模块

    from email.mime.text import MIMEText #构造一个MIMEText,表示文本邮件对象
    #MIMEText对象中有三个需要我们设置的参数,一个是正文内容,一个是正文内容的类型,例如:”text/plain”和”text/html”,一个是正文内容的编码。
    from email.mime.image import MIMEImage #构造一个MIMEImage,表示附件的图片邮件对象
    from email.mime.multipart import MIMEMultipart #构造一个MIMEMultipart,表示整个邮件
    """
    multipart类型主要有三种子类型:mixed、alternative、related
    1、(1) MIMEMultipart类型基本格式
    ● MIMEMultipart(‘mixed’)类型
    如果一封邮件中含有附件,那邮件的中必须定义multipart/mixed类型,邮件通过multipart/mixed类型中定义的boundary标识将附件内容同邮件其它内容分成不同的段。基本格式如下:
    msg=MIMEMultipart(‘mixed’)
    
    ● MIMEMultipart(‘alternative’)类型
    MIME邮件可以传送超文本内容,但出于兼容性的考虑,一般在发送超文本格式内容的同时会同时发送一个
    纯文本内容的副本,如果邮件中同时存在纯文本和超文本内容,则邮件需要在Content-Type域中
    定义multipart/alternative类型,邮件通过其boundary中的分段标识将纯文本、超文本和邮件的
    其它内容分成不同的段。基本格式如下:
    msg=MIMEMultipart(‘alternative’)
    
    ● MIMEMultipart(‘related’)类型
    MIME邮件中除了可以携带各种附件外,还可以将其它内容以内嵌资源的方式存储在邮件中。
    比如我们在发送html格式的邮件内容时,可能使用图像作为 html的背景,html文本会被存储在alternative段中,而作为背景的图像则会存储在multipart/related类型定义的段中。
    基本格式如下:
    msg=MIMEMultipart(‘related’)
    """
    
    """
    构造文本内容,同时支持plain、html格式
    msg = MIMEMultipart('alternative')
    msg.attach(MIMEText('hello', 'plain', 'utf-8'))
    msg.attach(MIMEText('

    Hello

    ', 'html', 'utf-8')) """
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32

    三、实操

    '''
    File Name:sendEmail-test.py
    Creat File Time:2022/8/20 15:18
    File Create By Author:@Wheat
    '''
    import smtplib
    from email.mime.image import MIMEImage
    from email.mime.multipart import MIMEMultipart
    from email.mime.text import MIMEText
    from email.mime.application import MIMEApplication #发送附件
    #配置邮箱及密码
    form_mail = ''#发送人邮箱
    form_mail_password = ''#需要从邮箱的设置-账号-开启POP3-SMPT服务来获取授权码
    to_email = ''#接收人邮箱
    
    #设置总的邮件对象,对象的类型为mixed
    msg = MIMEMultipart('mixed')
    
    #邮件的发送人及收件人信息
    msg['From'] = form_mail
    msg['to'] = to_email
    
    #邮件的主题
    msg['Subject'] = 'Test use Pyhton to send email '
    
    #构造文本内容
    text_info = 'hello world ,nice world'
    text_sub = MIMEText(text_info,'plain','utf-8') #可分为plain(纯文本)格式和html格式
    msg.attach(text_sub)
    
    #构造超文本
    url = "https://demom.liangyihui.net/"
    html_info = """

    点击我~~打开新世界

    """
    % url html_sub = MIMEText(html_info,'html',"utf-8") #需加如下代码才可使thml_info文本的内容正常显示,会把超文本的内容当做文本显示 html_sub["Content_Disposition"] = 'attachment; filename="doctor.html"' #把构造的内容写入邮件体 msg.attach(html_sub) #构造图片 image_file = open(r'E:\Auto Program\Doctor_autotest\image.png','rb').read() image = MIMEImage(image_file) image.add_header('Content-ID','') #如不加以下代码,会导致接收方方面显示乱码的bin文件,下载后也不可打开,这个地方可以对文件重命名 image["Content_Disposition"] = 'attachment; filename="image.png"' msg.attach(image) #构造附件 attachment_file = open(r'E:\Auto Program\Doctor_autotest\testExample.xmind','rb').read() attachment = MIMEApplication(attachment_file) attachment.add_header('Content-Disposition', 'attachment') attachment["Content-Disposition"]='attachment; filename="testExample.xmind"' msg.attach(attachment) try: sever = smtplib.SMTP('smtp.qq.com') sever.docmd('wheat',form_mail) sever.starttls() sever.login(form_mail,form_mail_password) sever.sendmail(form_mail,to_email,msg.as_string()) sever.quit() print("耶~~~发送成功") except Exception as e: print("未发送成功") print(e)
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
  • 相关阅读:
    阿里Java面试题剖析:如何保证缓存与数据库的双写一致性?
    分布式文件存储系统Minio实战
    电脑键盘功能基础知识汇总
    vncserver 安装、自启动、安全
    [博弈]Swap Game Codeforces1747C
    企业如何有效制定企业信息化发展规划?(附信息化模板)
    emq Neuron工业协议采集使用
    【数据库迁移系列】从Oracle迁移到openGauss实战分享
    05_用一个栈实现另一个栈的排序
    多线程【thread】创建【1】
  • 原文地址:https://blog.csdn.net/TDLDDMZ/article/details/126367303