2013-10-03 71 views
4

我正在爲python中的客戶/訂單處理編寫一個web應用程序,集成了asanaMandrill python API附件錯誤消息

對於已註冊的接收訂單,發票創建爲.pdf。這個文件我想發送到asana作爲使用mandrill的電子郵件附件,因爲asana python API還沒有提供附件。

由於山魈希望附件作爲一個base64編碼字符串的內容,我創建一個使用此功能的PDF格式的二進制:

def binaryFile(self, pathToFile): 
    binary_obj = xmlrpclib.Binary(open(pathToFile).read()) 
    return binary_obj 

連同文件的路徑,我把這個變成山魈像這樣:

'attachments': [{'content': binaryFile, 
       'name': pathOfFile, 
       'type': 'application/pdf'}] 

當我嘗試發送整個事情,這就是我得到:

File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site- packages/mandrill.py", line 1215, in send 
return self.master.call('messages/send', _params) 
    File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/mandrill.py", line 131, in call 
    params = json.dumps(params) 
    OverflowError: Overlong 3 byte UTF-8 sequence detected when encoding string 

誰能暗示我做錯了什麼?

謝謝。

回答

7

好吧,我自己發現了錯誤,當然是用base64編碼的。我現在這樣做:

import base64 

def filetobase64(self, inputfilename): 
    return base64.b64encode(open(inputfilename, 'rb').read()) 

現在一切工作正常。

沒有傷害的意思!

+0

浪費了這麼多時間,終於得到了這個答案。非常感謝@creimers。 +1。我仍然在想爲什麼我們需要這樣做?爲什麼它可以是直的? –