1 # -*- coding: utf-8 -*-
  2 # @Author  : 107
  3 # @File    : emaildriver.py
  4 # @explain : 发邮件
  5 import json
  6 import re
  7 import smtplib
  8 import email
  9 import time
 10 from email.mime.text import MIMEText
 11 from email.utils import formataddr
 12 from email.mime.multipart import MIMEMultipart
 13 import imaplib
 14 
 15 import os
 16 
 17 
 18 class SendEmail:
 19     def __init__(self, sender, sender_name, sender_token, attn, attn_name, subject, connect, files, server):
 20         """
 21         :param sender: 发件人邮箱账号
 22         :param sender_name: 发件人邮箱昵称
 23         :param sender_token: 发件人邮箱密码(当时申请smtp给的口令)
 24         :param attn: 收件人邮箱账号
 25         :param attn_name: 收件人邮箱昵称
 26         :param subject: 主题
 27         :param connect: 内容
 28         :param files: 附件,格式:{'path': '路径', 'read': 'r', 'encoding': 'utf-8', '_charset': 'utf-8', 'name': '文件名'}
 29         :param server: 邮件服务器地址
 30         """
 31         self.sender = sender
 32         self.sender_name = sender_name
 33         self.sender_token = sender_token
 34         self.attn = attn
 35         self.attn_name = attn_name
 36         self.subject = subject
 37         self.connect = connect
 38         self.files = files
 39         self.server = server
 40 
 41     def accessory(self, file):
 42         """
 43         处理单个附件
 44         :param file:
 45         :return:
 46         """
 47         path = file.get('path')
 48         rea = file.get('read')
 49         e = file.get('encoding')
 50         _charset = file.get('_charset')
 51         name = file.get('name')
 52         if not name:
 53             name = os.path.split(path)[-1]
 54         if e:
 55             with open(path, rea, encoding=e) as r:
 56                 connect = r.read()
 57         else:
 58             with open(path, rea) as r:
 59                 connect = r.read()
 60         acc = MIMEText(connect, _charset=_charset)
 61         acc["Content-Type"] = 'application/octet-stream'
 62         # 不能兼容outlook
 63         # acc1["Content-Disposition"] = f'attachment; filename="{name}"'
 64         # 可以兼容outlook
 65         acc.add_header("Content-Disposition", "attachment", filename=("gb18030", "", name))
 66         return acc
 67 
 68     def send_email(self):
 69         # connect = "这是我使用python smtplib及email模块发送的邮件"  # 正文
 70         msg = MIMEMultipart()
 71         # 括号里的对应发件人邮箱昵称、发件人邮箱账号
 72         msg['From'] = formataddr([self.sender_name, self.sender])
 73         # 括号里的对应收件人邮箱昵称、收件人邮箱账号
 74         msg['To'] = formataddr([self.attn_name, self.attn])
 75         # 邮件的主题,也可以说是标题
 76         msg['Subject'] = self.subject
 77 
 78         # 正文
 79         msg.attach(MIMEText(self.connect, _charset='utf-8'))
 80         # 附件
 81         for file in self.files:
 82             acc = self.accessory(file)
 83             msg.attach(acc)
 84 
 85         # 发件人邮箱中的SMTP服务器,端口是465
 86         # server = smtplib.SMTP_SSL("smtp.qq.com", 465)
 87         server = smtplib.SMTP_SSL(self.server, 465)
 88 
 89         # 括号中对应的是发件人邮箱账号、邮箱密码
 90         server.login(self.sender, self.sender_token)
 91         # 括号中对应的是发件人邮箱账号、收件人邮箱账号、发送邮件
 92         server.sendmail(self.sender, [self.attn, ], msg.as_string())
 93 
 94         server.quit()  # 关闭连接
 95 
 96     def run(self):
 97         # self.send_email()
 98         try:
 99             self.send_email()
100             return True
101         except Exception as e:
102             print(e.args)

 

原文地址:http://www.cnblogs.com/hudieren/p/16792041.html

1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长! 2. 分享目的仅供大家学习和交流,请务用于商业用途! 3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入! 4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解! 5. 如有链接无法下载、失效或广告,请联系管理员处理! 6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需! 7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员! 8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载 声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性