zoukankan      html  css  js  c++  java
  • python---网络之邮件发送

    在发送邮件之前需要先设置邮件开启了SMTP等功能,对于163还需要获取授权码

    这里设置保存修改

    这里获取授权码

    完整封装发送邮件类

    import smtplib
    from email.mime.text import MIMEText
    from email.header import Header
    from email.utils import parseaddr,formataddr
    
    class SendEmail:
        #设置基本信息,包括发件人,发件人密码,收件人邮箱,以及发件箱服务器地址
        #发送方
        Send_Email = "18xxxxxx@sina.cn"
        #发送方密码
        Send_Pwd = "xxxxxx"#对于163这里就不是密码,而是授权码
        #接收方
        Recv_Email = "xxxx@163.com"
    
        #设置发件方服务器地址
        SMTP_Server = 'smtp.sina.cn'
        #设置发件方服务器端口
        SMTP_Ser_Port=25
    
        def __int__(self):
            pass
    
        @classmethod
        def _format_address(cls,text):
            #按照空格解析 发件人发送新浪信 <xxxx@sina.cn>
            name, address = parseaddr(text)
            return formataddr((Header(name, "utf-8").encode(), address))
            #注意formataddr是元组
    
        @classmethod
        def send_email_text(cls):
            # 第一个参数:邮件正文
            # 第二个参数:邮件类型 纯文本
            # 第三个参数:编码
            msg = MIMEText("测试smtp邮件发送功能", "plain", "utf-8")
    
            #这里注意了,大多数错误出在这里,当直接使用Header('xxx','utf-8')时会出错,需要进行解析,重组
            #=?utf-8?b?5p2l6IeqMTYz55qE5LiA5bCB6YKu5Lu2?= <xxxx@163.com>
            msg["From"] = SendEmail._format_address("发件人发送新浪信 <%s>" % SendEmail.Send_Email)#预留空格,在昵称和地址间
            msg["To"] = SendEmail._format_address("收件人由163接收 <%s>"%SendEmail.Recv_Email)
            msg["Subject"] = Header("测试邮箱功能", "utf-8").encode()#主题
    
            try:
                server = smtplib.SMTP(SendEmail.SMTP_Server, SendEmail.SMTP_Ser_Port)
    
                server.login(SendEmail.Send_Email, SendEmail.Send_Pwd)
                # 登录smtp服务器
                server.sendmail(SendEmail.Send_Email, [SendEmail.Recv_Email], msg.as_string())
                # 发送邮件
                server.quit()
                print("邮件发送成功")
            except Exception as e:
                print(e)
                print("邮件发送失败")
    
    
    if __name__ =="__main__":
        SendEmail.send_email_text()
  • 相关阅读:
    Java职业生涯规划
    Java类加载器总结
    Java字节流与字符流的区别
    Java堆和栈的区别
    详解Java类的生命周期
    Java编程常见问题汇总
    Java总结输入流输出流
    Java NIO:浅析I/O模型
    perl 处理文件路径的一些模块
    Delphi第三方控件安装卸载指南
  • 原文地址:https://www.cnblogs.com/ssyfj/p/8586447.html
Copyright © 2011-2022 走看看