Python发送带zip附件的邮件

在没有网络的环境中,通过Python脚本发送zip附件邮件解决了文件传输问题。使用smtplib和email模块,处理大文件分卷压缩并在限制内发送。遇到的挑战包括邮件大小限制、发送频率限制和被认定为垃圾邮件。通过调整代码和使用不受限的邮箱,成功实现批量发送。未来计划加入多线程支持和界面设计。
摘要由CSDN通过智能技术生成

应用背景

开发环境没有网络,若想传文件必须通过外网发邮件给内网,经人审核后再内网发邮件给我,而且更麻烦的一封邮件携带的附件大小不能超过20M,而且每封还要写上与项目相关的主题。

解决思路

首先人工将大文件压缩然后设置每卷大小为19M,放到一个文件夹里面。
然后遍历此文件夹下的所有压缩文件,利用Python的smtplib和email模块,对每个压缩文件进行邮件发送。

中途遇到的问题:

  • 如果一次性发送过大的文件(30M)后台会报错,mtplib.SMTPDataError: (451, b'Error: queue file write error')。解决办法:压缩文件大小最好在20M以内。
  • 第一次发送邮件是发送一封,第二次是两封,第三次三封。。。。最后发现是没有把msg = MIMEMultipart()放到方法内,处于全局变量中。
  • 使用qq邮箱发邮件,太过频繁会被认定为垃圾邮件不给发送,报错550。解决方案:使用没有限制的邮箱,我用的学校的邮箱,随便发
  • 使用学校邮箱发邮件,偶尔会有几封邮件报错554,被认定为垃圾邮件。
  • 最后一个server发一封邮件,如果server在那挂着连续发邮件,中途有可能会断开连接,原因不知道。所以应该发一封邮件启动一个server,发完了再关闭,至少我再没有遇到连接中断的问题了。

550:出错原因:该服务器IP的发信频率大幅度超过QQ邮箱限制。
QQ邮箱对来自相同IP的外部发信服务器有一定的频率限制:
1、超过每分钟发信量限制,此IP地址被禁止发信若干分钟。
2、超过每小时发信量限制,此IP地址被禁止发信若干小时。
3、超过每日发信量限制,此IP地址本日内禁止再发信。
4、以上频率限制数值属于QQ邮箱保密数据,恕不公开。

无界面代码

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

import random
from threading import Thread
import os
from config import *


def _format_addr(s):
	"""添加头部信息"""
	name, addr = parseaddr(s)
	return formataddr((Header(name, 'utf-8')
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值