zoukankan      html  css  js  c++  java
  • 使用python发送邮件

    #coding=utf-8
    import smtplib
    from email.header import Header
    from email.mime.text import MIMEText
    from email.mime.multipart import MIMEMultipart
    from email.mime.image import MIMEImage
    
    
    class Send_Email():
    
        def __init__(self, num):
            self.num = num
            self.smtp = self.produce_smtp()
            self.send_email()
    
        # 创建一个smtp对象并登录
        def produce_smtp(self):
            # 创建对象
            smtp = smtplib.SMTP()
            # 连接服务器
            smtp.connect('smtp.163.com')
            # 登录邮箱
            smtp.login('13349949963@163.com', 'zb')
            return smtp
    
        # 发送邮件
        def send_email(self):
            sender = '13349949963@163.com' #定义发送邮箱地址
            receiver = '376100870@qq.com'  #定义接收邮箱地址
            if self.num == 5:
                receiver = ['983978082@qq.com', '376100870@qq.com']
            msg = self.get_msg(sender, receiver)
            print(receiver)
            self.smtp.sendmail(sender, receiver, msg.as_string())
            print("发送成功")
    
        # 获取发送的信息
        def get_msg(self, sender, receiver):
            subject = '这是邮件主题'
            msg = self.get_msg_content()
            msg['From']=sender #一定要指定'From'属性,否则会报554
            if self.num == 5:
                msg["To"] = ",".join(receiver)
            else:
                # 多个邮件接收人时,如果报错,可以不指定
                msg['To'] = receiver
            msg['Subject'] = Header(subject, 'utf-8')
            return msg
    
        def get_msg_content(self):
            if self.num == 1:
                content = "这是邮件的内容"
                msg = MIMEText(content, 'plain', 'utf-8')  # 第二个参数使用'plain'
                return msg
            elif self.num == 2:
                content = '</pre><h1>这是html格式的邮件内容</h1><pre>'
                # 参数'html'指定邮件内容格式
                msg = MIMEText(content, 'html', 'utf-8')
                return msg
            elif self.num == 3:
                return self.get_pic()
            elif self.num == 4:
                return self.get_attachment()
            elif self.num == 5:
                content = '<html><h1>这是一封群发邮件</h1></html>'
                # 定义邮件三大主题
                return MIMEText(content, 'html', 'utf-8')
    
    
        def get_pic(self):
            # subject = '这是邮件主题'
            # 通过cid将图片文件关联起来
            content = '<b>Some <i>HTML</i> text</b> and an image.<br><img src="cid:image1"><br>good!'
            # 如果存在内嵌资源,至少要定义multipart/related段。本例中html内嵌图片资源,所以使用related
            msgRoot = MIMEMultipart('related')
            # msgRoot['Subject'] = subject
            msgText = MIMEText(content, 'html', 'utf-8')
            msgRoot.attach(msgText)  # 关联邮件内容
            # 获取并读取图片文件
            fp = open('./1.png', 'rb')
            msgImage = MIMEImage(fp.read())
            fp.close()
            msgImage.add_header('Content-ID', 'image1')
            msgRoot.attach(msgImage)  # 关联图片资源
            return msgRoot
    
        def get_attachment(self):
            content = '<html><h1>这是一封带附件的邮件</h1></html>'
            # 定义邮件三大主题
            # 如果一封邮件中含有附件,那邮件的Content-Type域中必须定义multipart/mixed类型
            msgRoot = MIMEMultipart('mixed')
            # 构造邮件正文
            msgText = MIMEText(content, 'html', 'utf-8')
            msgRoot.attach(msgText)
            fp = open('./1.py', 'rb')
            msgAtt = MIMEText(fp.read(), 'base64', 'utf-8')
            msgAtt["Content-Type"] = 'application/octet-stream'
            msgAtt["Content-Disposition"] = 'attachment; filename="1.py"'
            msgRoot.attach(msgAtt)
            return msgRoot
    
    
    
    # 发送邮件
    if __name__=='__main__':
        '''
        1.文件形式的邮件
        2.HTML 形式的邮件
        3.带图片的HTML邮件
        4.带附件的邮件
        5.群发邮件
        6.各种元素都包含的邮件
        '''
        num = int(input("请输入发送邮件的内容:"))
        Send_Email(num)
        # 课后作业:发送一封各种元素都包括的群邮件
  • 相关阅读:
    安徽.NET俱乐部4月份活动图片
    C++ string和数字间的任意转换
    利用C++特性 析构对象(ScopeGuard.h)
    ffmpeg第三方库
    Apifox软件使用技巧
    工作流撤回(activity5)
    pom文件详解
    Java内部类详解成员内部类,局部内部类,匿名内部类,静态内部类
    Docker 详解
    JDK8 新特性 Lambda表达式
  • 原文地址:https://www.cnblogs.com/zhangboblogs/p/10015786.html
Copyright © 2011-2022 走看看