Отправить письмо с таблицей в теле без вложений - PullRequest
0 голосов
/ 26 февраля 2019

Я пытаюсь отправить электронное письмо без вложений из CSV-файла.Этот CSV-файл представляет собой строку заголовка 3 * 9 ячеек +1.

Я хочу отправить в этом формате в хорошем формате.

Это мой код:

me = 'email'
        password = 'password'
        server = 'smtp.gmail.com:587'
        you = 'email'       
        text = """
        Hello, Friend.

        Here is your data:

        {0}

        Regards,

        Me"""

        html = """
        <html><body><p>Hello, Friend.</p>
            <p>Here is your data:</p>
        {0}
            <p>Regards,</p>
        <p>Me</p>
        </body></html>
        """

        with open('test.csv','r') as fin:
            reader=csv.reader(fin, delimiter=',')
                all_text = str()
        for row in reader:
                    temp=list(row)
                    all_text+= '\n'.join(row) 

            text = text.format(all_text, tablefmt="grid")
        html = html.format(all_text,  tablefmt="html")

        message = MIMEMultipart(
            "alternative", None, [MIMEText(text), MIMEText(html,'html')])

        message['Subject'] = "Your data"
        message['From'] = me
        message['To'] = you
            server = smtplib.SMTP('smtp.gmail.com', 587)
        server.ehlo()
        server.starttls()
        server.login(me, password)
        server.sendmail(me, you, message.as_string())
        server.quit()

Это работает, но в письме нетлюбой разделитель, ячеек нет, он выглядит очень плохо и нечитаемо.

Как я могу исправить формат?

1 Ответ

0 голосов
/ 27 февраля 2019

Вопрос из файла CSV.- с таблицей в теле - в хорошем формате

Пример использования pandas для получения таблицы text и html.


  • CSV Данные

    CSV = """Ville,Aire_urbaine,Pôle_urbain,Commune
    Paris,12.568.755,10.733.971,2.190.327
    Lyon,2.310.850,1.651.365,515.695
    Saint-Étienne,519.834,374.175,171.924
    """
    
  • Чтение CSV Данные в pd.Dataframe

    df = pd.read_csv(io.StringIO(CSV), sep=',')
    
  • Формат txt

    text = str(df)
    #text = df.to_string(index=False)
    

    Выход :

               Ville Aire_urbaine Pôle_urbain    Commune
    0          Paris   12.568.755  10.733.971  2.190.327
    1           Lyon    2.310.850   1.651.365    515.695
    2  Saint-Étienne      519.834     374.175    171.924
    
  • Формат html

    html = df.to_html()
    

    Выход :

    <table border="1" class="dataframe">
      <thead>
        <tr style="text-align: right;">
          <th></th>
          <th>Ville</th>
          <th>Aire_urbaine</th>
          <th>Pôle_urbain</th>
          <th>Commune</th>
        </tr>
      </thead>
      <tbody>
        <tr>
          <th>0</th>
          <td>Paris</td>
          <td>12.568.755</td>
          <td>10.733.971</td>
          <td>2.190.327</td>
        </tr>
        ... (omitted for brevity)
      </tbody>
    </table>
    

Протестировано на Python: 3.4.2

...