2017-02-17 45 views
0

私はGoogleドライブを使用してダウンロードしたメール添付ファイルを送信するためにhttps2を使用しています。添付ファイルはありません..Pythonを使用してメール添付ファイルを送信する方法

私たちは、 Appengineを使用して cloud storageからの読み取りメールを送信するために mailgun APIを使用
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

、同じ原理がgoogle driveに適用されます:

私が示唆している最初の事はStringIOに見ています。 BytesIOよりも簡単な方法でappengineサンドボックス内のファイルを使った作業をシミュレートすることができますが、両方ともfile objects.read()をサポートするようにPythonが呼び出すものを生成します。

ファイルが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 
      }) 
関連する問題