45 lines
1.7 KiB
Python
45 lines
1.7 KiB
Python
import base64
|
|
import psycopg2
|
|
|
|
import openerp
|
|
from openerp import SUPERUSER_ID
|
|
from openerp import http
|
|
from openerp.http import request
|
|
from openerp.addons.web.controllers.main import content_disposition
|
|
import mimetypes
|
|
|
|
|
|
class MailController(http.Controller):
|
|
_cp_path = '/mail'
|
|
|
|
@http.route('/mail/download_attachment', type='http', auth='user')
|
|
def download_attachment(self, model, id, method, attachment_id, **kw):
|
|
# FIXME use /web/binary/saveas directly
|
|
Model = request.registry.get(model)
|
|
res = getattr(Model, method)(request.cr, request.uid, int(id), int(attachment_id))
|
|
if res:
|
|
filecontent = base64.b64decode(res.get('base64'))
|
|
filename = res.get('filename')
|
|
content_type = mimetypes.guess_type(filename)
|
|
if filecontent and filename:
|
|
return request.make_response(
|
|
filecontent,
|
|
headers=[('Content-Type', content_type[0] or 'application/octet-stream'),
|
|
('Content-Disposition', content_disposition(filename))])
|
|
return request.not_found()
|
|
|
|
@http.route('/mail/receive', type='json', auth='none')
|
|
def receive(self, req):
|
|
""" End-point to receive mail from an external SMTP server. """
|
|
dbs = req.jsonrequest.get('databases')
|
|
for db in dbs:
|
|
message = dbs[db].decode('base64')
|
|
try:
|
|
registry = openerp.registry(db)
|
|
with registry.cursor() as cr:
|
|
mail_thread = registry['mail.thread']
|
|
mail_thread.message_process(cr, SUPERUSER_ID, None, message)
|
|
except psycopg2.Error:
|
|
pass
|
|
return True
|