0

Mailgun API와 함께 httplib2를 사용하여 Google 드라이브를 사용하여 다운로드 한 전자 메일 첨부 파일을 보내고 있습니다. 전자 메일은 첨부 파일없이 보내지 만 .. 아래 코드는Python을 사용하여 전자 메일 첨부 파일을 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

우리는 Appengine을 사용하고 cloud storage에서 읽고 이메일을 보내도록 mailgun API를 사용하여 같은 원칙은 google drive에 적용됩니다 : 제가 제안

가장 먼저하는 일이 StringIO으로 찾고 있습니다. BytesIO보다 쉬운 방법으로 appengine 샌드 박스 내부의 파일 작업을 시뮬레이션 할 수 있지만, 둘다 file objects을 지원하는 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 
      }) 
관련 문제