Python smtplib sendmail удаляет пробелы из начала текста

Python отправляет электронную почту просто отлично. Есть только одна проблема, где он удаляет пробелы от начала строк в теле электронной почты. В моем случае тело электронной почты является git diff. Я хочу сохранить отступ, так что я могу просто скопировать вставить код из электронной почты и использовать его.

Вот соответствующая часть моего кода:

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

Когда я печатаю значение » msg.as_string ()», i can see the whitespaces. Вот часть raw_source из фактического письма, которое я получил:

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

Вы можете увидеть, как сохраняется пробел в теге. Но в письме эти пробелы исчезли. Таким образом, пытаясь найти способ сохранить пробелы в теле электронной почты.

1 ответ

  1. Я понял проблему. Публикация решения здесь для других ссылок. Мне просто нужно было изменить свой код с:

    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;
        }
    

    и все получилось так, как и ожидалось.