IT评测·应用市场-qidao123.com

标题: 发邮件 [打印本页]

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

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!




欢迎光临 IT评测·应用市场-qidao123.com (https://dis.qidao123.com/) Powered by Discuz! X3.4