Python3:发邮件

  • 利用python的组件进行发邮件
    1.构建邮件服务器设置、连接服务器、登录服务器
    2.构建邮件内容
    3.发送邮件,收件人收件
    步骤1、2通过smtplib实现,步骤3通过email实现
代码片段:构建邮件服务、发邮件
  # 构建smtp对象
   smtp = smtplib.SMTP()

    # 连接到smtp服务
    smtp.connect(self.smtp_server, self.stmp_port)

    # 登录smtp服务
    smtp.login(self.sender, self.password)

    # 发送邮件
    print('收件人为:', self.reveiver)
    res = smtp.sendmail(self.sender, self.reveiver, msg.as_string())
    print("邮件发送结果: ", res)

    # 退出
    smtp.quit()
    print("send email finish")
  • 构建邮件内容
    邮件内容的构建大致为文本内容、html格式、附件、图片四种需求
    使用到的包文件为:
    from email.mime.text import MIMEText
    from email.mime.image import MIMEImage
    from email.mime.multipart import MIMEMultipart
代码片段:
 def __content_of_email(self, msg_type):
        """
        邮件正文为文本内容
        :param content:
        :return:
        """
        msg = MIMEMultipart()
        msg["From"] = self.sender
        msg["To"] = ";".join(self.reveiver)
        msg['Subject'] = Header(self.subject, "utf-8")

        # 如果msg为plain,则邮件正文为文本
        if msg_type == 'plain':
            msg.attach(MIMEText(self.content, "plain", "utf-8"))
        # 如果msg为html,则邮件正文为html
        elif msg_type == "html":
            msg.attach(MIMEText(self.content, "html", "utf-8"))
        else:
            print("邮件内容类型不正确")

        if self.attachment is not None:

            # 读取附件内容
            with open(attachment, 'r')as f:
                contents = f.read()
            # 设置html格式参数
            html_content = MIMEText(contents, 'base64', 'utf-8')
            html_content["Content-Type"] = 'application/octet-stream'
            html_content.add_header("Content-Disposition", "attachment", filename=os.path.basename(attachment))
            msg.attach(html_content)

        return msg
  • sendEmail.py全部代码
# __author__ ='wuwa'
# -*- coding: utf-8 -*-

"""
email:构造邮件
1.发送邮件的账号、密码
2.连接邮件服务
3.设置邮件标题、内容
smtplib:发送邮件
4.发送邮件
"""
import os
import smtplib
from email.header import Header
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText


class WriteEmails:
    def __init__(self, smtp_server, stmp_port, sender, password, reveiver, subject, content, msg_type, attachment):
        self.smtp_server = smtp_server
        self.stmp_port = stmp_port
        self.sender = sender
        self.password = password
        self.reveiver = reveiver
        self.subject = subject
        self.content = content
        self.msg_type = msg_type
        self.attachment = attachment

    def __content_of_email(self, msg_type):
        """
        邮件正文为文本内容
        :param content:
        :return:
        """
        msg = MIMEMultipart()
        msg["From"] = self.sender
        msg["To"] = ";".join(self.reveiver)
        msg['Subject'] = Header(self.subject, "utf-8")

        # 如果msg为plain,则邮件正文为文本
        if msg_type == 'plain':
            msg.attach(MIMEText(self.content, "plain", "utf-8"))
        # 如果msg为html,则邮件正文为html
        elif msg_type == "html":
            msg.attach(MIMEText(self.content, "html", "utf-8"))
        else:
            print("邮件内容类型不正确")

        if self.attachment is not None:

            # 读取附件内容
            with open(attachment, 'r')as f:
                contents = f.read()
            # 设置html格式参数
            html_content = MIMEText(contents, 'base64', 'utf-8')
            html_content["Content-Type"] = 'application/octet-stream'
            html_content.add_header("Content-Disposition", "attachment", filename=os.path.basename(attachment))
            msg.attach(html_content)

        return msg

    def senf_send_email(self):
        """
        发邮件
        :return: 
        """
        msg = self.__content_of_email(self.msg_type)

        try:
            # 构建smtp对象
            smtp = smtplib.SMTP()

            # 连接到smtp服务
            smtp.connect(self.smtp_server, self.stmp_port)

            # 登录smtp服务
            smtp.login(self.sender, self.password)

            # 发送邮件
            print('收件人为:', self.reveiver)
            res = smtp.sendmail(self.sender, self.reveiver, msg.as_string())
            print("邮件发送结果: ", res)

            # 退出
            smtp.quit()
            print("send email finish")

        except smtplib.SMTPException as e:
            print('error', e)


if __name__ == "__main__":

    # 邮箱服务地址
    smtp_server = 'xx.xx.com'
    # 邮箱服务的端口
    stmp_port = xx

    # 邮件发送者
    sender = "xxxx@qq.com"
    # 邮件发送者密码
    password = "password"

    # 邮件接收者
    receiver = ["xxx@qq@qq.com", "xxx@qq.com"]
    content = "邮件正文"
    subject = "邮件标题"

    # 邮件正文类型
    msg_type = "html"
    BASE_DIR = os.path.abspath(os.path.dirname(os.getcwd()))
    # 获取ini文件的路径
    attachment = os.path.join(BASE_DIR, "report\\report.html")

    # 实例化
    m = WriteEmails(smtp_server, stmp_port, sender, password, receiver, subject, content, msg_type, attachment)
    # 调用类方法
    m.senf_send_email()

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Python 面向对象Python从设计之初就已经是一门面向对象的语言,正因为如此,在Python中创建一个类和对...
    顺毛阅读 4,236评论 4 16
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,837评论 18 139
  • Django 官方文档 发送email 官网地址:[https://docs.djangoproject.com/...
    学以致用123阅读 2,309评论 0 2
  • 一、邮件开发涉及到的一些基本概念 邮件服务器和电子邮箱 邮件传输协议 电子邮件的发送和接收过程 1.1邮件服务器和...
    yjaal阅读 1,503评论 0 7
  • 本想去理发,(呃,好像现在流行把女人理发说成“美发”,我总觉得不太适应用“美发”这新词儿,毕竟,发再怎么美,也敌不...
    春风絮语阅读 178评论 0 0