• Python3学习笔记29-发送邮件


    email模块用来构造邮件,smtplib模块用来发送邮件。

    以QQ邮箱为例

    想要在代码中使用QQ邮箱发送邮件,需要先在QQ邮箱-设置-账户中,开启SMTP服务,然后生成授权码。在进行验证账号时,用生成的授权码替换密码

    发送纯文字的邮件,需要使用

    #!/usr/bin/python3
    
    import smtplib
    from email.mime.text import MIMEText
    from email.header import Header
    
    sender = '2474xxxx8@qq.com'  # 发件人邮箱
    password = 'ryhnx****fybifj'  # 发件人邮箱密码
    addressed_eamil = '247xxxx48@qq.com'  # 收件人邮箱
    
    def mail():
        try:
            msg = MIMEText('Python3邮件发送测试...','plain','utf-8')
            msg['From'] = Header('发件人','utf-8')
            msg['To'] = Header('收件人','utf-8')
            msg['Subject'] = Header('测试发送邮件','utf-8')
    
            server = smtplib.SMTP_SSL("smtp.qq.com", 465)  # 发件人邮箱中的SMTP服务器,一般端口是25
            server.login(sender, password)  # 括号中对应的是发件人邮箱账号、邮箱密码
            server.sendmail(sender, addressed_eamil, msg.as_string())  # 括号中对应的是发件人邮箱账号、收件人邮箱账号、发送邮件
            server.quit()  # 关闭连接
        except Exception:
            print("邮件发送失败")
    
    mail()
    #!/usr/bin/python3
    
    import smtplib
    from email.mime.text import MIMEText
    from email.header import Header
    
    sender = '2474xxxx8@qq.com'  # 发件人邮箱
    password = 'ryhnx***fybifj'  # 发件人邮箱密码
    addressed_eamil = '247xxxx48@qq.com'  # 收件人邮箱
    
    def mail():
        try:
            msg = MIMEText('Python3邮件发送测试...','plain','utf-8')
            msg['From'] = Header('发件人','utf-8')
            msg['To'] = Header('收件人','utf-8')
            msg['Subject'] = Header('测试发送邮件','utf-8')
    
            server = smtplib.SMTP_SSL("smtp.qq.com", 465)  # 发件人邮箱中的SMTP服务器,一般端口是25
            server.login(sender, password)  # 括号中对应的是发件人邮箱账号、邮箱密码
            server.sendmail(sender, addressed_eamil, msg.as_string())  # 括号中对应的是发件人邮箱账号、收件人邮箱账号、发送邮件
            server.quit()  # 关闭连接
        except Exception:
            print("邮件发送失败")
    
    mail()

    上面一部分,是email模块用来构造邮件的,MiMEText()是邮件的正文:其中第一个是正文内容,第二个是文本格式,第三个是编码,From是用来设置发件人,To是用来设置收件人,Subject用来设置邮件主题。Header()只显示自己设置的字段,但是相应的邮件没有显示出来,可以换成formataddr()方法,看下面带附件的实例

    下面一部分,是stmplib模块用来发送邮件的,第一行就用来设置需要使用的smtp服务地址和端口,第二行是来验证账户。第三行是发送邮件。如果邮件要发给多个人,addressed_email这个字段传入一个邮箱数组就可以了。

    发送带附件的邮件

    #!/usr/bin/python3
    
    import smtplib
    from email.mime.text import MIMEText
    from email.utils import formataddr
    from email.mime.multipart import MIMEMultipart
    
    sender = '247412248@qq.com'  # 发件人邮箱
    password = 'ryhn***ybifj'  # 发件人邮箱密码
    addressed_eamil = '247412248@qq.com'  # 收件人邮箱
    
    def mail():
        try:
            # 创建一个带附件的实例
            message = MIMEMultipart()
            message['From'] = formataddr(['发件人姓名', sender])  # 括号里的对应发件人邮箱昵称、发件人邮箱账号
            message['To'] = formataddr(['收件人姓名', addressed_eamil])  # 括号里的对应收件人邮箱昵称、收件人邮箱账号
            message['Subject'] = "测试发送邮件"  # 邮件的主题,也可以说是标题
    
            # 邮件正文内容
            message.attach(MIMEText('Python3邮件发送测试。。。', 'plain', 'utf-8'))
    
            # 构造附件1
            att1 = MIMEText(open('D:/PycharmProjects/Vuiki/Common/测试.txt', 'rb').read(), 'base64', 'utf-8')
    
            att1["Content-Type"] = 'application/octet-stream'
            # filename是附件名,附件名称为中文时的写法
            att1.add_header("Content-Disposition", "attachment", filename=("gbk", "", "测试.txt"))
            message.attach(att1)
    
            # 构造附件2
            att2 = MIMEText(open('D:/PycharmProjects/Vuiki/Common/test.txt', 'rb').read(), 'base64', 'utf-8')
            att2["Content-Type"] = 'application/octet-stream'
            #附件名称非中文时的写法
            att2["Content-Disposition"] = 'attachment; filename="test.txt")'
            message.attach(att2)
    
            server = smtplib.SMTP_SSL("smtp.qq.com", 465)  # 发件人邮箱中的SMTP服务器,一般端口是25
            server.login(sender, password)  # 括号中对应的是发件人邮箱账号、邮箱密码
            server.sendmail(sender, addressed_eamil, message.as_string())  # 括号中对应的是发件人邮箱账号、收件人邮箱账号、发送邮件
            server.quit()  # 关闭连接
        except Exception:
            print("邮件发送失败")
    
    mail()

    当收件人需要显示多个的时候可以使用 ','.join(邮箱数组)

  • 相关阅读:
    [程序员必备工具]分享一款不错的个人代码个人知识管理软件wiz
    移动开发,如何选择手机软件开发​平台?
    Best Wishes,my Married Friend!
    三年来最开心的一天!
    “世事无绝对”也是相对的……
    又到世界CUP……
    利物浦,总是在我情绪低落时给我鼓舞!
    一种感觉
    How to break to loop? It frustrates me!
    取舍有度,学会放弃……
  • 原文地址:https://www.cnblogs.com/myal/p/9337370.html
Copyright © 2020-2023  润新知