Python教程

python 使用SMTP发送邮件

本文主要是介绍python 使用SMTP发送邮件,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

本文的python发送邮件,使用的是SMTP协议,端口为25.

下面是完整的 代码片段

import smtplib
from email import encoders
from email.header import Header
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.mime.base import MIMEBase
from email.utils import parseaddr, formataddr


class SendEmail():
    _from_addr = None
    _attachments = []

    def __init__(self, smtp_server, port):
        self.smtp = smtplib.SMTP(smtp_server, port)
        self.smtp.set_debuglevel(1)

    def _format_addr(self, s):
        name, addr = parseaddr(s)
        return formataddr((Header(name, 'utf-8').encode(), addr))

    def login(self, user, password):
        self._from_addr = user
        self.smtp.login(user, password)

    def add_file(self, file_name_list):
        """
        添加附件
        :param file_name_list: 附件地址列表
        :return: 
        """
        file = MIMEMultipart()
        for file_name in file_name_list:
            with open(file_name, 'rb') as f:
                attach_file_base = MIMEBase('application', 'octet-stream')
                attach_file_base.set_payload(f.read())
                attach_file_base.add_header('Content-Disposition', 'attachment',
                                            filename=('utf-8', '', file_name.split("\\")[-1]))
                encoders.encode_base64(attach_file_base)
                file.attach(attach_file_base)
        self._attachments.append(file)

    def send_email(self, to_addr, send_word, from_nickname, to_nickname, header, type):
        """
        发送email
        :param to_addr: 接收方邮箱
        :param from_nickname: 发送人昵称
        :param to_nickname: 接收人昵称
        :param send_word: 发送信息
        :param header: 标语
        :param type: 发送的信息格式(plain: text, html:html)
        :return:
        """
        # MIMEMultipart 可以组合发送HTML或者Plain,但是要指定subtype是alternative:
        msg = MIMEMultipart('alternative')
        # 邮件正文是 MIMEText
        contents = MIMEText(send_word, type, _charset='utf-8')
        # 发送人名字
        msg['From'] = self._format_addr('{} <{}>'.format(from_nickname, self._from_addr))
        # 接收人名字
        msg['To'] = self._format_addr('{} <{}>'.format(to_nickname, to_addr))
        # 邮件主题
        msg['Subject'] = Header(header, 'utf-8').encode()
        for data in self._attachments:
        	# 添加到MIMEMultipart
            msg.attach(data)
        msg.attach(contents)
        try:
            self.smtp.sendmail(self._from_addr, to_addr, msg.as_string())
        except Exception as e:
            print(e)
        finally:
            self.smtp.quit()

if __name__ == '__main__':
    new_obj = SendEmail('smtp.qq.com', 25)
    new_obj.login('258428@qq.com', '密码')
    new_obj.add_file(['文件地址'])
    new_obj.send_email(to_addr=['757098@qq.com'], send_word='CSDN', from_nickname="Dozt", to_nickname='Dozt', header="生活愉快", type='html')

密码是你进行smtp权限开通时的密码,不是邮箱登陆密码
在这里插入图片描述

这篇关于python 使用SMTP发送邮件的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!