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已正确设置所有属性,但不会转移到电子邮件中。任何帮助深表感谢。我已经坚持了一段时间了。感谢您提供的帮助。
- 赞
答案 0 :(得分:1)
我在这里出去了,但是:
msg['From'] = fromaddr
msg['To'] = toaddr
msg['Subject'] = "hello world"
..." fromaddr"来自代码,而不是文件。所以,"主题"是您定义的第一个键来自文本文件后定义的第一个键。
假设文件中的文本行具有错误的行终止符,并将其附加到toaddr
。然后从作品中,因为它是硬编码的。也工作,因为行终止器还没有发生。它在To之后立即发生。
这里留下两行终结符等价物,因此SMTP停止处理标题,主题现在被视为邮件正文的一部分。
要验证,请尝试对" To"进行硬编码。 addr一次。如果它有效,你需要修剪()你从文件中获得的行。