背景

从不同渠道收到的文档,要发统一邮箱归档。

需求:

1、必须一个文档单独发一封邮件,不接受合并。
2、没有自己的邮件服务器。

问题:

发现用QQ邮箱smtp发送文档时,短时间发送10封以上,会被限流。
限流后10分钟左右可再发。

解决方式:

每发一封,sleep 5s,再发,则不会触发限流

脚本代码

发送脚本
发送成功后,为了便于管理,会删除已经发送的文件

from email.mime.multipart import MIMEMultipart
from src.MailAssembler import MailAssembler
from src.MailSender import MailSender
import os
import timefrom_name = "xx"
from_mail = "xx@qq.com"
to_mail = ["xx@qq.com"]
cc_mail = []
rootdir = "/mnt/e/Desktop/xx/"def getFileName(path):list = path.split("/")filename = list[len(list) - 1]return filenamelist = os.listdir(rootdir)smtpserver = "smtp.qq.com"
smtpport = 465
password = "xxx"     # 授权码,需要自己在设置里开通并短信获取list = os.listdir(rootdir)
for i in range(0,len(list)):path = os.path.join(rootdir,list[i])if os.path.isfile(path):filename=getFileName(path) subject = filenamemsg = MIMEMultipart()assembler = MailAssembler()sender = MailSender(smtpserver,smtpport,password,from_mail,to_mail,cc_mail)assembler.attachAttributes(msg,subject,from_name,from_mail,to_mail,cc_mail)assembler.attachAttachment(msg,path)if sender.sendMail(msg,filename) is True :try: os.remove(path) time.sleep(5)except Exception as e:print ("发送成功删除失败",filename)  

辅助函数:
MailAssembler.py

from email.header import Header
from email.mime.base import MIMEBase
from email.mime.text import MIMEText
from email.mime.image import MIMEImage
from email import encoders
from email.header import  make_headerclass MailAssembler:def attachAttributes(self,msg,subject,from_name,from_mail,to_mail,cc_mail=None):msg["Subject"] = Header(subject, "utf-8")msg["From"] = Header(from_name + " <" + from_mail + ">", "utf-8")msg["To"] = Header(",".join(to_mail), "utf-8")msg["Cc"] = Header(",".join(cc_mail), "utf-8")def attachBody(self,msg,body,type,imgfile=None):msgtext = MIMEText(body, type, "utf-8")msg.attach(msgtext)if imgfile != None:try:file = open(imgfile, "rb")img = MIMEImage(file.read())img.add_header("Content-ID", "<image1>")msg.attach(img)except(Exception) as err:print(str(err))finally:if file in locals():file.close()def attachAttachment(self,msg,attfile):att = MIMEBase("application", "octet-stream")try:file = open(attfile, "rb")att.set_payload(file.read())encoders.encode_base64(att)except(Exception) as err:print(str(err))finally:if file in locals():file.close()if "\\" in attfile:list = attfile.split("\\")filename = list[len(list) - 1]if "/" in attfile:list = attfile.split("/")filename = list[len(list) - 1]else:filename = attfileatt.add_header("Content-Disposition", "attachment; filename=\"%s\"" % make_header([(filename, 'UTF-8')]).encode('UTF-8'))msg.attach(att)

MailSender.py

import smtplib
class MailSender:def __init__(self,smtpserver,smtpport,password,from_mail,to_mail,cc_mail=None):self.smtpserver = smtpserverself.smtpport = smtpportself.password = passwordself.from_mail = from_mailself.to_mail = to_mailself.cc_mail = cc_maildef sendMail(self,msg,name):try:smtp = smtplib.SMTP_SSL(self.smtpserver, self.smtpport)smtp.login(self.from_mail, self.password)if self.cc_mail == None:smtp.sendmail(self.from_mail, self.to_mail, msg.as_string())else:smtp.sendmail(self.from_mail, self.to_mail+self.cc_mail, msg.as_string())print("successful %s" % name)return Trueexcept(smtplib.SMTPRecipientsRefused):print("Recipient refused %s" % name)return Falseexcept(smtplib.SMTPAuthenticationError):print("Auth error %s" % name)return Falseexcept(smtplib.SMTPSenderRefused):print("Sender refused %s name")return Falseexcept(smtplib.SMTPException) as e:print(name,e.message)return Falsefinally:smtp.quit()

QQ邮箱SMTP限流相关推荐

  1. qq邮箱怎么引流,带你玩转QQ邮箱引流,QQ邮箱引流技巧

    做网络营销的人员应该都会有在大平台引流的经验,熟知的有百度贴吧.抖音.今日头条.喜马拉雅FM等等,QQ也是营销人员必备的社交软件,QQ邮箱也是邮件营销者用的,那么我们要如何利用QQ邮箱大批量引流呢? ...

  2. 【计算机网络】telnet QQ邮箱smtp发送邮件

    telnet QQ邮箱 smtp邮件发送 工具 首先 如何开启telnet服务 如何开启qq邮箱的smtp服务,获得16位授权码 实现过程 几点建议 进入自己的smtp服务器 发送邮件 ------- ...

  3. qq邮箱smtp服务器imap,如何配置电子邮件客户端使用IMAP(QQ邮箱账户) 你需要学习了...

    本篇主要介绍如何将QQ邮箱的账户添加到各类邮件客户端中.将介绍Foxmail客户端,outlook2007,2010,2013版本,及Android,iPhone客户端的设置方法. 工具/材料 各种邮 ...

  4. java发送qq邮箱验证_java代码发送邮箱验证码与qq邮箱smtp服务

    importjavax.mail.Session;importjavax.mail.Transport;importjavax.mail.internet.InternetAddress;import ...

  5. 关于C#如何利用QQ邮箱SMTP发送邮件

    今天写发送邮件的时候,用163可以正常发送,但是利用QQ发送不了邮件,后来发现是QQ邮箱的SMTP使用了SSL加密,所有必须启用SSL加密,并且指定端口就可以发送了. public void Send ...

  6. 【简洁】三步开启QQ邮箱SMTP服务并获取授权码

    第一步:打开QQ邮箱,找到设置 第二步:选择账户,并且向下滑动 第三步:开启POP/SMTP服务并生成授权码 第一步:打开QQ邮箱,找到设置 第二步:选择账户,并且向下滑动 第三步:开启POP/SMT ...

  7. 记录WordPress代码实现QQ邮箱SMTP发送邮件

    这个是QQ邮箱的其它未测试,将下面的代码添加到主题目录的functions.php文件中,就可以了,评论就有邮件回复了. add_action('phpmailer_init', 'mail_smtp ...

  8. QQ邮箱引流产品怎么推广好?QQ邮箱低成本引流技巧

    QQ跟微信基本可以说是我们日常生活中必不可少的一部分了,微信本身是属于封闭式的一个社交网络,无法查找,只能通过账号搜索,附近的人,通讯录,或者是群添加,跟他人沟通发信息也只能通过加好友这些方式,相比之 ...

  9. C#使用QQ邮箱SMTP服务发送邮件

    开启邮箱的SMTP服务 进入QQ邮箱->设置->账户->开启POP3/SMTP服务,通过发短信开通后会获取一个授权码,记得保存授权码,在程序中要使用 邮件发送代码 /// <s ...

最新文章

  1. FPGA的设计艺术(8)最佳的FPGA开发实践之严格遵循过程
  2. 201128阶段二MVC框架模式、FFmpeg
  3. 特定场景下取代if-else和switch的方式
  4. 关于c/c++/obj-c的混合使用 (2010-06-22 10:05:33)
  5. 第 三 十 八 天:Linux 的 LVM 逻 辑 卷 管 理
  6. php 队列 api,GitHub - shirakun/think-queue: ThinkPHP 队列支持
  7. 【Unity3D进阶4-8】Unity3D 游戏框架
  8. 一台电脑绿色安装多个版本google Chorme方案
  9. ValueError: tile cannot extend outside image
  10. 网络基础之路由器的应用原理
  11. 怎样隐藏Word内容?这样操作只需30秒!
  12. 微盟电子商城网络交易系统——Day01【项目介绍、项目环境搭建、快速搭建后台管理系统】
  13. 云防护是什么?为何使用云防护?
  14. Vue2父传子、子传父和兄弟间互传
  15. 【每日学习】深度学习相关知识
  16. java 自然常数e中出现的连续的第一个10个数字组成的质数_冷知识:数学常数“e”的传奇故事...
  17. 如何学习嵌入式系统(基于ARM平台)
  18. 金融 计算机 硕士排名2015,2015考研 金融专硕学校实力及就业排名_跨考网
  19. 项目管理相关参数说明计算(PV、AC、EV、BAC、EAC、ETC等)
  20. 【BZOJ3926】【Zjoi2015】诸神眷顾的幻想乡 广义后缀自动机

热门文章

  1. 生不逢时的祭品-图拉丁处理器!INTEL永远不愿承认的秘密!
  2. 状态机在马蜂窝机票订单交易系统中的应用与优化实践
  3. 耳机不分主从是什么意思_【“沃”新品】TWS真无线蓝牙耳机 彰显品质生活!...
  4. MySQL基础语法与JDBC
  5. Wyn Enterprise 核心功能:行业领先的在线数据报表设计体验
  6. Docker搭建nextcloud使用云盘
  7. 执行npm run build的时候报错怎么办?
  8. pandas中Series的apply函数
  9. 模拟投票小程序C语言代码,微信小程序投票系统创建投票发布demo完整源码下载 一个很简单 - 下载 - 搜珍网...
  10. 期末考试【学堂在线答案】信息素养——学术研究的必修课(2021秋)