2017-02-17 12 views
0

Я использую httplib2 с API Mailgun для отправки вложения электронной почты, которые я загрузил с помощью Google Диска, письмо отправляется, но без вложений .. ниже мой код ..Как отправить вложения электронной почты с помощью python httplib2 с Mailgun

DRIVE = discovery.build('drive', 'v3', http=http_auth) 

     request = DRIVE.files().export_media(fileId=file_id, mimeType='application/pdf') 

     fh = io.BytesIO() 
     downloader = MediaIoBaseDownload(fh, request) 

     done = False 
     while done is False: 
      status, done = downloader.next_chunk() 
      logging.info("Download %d%%." % int(status.progress() * 100)) 

     messages = { 
      "from": sender, 
      "to": recipient, 
      "subject": 'Attachment Mail from Mailgun', 
      "text": 'Testing', 
      "attachment": fh.getvalue() 
     } 

     url = URL 

     data = { 
      "from": messages['from'], 
      "to": messages['to'], 
      "subject": messages['subject'], 
      "text": messages['text'], 
      "attachment": messages['attachment'] 
     } 

     pl = urllib.urlencode(data) 

     http = httplib2.Http() 
     http.add_credentials('api', API) 

     resp, content = http.request(
      url, 'POST', pl, 
      headers={"Content-Type": "application/x-www-form-urlencoded"}) 

ответ

0

Мы используем mailgun API для отправки сообщений электронной почты с использованием Appengine и чтение из cloud storage, одни и те же принципы будут применяться к google drive:

Первое, что я хотел бы предложить ищет в StringIO. Это позволяет вам симулировать работу с файлами внутри песочницы appengine более простым способом, чем BytesIO, но оба из них дают то, что питон вызывает file objects, которые поддерживают .read(), поэтому это должно работать с обоими.

Как только у вас есть файл file like object, вам просто нужно передать его API. В следующем примере используется библиотека requests, так как она действительно упрощает POST с файлами и совместима с appengine.

Обратите внимание, что в этом случае open(FILE_PATH_1, 'rb') является file like object, вам просто нужно заменить, что с объектом файла:

def send_complex_message(): 
    return requests.post("https://api.mailgun.net/v2/DOMAIN/messages", 
      auth=("api", "key-SECRET"), 
      files={ 
       "attachment[0]": ("FileName1.ext", open(FILE_PATH_1, 'rb')), 
       "attachment[1]": ("FileName2.ext", open(FILE_PATH_2, 'rb')) 
      }, 
      data={"from": "FROM_EMAIL", 
       "to": [TO_EMAIL], 
       "subject": SUBJECT, 
       "html": HTML_CONTENT 
      }) 

 Смежные вопросы

  • Нет связанных вопросов^_^