开发者社区 问答 正文

阿里企业邮箱smtp 不能重复发送同一主题的邮件

用python3 smtplib 发邮件, 邮件的主题( MIMEMultipart, subject )相同的情况下,只能发出一封邮件 不同内容也不能发出 是需要设置什么吗?

展开
收起
lix93 2022-11-01 11:18:48 944 发布于上海 分享
分享
版权
举报
阿里云 AI 助理回答

当使用Python的smtplib库配合email.mime.multipart发送邮件时,如果遇到邮件主题相同就只能发出一封邮件的情况,这通常不是由主题相同直接引起的。SMTP协议本身并不限制发送多封主题相同的邮件。问题可能出在你的代码逻辑中,比如可能误将消息体或整个邮件对象复用,而不是为每封邮件创建新的实例。

解决方案步骤

  1. 确保每次发送都创建新的邮件实例

    • 确保在循环或每次准备发送邮件时,都重新初始化一个新的MIMEMultipart对象和相关的MIMEText内容对象。这样可以保证每封邮件都是独立的,避免了实例复用导致的内容覆盖。
  2. 示例代码片段:

    from email.mime.multipart import MIMEMultipart
    from email.mime.text import MIMEText
    import smtplib
    
    # 发件人、收件人、SMTP服务器等信息
    sender_email = "your_email@example.com"
    receiver_email = "receiver@example.com"
    password = input("Type your password and press enter:")
    smtp_server = "smtp.example.com"
    
    # 假设有多条内容需要发送,这里简化为循环示例
    contents = ["这是邮件内容1", "这是邮件内容2", "这是邮件内容3"]
    
    for content in contents:
       # 为每封邮件创建新的实例
       message = MIMEMultipart("alternative")
       message["Subject"] = "相同的邮件主题"
       message["From"] = sender_email
       message["To"] = receiver_email
    
       # 创建正文部分
       text_part = MIMEText(content, "plain")
       message.attach(text_part)
    
       # 连接SMTP服务器并发送邮件
       with smtplib.SMTP(smtp_server, 587) as server:
           server.starttls()  # 启用TLS加密
           server.login(sender_email, password)
           server.sendmail(sender_email, receiver_email, message.as_string())
    

注意事项

  • 独立邮件实例:确保每次循环或每次准备发送新邮件时,所有邮件组件(如MIMEMultipartMIMEText)都是新创建的。
  • SMTP连接管理:上述示例中,每次发送邮件都新建了SMTP连接。在实际应用中,根据需要,你也可以设计成复用SMTP连接以提高效率,但需注意正确管理连接生命周期,避免资源泄露。

通过以上步骤和注意事项,即使邮件主题相同,你也应该能够成功发送多封具有不同内容的邮件。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等