SMTP发件后邮箱的发件箱没有邮件问题

近来处理邮件发送问题时发现一个问题,就是国内的邮箱经过smtp第三方客户端发信后,邮箱本身的发件箱一般都有已发送的邮件,也是留痕和历史备份,但是国外的邮箱,例如gmx经过第三方客户端smtp发信后,gmx邮箱中不留存邮件。

经过分析得知,原来是国内做了处理,体验和优化,而gmx这种是原始的没做任何优化的问题。smtp协议本质上来讲只负责发信,所以不会在发件箱中留存。

解决办法,既然这样,那只能使用smtp发信后,紧接着用imap协议将smtp发送的邮件转存到邮件的发件箱中。

其中有个方法就是imap.list()可以imap登录后,列出所有的文件夹,以判断哪个是发件箱。

import imaplib
import ssl

# 配置信息(请替换为你自己的)
IMAP_SERVER = "imap.qq.com"  # QQ邮箱:imap.qq.com | 163邮箱:imap.163.com | Gmail:imap.gmail.com
IMAP_PORT = 993  # SSL端口,几乎所有邮箱都是993
EMAIL_ACCOUNT = "your_email@qq.com"
# 注意:多数邮箱需要用「授权码」而非登录密码(比如QQ/163邮箱需在设置中开启IMAP并生成授权码)
EMAIL_PASSWORD = "your_authorization_code"

def list_imap_folders():
    """登录IMAP服务器并列出所有文件夹"""
    # 创建SSL上下文(安全连接)
    context = ssl.create_default_context()
    
    try:
        # 1. 建立IMAP SSL连接
        imap = imaplib.IMAP4_SSL(IMAP_SERVER, IMAP_PORT, ssl_context=context)
        print("✅ 成功连接到IMAP服务器")
        
        # 2. 登录账号
        imap.login(EMAIL_ACCOUNT, EMAIL_PASSWORD)
        print("✅ 成功登录邮箱账号")
        
        # 3. 列出所有文件夹(核心方法:list())
        # 返回值格式:(状态码, [文件夹原始数据列表])
        status, folders = imap.list()
        
        if status == "OK":
            print("\n📁 邮箱文件夹列表:")
            # 解析原始文件夹数据(原始数据是字节串,需要解码和拆分)
            for folder in folders:
                # 示例原始数据:b'(\\HasNoChildren) "/" "INBOX"'
                # 拆分后提取文件夹名称
                folder_info = folder.decode("utf-8").split('"')
                folder_name = folder_info[-2]  # 取最后一个双引号前的内容
                print(f"  - {folder_name}")
        else:
            print(f"❌ 列出文件夹失败,状态码:{status}")
        
        # 4. 登出并关闭连接
        imap.logout()
        print("\n✅ 已安全登出IMAP服务器")
        
    except imaplib.IMAP4.error as e:
        print(f"❌ IMAP登录/操作错误:{e}")
    except Exception as e:
        print(f"❌ 未知错误:{e}")

if __name__ == "__main__":
    list_imap_folders()
Email

GMX邮箱SMTP配置

2026-2-9 20:28:00

Email

SMTP发件后邮箱的发件箱没有邮件问题

2026-2-10 20:06:00