2017-01-13 1 views
0

Python envoie des courriels très bien. Il n'y a qu'un seul problème où il supprime les espaces blancs du début des lignes dans le corps de l'e-mail. Dans mon cas, le corps de l'email est le diff de git. Je veux préserver l'indentation de sorte que je peux simplement copier coller le code de l'email et l'employer.Python smtplib sendmail supprime les espaces à partir du début du texte

Voici la partie pertinente de mon code:

import cgi 
import re 
import smtplib 
from email.mime.text import MIMEText 
from email.mime.multipart import MIMEMultipart 
from subprocess import check_output 

def generate_green_bg_color(input_line): 
    html_green = """ 
    <html> 
     <head> 
     <style> 
     p4 { 
     color: black; 
     text-align: left; 
     font-size: 12px; 
     font-family: monospace; 
     } 
     </style> 
     </head> 
     <body> 
     <div style="background-color:rgb(193, 255, 198)"> 
     <p4>"""+str(input_line)+"""</br></p4> 
     </body> 
    </html> 
    """ 
    return html_green 

verbose_diff = check_output(['git', 'diff', 'HEAD^..HEAD’]) 
verbose_diff_list = verbose_diff.split('\n’) 
for each in verbose_diff_list: 
    escaped_each = cgi.escape(each, True) 
    colored_line = generate_green_bg_color(escaped_each) 

msg = MIMEMultipart() 
email_compatible_diff_format = MIMEText(colored_line, 'html') 
msg.attach(email_compatible_diff_format) 
server = smtplib.SMTP('smtp.company.com') 
server.sendmail(msg['From'], email_list, msg.as_string()) 
server.quit() 

Lorsque j'imprime la valeur de « msg.as_string() », je peux voir les espaces. Voici une partie de raw_source de l'e-mail réelle reçue:

<html> 
    <head> 
    <style> 
    p4 { 
     color: black; 
     text-align: left; 
     font-size: 12px; 
     font-family: monospace; 
     } 
    </style> 
    </head> 
    <body> 
     <div style="background-color:rgb(193, 255, 198)"> 
     <p4>+   print &quot;Hello World:%s&quot; %colored_line</br></p4> 
    </body> 
    </html> 

Vous pouvez voir comment l'whitspace est préservée dans la balise. Mais dans l'email ces espaces sont partis. Donc, essayer de trouver un moyen de préserver les espaces dans le corps de l'e-mail.

+0

Quel est votre client de messagerie? Avez-vous essayé d'en utiliser un autre pour voir ce qui se passe? – mmenschig

Répondre

0

J'ai trouvé le problème. Poster la solution ici pour la référence des autres. J'ai juste besoin de modifier mon code de:

p4 { 
    color: black; 
    text-align: left; 
    font-size: 12px; 
    font-family: monospace; 
    } 

à

p4 { 
    color: black; 
    text-align: left; 
    font-size: 12px; 
    font-family: monospace; 
    white-space: pre; 
    } 

et tout a fonctionné comme prévu.