smtplib主题未显示,编码主题在消息中

时间:2018-05-10 21:47:42

标签: python smtp smtplib

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文件,但似乎无法搞清楚。调试时,msg已正确设置所有属性,但不会转移到电子邮件中。任何帮助深表感谢。我已经坚持了一段时间了。感谢您提供的帮助。

- 赞

1 个答案:

答案 0 :(得分:1)

我在这里出去了,但是:

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

..." fromaddr"来自代码,而不是文件。所以,"主题"是您定义的第一个键来自文本文件后定义的第一个键。

假设文件中的文本行具有错误的行终止符,并将其附加到toaddr。然后从作品中,因为它是硬编码的。也工作,因为行终止器还没有发生。它在To之后立即发生。

这里留下两行终结符等价物,因此SMTP停止处理标题,主题现在被视为邮件正文的一部分。

要验证,请尝试对" To"进行硬编码。 addr一次。如果它有效,你需要修剪()你从文件中获得的行。