2013-10-03 4 views
4

Я пишу веб-приложение для обработки клиентов/заказов в python с интеграцией asana.Сообщение об ошибке присоединения API Mandrill python

Для зарегистрированного входящего заказа счет-фактура создается как .pdf. Этот файл я хочу отправить в asana в качестве вложения электронной почты с использованием mandrill, потому что API-интерфейс asana python еще не предоставляет вложений.

Поскольку мандрил хочет содержание вложения в виде строки в кодировке Base64, создать двоичный файл в формате PDF с помощью этой функции:

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

Вместе с путем файла, я бросаю это в Mandrill как так:

'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. Я все еще думаю, зачем нам это делать? почему это может быть прямо? –

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