在Python中通过smtp发送邮件时,\t被替换为单个空格。

0 投票
2 回答
1936 浏览
提问于 2025-04-17 06:56

我需要在我发送的邮件中添加制表符,这样内容就可以直接复制粘贴到Excel里。代码如下:

SUBJECT = subj
TO = [whoto]
FROM = whofrom
BODY = string.join((
    "From: %s" % FROM,
    "To: %s" % ", ".join(TO),
    "Subject: %s" % SUBJECT ,
    "",
    text
    ), "\r\n")

server = smtplib.SMTP(host)
server.login(log,pass)
server.sendmail(FROM, TO, BODY)
server.quit()

我的文本里有制表符,但当邮件发送出去后,制表符就消失了。我该怎么做才能让制表符保留呢?

2 个回答

0

你需要把你的邮件格式改成HTML,并且使用表格。在我的情况下,Gmail把邮件中的制表符转换成了空格,这样看起来才对。

要确认这就是你的问题,可以查看邮件的原始内容,然后试着复制粘贴一下。

1

我建议使用 MIME 编码器库:

from email.MIMEMultipart import MIMEMultipart
from email.MIMEBase import MIMEBase
from email.MIMEText import MIMEText
from email.Utils import COMMASPACE, formatdate
from email import Encoders
import os
import smtplib
import datetime
import logging

class mailer:
    def __init__(self,SERVER="my.mail.server",FROM="email@mydomain.com"):
        self.server = SERVER
        self.send_from = FROM
        self.logger = logging.getLogger('mailer')

    def send_mail(self, send_to, subject, text, files=[]):
        assert type(send_to)==list
        assert type(files)==list
        if self.logger.isEnabledFor(logging.DEBUG):
            self.logger.debug(' '.join(("Sending email to:",' '.join(send_to))))
            self.logger.debug(' '.join(("Subject:",subject)))
            self.logger.debug(' '.join(("Text:",text)))
            self.logger.debug(' '.join(("Files:",' '.join(files))))
        msg = MIMEMultipart()
        msg['From'] = self.send_from
        msg['To'] = COMMASPACE.join(send_to)
        msg['Date'] = formatdate(localtime=True)
        msg['Subject'] = subject
        msg.attach( MIMEText(text) )
        for f in files:
            part = MIMEBase('application', "octet-stream")
            part.set_payload( open(f,"rb").read() )
            Encoders.encode_base64(part)
            part.add_header('Content-Disposition', 'attachment; filename="%s"' % os.path.basename(f))
            msg.attach(part)
        smtp = smtplib.SMTP(self.server)
        mydict = smtp.sendmail(self.send_from, send_to, msg.as_string())
        if self.logger.isEnabledFor(logging.DEBUG):
            self.logger.debug("Email Successfully Sent!")
        smtp.close()
        return mydict

记得查看返回的字典,因为它会告诉你是否只有部分人收到了邮件。

撰写回答