2017-01-19 2 views
0

J'ai un fichier formaté, avec des chaînes de remplissage, lorsque je l'envoie à mon compte dans gmail, tous les paddings du fichier sont supprimés et le courrier n'est pas bien formaté parce que Gmail ne conserve pas le format d'origine. Que faire pour éviter cela?Comment envoyer un message en texte brut à l'aide d'AWS SES à gmail

J'ai essayé ce code, mais il ne fonctionne pas par courrier électronique 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() 
            },) 

Même en utilisant mails premières, le courrier ne vient pas dans le texte brut.

Voici le fichier que je transmets à gmail:

enter image description here

Voici le courrier que je reçois:

enter image description here

Répondre

0

J'ai finalement résolu mon problème, ce mec <pre></pre> m'a sauvé !! Voici comment:

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

Vous ne devriez pas avoir send_raw_email. Si vous jetez un oeil à la méthode send_email il faut en fait deux arguments corps Text et Html:

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

Si vous donnez juste un corps de texte qui devrait vous obtenir le courriel que vous-texte brut vous recherchez.

En ce qui concerne la mise en forme de texte brut gmail ils termineront les lignes à 78 caractères selon la section 2.1.1 RFC 2822: https://tools.ietf.org/html/rfc2822

C'est une norme acceptée pour les emails en texte brut. Vous pouvez formater le message vous-même pour le texte en clair, mais il devra respecter une limite de 78 caractères par ligne pour éviter le reformatage.

+0

En fait, je sais que HTML peut résoudre mon problème, mais je ne veux pas l'utiliser parce que sinon le courrier sera énorme et très chargé. Je suis vraiment coincé comment envoyer du texte bien formaté à Gmail. :/Merci @DaveMaple pour l'aide – JavaQueen

+0

Vous pouvez simplement laisser le Html dans 'Body' - ne fournir qu'un argument pour 'Text'. –

+0

Oui, je sais. Je donne seulement du texte, mais ce n'est pas cru. Quand je reçois le courrier, il est reformaté par Gmail. – JavaQueen

0

Regardez de plus près votre courriel reçu. Copiez son corps et collez-le dans un éditeur de texte. Vous devriez trouver que les espaces sont en fait parfaitement corrects.

Le problème ici - je crois - n'est pas avec SES.

Le problème est que l'interface utilisateur de Gmail affiche des e-mails en texte brut dans une police de caractères proportionnelle, au lieu d'une police à largeur fixe. Notez que IIIIII occupe moins d'espace horizontal que WWWWWW même si le nombre de caractères est le même. Cela détruit naturellement le formatage avec des espaces. A l'inverse ...

# 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 

Si vous voulez contrôler l'affichage, vous aurez besoin d'utiliser du HTML et spécifier une police de caractères à largeur fixe.

+0

Je sais mais sommes-nous sûrs qu'il n'y a pas d'autre moyen ou solution autre que HTML? :/ @Michael – JavaQueen