2011-11-23 4 views
0

내가 보낸 이메일에 탭을 넣을 수 있어야 콘텐츠가 사본을 Excel에 붙여 넣을 수 있습니다. 코드 :python으로 smtp로 이메일을 보내면 my t가 하나의 공백으로 바뀝니다.

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() 

내 텍스트에는 탭이 있지만 이메일을 보낼 때 탭이 없습니다. 탭을 유지하려면 어떻게해야합니까?

답변

1

나는 마임 인코더 라이브러리를 사용하는 것이 좋습니다 : 그것은 일부 사람들이 이메일을받은 경우 사용자에게 알려줍니다으로

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 protected]"): 
     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 

가 반환 사전을 확인해야합니다.

+0

이것은 내가 무엇을 요구했는지 전혀 아닙니다. 이메일을 보내는 데 문제가 없습니다. 탭을 보내지 않은 이메일에 탭이 있어야합니다. – wDroter

+0

@wDroter send_mail 함수를 읽으면 하나의 큰 문자열을 만드는 대신 mime 라이브러리를 사용하여 텍스트를 만드는 것을 볼 수 있습니다. 이렇게하면 텍스트 섹션에 탭이 유지되며 나중에 첨부 할 경우 첨부 파일을 추가 할 수 있습니다. 나머지는 편의를위한 것입니다. –

+0

이것은 여전히 ​​공백만을 남기고 탭은 남기지 않습니다. – wDroter

관련 문제