2017-04-04 8 views
0

Ich versuche, Outlook-REST-API in meinem Python-Code zu verwenden, um eine E-Mail im Auftrag eines Benutzers zu senden, der mir bereits seine Zustimmung erteilt.Outlook-API-E-Mail-Anhang Problem

ich in der Lage war, erfolgreich ihre/me/sendmail-Knoten mit dem folgenden Nutzlast mit Text-E-Mails senden:

email_payload = { 
     "Message": { 
      "Subject": email_subject, 
      "Body": { 
       "ContentType": "Text", 
       "Content": email_body 
      }, 
      "ToRecipients": [ 
       { 
        "EmailAddress": { 
         "Address": to 
        } 
       } 
      ] 
     } 
    } 
jedoch

, wenn Anlagen hinzuzufügen versuchen (basierend auf deren Dokumentation), in denen ich einige Fragen:

 email_payload["Message"]["Attachments"] = [ 
      { 
       "ContentType": "application/pdf", 
       "Name": "{0}".format("something.pdf"), 
       "ContentBytes": base64.b64encode(attachment.read()) 
      } 
     ] 

Probleme bestehen in 415 Antwortstatuscode mit folgendem Inhalt: {u'error ‚: {u'message‘: u'A fehlt oder ist leer Header Inhaltstyp gefunden wurde, wenn eine Nachricht zu lesen versuchen. Der Header des Inhaltstyps ist erforderlich. ', U'code': u'RequestBodyRead '}}

Konnte nichts in ihrer Dokumentation finden. Hoffe jemand kann mich aufklären :)

Antwort

0

Für alle anderen solche Probleme haben, hier ist der Kontext und fix:

Am Anfang, da ich nur Klartext-E-Mails schickte, sah meine Anfrage-Header wie folgt aus:

request_headers = { 
    'Authorization': "Bearer {0}".format(token), 
} 

Und die eigentliche Anfrage:

api_response = requests.post(
     request_url, 
     json.dumps(body), 
     headers=request_headers 
    ) 

Wie Sie habe ich bemerkt, vielleicht keine Content-Type-Header in meiner sendete (nicht sicher, warum), aber alles ging gut so weit, bis ich beschlossen habe, auch Anhänge hinzuzufügen.

Scheint, wie wenn mein request_headers zu Content-Type enthalten würde, würde alles gut:

request_headers = { 
      'Authorization': 'Bearer {0}'.format(refreshed_token), 
      'Content-Type': 'application/json' 
     }