2017-01-19 5 views
0

У меня есть форматированный файл с заполняющими строками, когда я отправляю его на свою учетную запись в gmail, все прокладки в файле удаляются, а почта не отформатирована потому что gmail не сохраняет исходный формат. Что делать, чтобы этого избежать?Как отправить текстовое сообщение с использованием AWS SES в gmail

Я попробовал этот код, но он не работает с помощью Raw электронной почты:

from email.mime.multipart import MIMEMultipart 
from email.mime.text import MIMEText 
import smtplib 
from email import encoders 

fileHandler = "logg.log" 
session = Session(profile_name="test", region_name="eu-west-1") 
ses = session.client('ses') 
today = datetime.date.today() - datetime.timedelta(days=1) 
for file in sorted(glob.glob(fileHandler + '*'), key=os.path.getmtime): 
    body = MIMEText(open(file, 'r').read()) 
    body['Subject']="aws-log" 
    response = ses.send_raw_email(
          Source = "[email protected]", 
          Destinations=[ 
            "[email protected]", 
           ], 
          RawMessage={ 
           'Data': body.as_string() 
            },) 

Даже при использовании сырья почты, почта не приходит в виде обычного текста.

Вот файл я посылаю Gmail:

enter image description here

Это почта я получаю:

enter image description here

ответ

0

Я, наконец, решил свою проблему, этот парень <pre></pre> спас меня! Вот как это делается:

body = '<pre width="300" style="font-size: 14px; max-width: 100%;">' + body + '</pre>' 
      subject = objet+" %s" % (today.strftime("%Y-%m-%d")) 
      for email in emailarg.split(','): 
       response = ses.send_email(
          Source = email, 
          Destination={ 
           'ToAddresses': [ 
            email, 
           ], 
          }, 
          Message={ 
           'Subject': { 
            'Data': subject 
           }, 
           'Body': { 
            'Html': { 
             'Data': body 
            }, 
           } 
          } 
         ) 
1

Вы не должны send_raw_email. Если вы посмотрите на методе send_email он фактически принимает как Text и Html тела аргументов:

Message={ 
    'Subject': { 
     'Data': 'string', 
     'Charset': 'string' 
    }, 
    'Body': { 
     'Text': { 
      'Data': 'string', 
      'Charset': 'string' 
     }, 
     'Html': { 
      'Data': 'string', 
      'Charset': 'string' 
     } 
    } 
} 

Если вы просто поставить текстовый корпус, который должен получить вам обычный текст электронной почты, который вы ищете.

Насколько GMAIL простого форматирования текста они будут переносить строки в 78 символов в соответствии с RFC 2822 раздел 2.1.1: https://tools.ietf.org/html/rfc2822

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

+0

На самом деле, я знаю, что HTML может решить мою проблему, но я не хочу ее использовать, потому что иначе почта будет огромной и очень заряженной. Я действительно застрял, как отправить хорошо отформатированный текст в gmail. :/Спасибо @DaveMaple за помощь – JavaQueen

+0

Вы можете просто оставить Html в разделе «Тело» - только предоставить аргумент для «Текст». –

+0

Да, я знаю. Я даю только текст, но он не сырой. Когда я получаю почту, она переформатируется gmail .. – JavaQueen

0

Присмотритесь к полученному письму.

Скопируйте его тело и вставьте его в текстовый редактор. Вы должны найти, что пространства на самом деле совершенно правильны.

Вопрос здесь - я считаю, - это не с SES.

Проблема заключается в том, что пользовательский интерфейс Gmail отображает текстовые сообщения электронной почты в виде пропорционального шрифта вместо шрифта с фиксированной шириной. Обратите внимание, что IIIIII занимает меньше горизонтального пространства, чем WWWWWW, хотя количество символов одинаково. Это естественно уничтожает форматирование с пробелами. С другой стороны ...

# IIIIII - code blocks on SO 
# WWWWWW - use a fixed width typeface 
# even though the rest of the post doesn't 
# so I and W are the same width here but not above 

Если вы хотите контроля над дисплеем, вы должны будете использовать HTML и указать фиксированную ширину шрифта.

+0

Я знаю, но мы уверены, что нет другого способа или решения, кроме HTML? :/ @Майкл – JavaQueen