Python smtplib与Outlook 2010的HTML格式问题

0 投票
1 回答
1807 浏览
提问于 2025-04-18 11:41

我正在用elementtree.ElementTree.dump这个方法生成HTML文件。生成的文件在所有浏览器中看起来都没问题,文件里的代码也很正常(没有未闭合的括号或其他问题)。

但是,当我通过smtplib给Outlook 2010发邮件时,格式出现了一些奇怪的问题。这些问题是完全可重复的,所以肯定是有原因的。下面是一个例子:

<table b="" order="1">

这是我自己发的HTML邮件的源代码。它的写法是正确的:

<table border="1">

在原始源代码中。

如果我在Outlook中用原始HTML作为源写一封HTML邮件,它的格式是正确的。(新邮件-附加HTML文件->作为文本插入)

这个问题是出在Outlook上,还是Python上呢?我用来读取HTML文件和发送邮件的函数在下面。

def email_Report(mailOptions):
  reportName = time.strftime("%Y%m%d.%H%M") + ".html"
  ElementTree(mailOptions['report']).write("/home/%s/%s" %(mailOptions['username'],reportName))
  #Set sender and receiver to the user building the report.
  mailaddr = '%s@acme.com' %(mailOptions['username'])
  #Access the report file. Added binary in case we ever use code on Windows
  filename = "/home/%s/%s" % (mailOptions['username'], reportName)
  open_file = open(filename, 'rb')
  emsg = MIMEText(open_file.read(), 'html')
  open_file.close()
  emsg['Subject'] = "Report for %s generated by %s %s" % (mailOptions['zone'], mailOptions['username'], time.strftime("%d%m%Y-%H%M"))
  emsg['To'] = mailaddr
  emsg['From'] = mailaddr
  #Hostname can be a parameter to SMTP method if localhost isn't listening
  sc = smtplib.SMTP()
  sc.connect()
  sc.sendmail(mailaddr, mailaddr, emsg.as_string())
  sc.close()
  return 

这个HTML非常简单。没有CSS,没有标题或头部标签等等。就是html->body->table->tr->th->(newrow)->td->td等等。我是不是忽略了什么,比如编码或转义?我需要使用多部分MIME吗?我用的是Python 2.4.3,不能使用任何不自带的模块。

1 个回答

2

你确定你没有遇到邮件服务器的990个字符限制吗?这个限制是关于邮件服务器的990个字符限制的解决办法的。

撰写回答