You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

smtplib发送带Zip附件邮件时Gmail收件方退回的问题如何解决

问题核心原因

你遇到的附件变为.bin文件、邮件被Gmail退回的问题,首先由代码参数错误导致,修复代码后配合调整发件规则即可完全解决:

代码修复方案

你代码中add_header方法未给附件指定带.zip后缀的文件名,邮件客户端无法识别附件格式,会自动将无名称的二进制附件转为.bin文件,同时这类无格式标识的二进制附件本身就会触发Gmail的安全拦截规则。

修复后的代码如下:

def send_mail(zips_folder):
    import smtplib
    from email.mime.multipart import MIMEMultipart
    from email.mime.base import MIMEBase
    from email import encoders
    sender_email = "senderEmail@outlook.com" 
    receiver_email = "receiverEmail@gmail.com"
    message = MIMEMultipart()
    message["From"] = sender_email
    message['To'] = receiver_email
    message['Subject'] = "subject"

    # 用with语法自动管理文件句柄,避免资源泄露
    zip_file_path = r"C:\Users\Full File Path to Zip File\Zip File Name.zip"
    with open(zip_file_path,'rb') as zf:
        # 用更准确的zip MIME类型替换通用二进制类型,降低拦截概率
        obj = MIMEBase('application', 'zip')
        obj.set_payload(zf.read())
    encoders.encode_base64(obj)
    # 补充完整附件文件名,用引号包裹避免特殊字符解析错误
    obj.add_header('Content-Disposition', "attachment", filename= "Zip File Name.zip")
    message.attach(obj)
    my_message = message.as_string()
    email_session = smtplib.SMTP("smtp-mail.outlook.com", 587)
    email_session.starttls()
    email_session.login(sender_email, 'email password')
    email_session.sendmail(sender_email, receiver_email, my_message)
    email_session.quit()
    print("YOUR MAIL HAS BEEN SENT SUCCESSFULLY")
Gmail拦截补充规避规则
  • 如果你的zip压缩包内包含.exe、.bat、.cmd、.js等可执行文件,Gmail会默认拦截该类附件,哪怕压缩后也会被识别。如果确实需要发送此类文件,可以将zip包设置解压密码后再发送,同时在邮件正文中告知收件人解压密码
  • 避免邮件只有附件没有正文内容,补充正常的正文说明可以大幅降低被判定为垃圾邮件的概率
  • 新注册的Outlook账号不要短时间内大量发送带附件的邮件,否则会触发Gmail的反垃圾风控规则

内容的提问来源于stack exchange,提问作者SSerb1989

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 21:06:01