【问题标题】:smtplib subject not showing, encoded subject in messagesmtplib 主题未显示,消息中的编码主题
【发布时间】:2023-04-04 15:14:01
【问题描述】:
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
import pdb

def emailSender(emailId, password, input):
    fromaddr = emailId
    emailFile = open(input, "r")  # open the generated email file with read only access
    msgTxt = ""
    server = smtplib.SMTP('outbound.___.com')
    server.starttls()
    server.login(fromaddr, password)
    for line in emailFile:
        if line.__contains__("$to$"):
            toaddr = line[4:]
        elif line.__contains__("$cc$"):
            cc = line[4:]
        elif line.__contains__("$bcc$"):
            bcc = line[5:]
        elif line.__contains__("$subj$"):
            subject = line[6:]
        elif line.__contains__("$%$"):
            msg = MIMEMultipart()
            msg['From'] = fromaddr
            msg['To'] = toaddr
            subject = subject.encode('utf-8')
            msg['Subject'] = "hello world"
            msg['Cc'] = cc
            msg.attach(MIMEText(msgTxt, 'plain'))
            text = msg.as_string()
            server.sendmail(fromaddr, toaddr, text)
            msgTxt = ""
        elif not line.__contains__("--------------------------------------------------------------------"):
            msgTxt += line

    server.quit()


if __name__ == '__main__':
    password = "****"
    emailId = "****"
    input = "input"

    emailSender(emailId, password, input)

总体目标是获取包含电子邮件、抄送、主题和消息的文本文件,然后发送该电子邮件,并对文本文件中生成的几封电子邮件执行此操作。

我正在阅读来自 msgTxt 文本文件的电子邮件。我也从文本文件中获取主题,toaddr & cc。它可以很好地发送电子邮件并显示收件人和收件人,但它不显示电子邮件的主题。我曾尝试调试 smtplib 和 ssl 文件,但似乎无法弄清楚。调试时,味精已正确设置所有属性,但不会传输到电子邮件。任何帮助深表感谢。我已经坚持了一段时间了。感谢您在高级的帮助。

--比扬

【问题讨论】:

  • 显示完整代码,包括上述变量的声明。

标签: python smtp smtplib


【解决方案1】:

我在这里很吃力,但是:

        msg['From'] = fromaddr
        msg['To'] = toaddr
        msg['Subject'] = "hello world"

..."fromaddr" 来自代码,而不是文件。因此,“主题”是您在定义的第一个来自文本文件的键之后定义的第一个键。

假设文件中的文本行有错误的行终止符,它被附加到toaddr。然后 From 工作,因为它是硬编码的。也可以工作,因为行终止符还没有出现。它紧跟在 To 之后。

您在此处留下两个等效的行终止符,因此 SMTP 停止处理标头,主题现在被视为邮件正文的一部分。

要验证,请尝试硬编码一次“To”地址。如果可行,您需要 trim() 从文件中获取的行。

【讨论】:

  • @B.Shokrollahi 我忘了提 - 因为这有效,这意味着你的文本文件中的行终止符是错误的。这可能会导致问题。您最好修剪() 所有 从文件中读取的行,并在通过 SMTP 发送它们时重新附加正确的终止符(\r\n 或 CR LF)。大多数客户不在乎,但有些客户在乎,而且跟踪这样的错误可能很困难。
猜你喜欢
  • 2020-10-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-20
  • 1970-01-01
  • 1970-01-01
  • 2014-09-21
相关资源
最近更新 更多