Holger Brunn
7 years ago
committed by
Enric Tobella
9 changed files with 208 additions and 0 deletions
-
72mail_drop_target/README.rst
-
4mail_drop_target/__init__.py
-
18mail_drop_target/__manifest__.py
-
4mail_drop_target/models/__init__.py
-
41mail_drop_target/models/mail_thread.py
-
BINmail_drop_target/static/description/icon.png
-
3mail_drop_target/static/src/css/mail_drop_target.css
-
55mail_drop_target/static/src/js/mail_drop_target.js
-
11mail_drop_target/views/templates.xml
@ -0,0 +1,72 @@ |
|||
.. image:: https://img.shields.io/badge/licence-AGPL--3-blue.svg |
|||
:target: https://www.gnu.org/licenses/agpl-3.0-standalone.html |
|||
:alt: License: AGPL-3 |
|||
|
|||
========================== |
|||
Drag & drop emails to Odoo |
|||
========================== |
|||
|
|||
This module was written to allow users to drag&drop emails from their desktop to Odoo. |
|||
|
|||
It supports as well RFC822 .eml files as Outlook .msg (those only if `an extra library <https://github.com/mattgwwalker/msg-extractor>`_ is installed) files. |
|||
|
|||
Usage |
|||
===== |
|||
|
|||
To use this module, you need to: |
|||
|
|||
#. save your emails on the desktop / somewhere in the file system |
|||
#. drag them to your browser, and drop them on the chatter of the record you want to attach your email to |
|||
|
|||
.. image:: https://odoo-community.org/website/image/ir.attachment/5784_f2813bd/datas |
|||
:alt: Try me on Runbot |
|||
:target: https://runbot.odoo-community.org/runbot/205/10.0 |
|||
|
|||
Known issues / Roadmap |
|||
====================== |
|||
|
|||
* most mail clients won't allow you to drag mails directly from the mail client, you'll need some plugin for that |
|||
* for corporate environments, it might be feasible to support imap URLs and get the mail in question on the server side |
|||
|
|||
Bug Tracker |
|||
=========== |
|||
|
|||
Bugs are tracked on `GitHub Issues |
|||
<https://github.com/OCA/social/issues>`_. In case of trouble, please |
|||
check there if your issue has already been reported. If you spotted it first, |
|||
help us smashing it by providing a detailed and welcomed feedback. |
|||
|
|||
Credits |
|||
======= |
|||
|
|||
Images |
|||
------ |
|||
|
|||
* Odoo Community Association: `Icon <https://github.com/OCA/maintainer-tools/blob/master/template/module/static/description/icon.svg>`_. |
|||
|
|||
Libraries |
|||
--------- |
|||
|
|||
* `msg-extractor <https://github.com/mattgwwalker/msg-extractor>`_ |
|||
|
|||
Contributors |
|||
------------ |
|||
|
|||
* Holger Brunn <hbrunn@therp.nl> |
|||
|
|||
Do not contact contributors directly about help with questions or problems concerning this addon, but use the `community mailing list <mailto:community@mail.odoo.com>`_ or the `appropriate specialized mailinglist <https://odoo-community.org/groups>`_ for help, and the bug tracker linked in `Bug Tracker`_ above for technical issues. |
|||
|
|||
Maintainer |
|||
---------- |
|||
|
|||
.. image:: https://odoo-community.org/logo.png |
|||
:alt: Odoo Community Association |
|||
:target: https://odoo-community.org |
|||
|
|||
This module is maintained by the OCA. |
|||
|
|||
OCA, or the Odoo Community Association, is a nonprofit organization whose |
|||
mission is to support the collaborative development of Odoo features and |
|||
promote its widespread use. |
|||
|
|||
To contribute to this module, please visit https://odoo-community.org. |
@ -0,0 +1,4 @@ |
|||
# -*- coding: utf-8 -*- |
|||
# Copyright 2018 Therp BV <https://therp.nl> |
|||
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). |
|||
from . import models |
@ -0,0 +1,18 @@ |
|||
# -*- coding: utf-8 -*- |
|||
# Copyright 2018 Therp BV <https://therp.nl> |
|||
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). |
|||
{ |
|||
"name": "Drag & drop emails to Odoo", |
|||
"version": "10.0.1.0.0", |
|||
"author": "Therp BV,Odoo Community Association (OCA)", |
|||
"license": "AGPL-3", |
|||
"category": "Discuss", |
|||
"summary": "Attach emails to Odoo by dragging them from your desktop", |
|||
"depends": [ |
|||
'mail', |
|||
'web_drop_target', |
|||
], |
|||
"data": [ |
|||
'views/templates.xml', |
|||
], |
|||
} |
@ -0,0 +1,4 @@ |
|||
# -*- coding: utf-8 -*- |
|||
# Copyright 2018 Therp BV <https://therp.nl> |
|||
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). |
|||
from . import mail_thread |
@ -0,0 +1,41 @@ |
|||
# -*- coding: utf-8 -*- |
|||
# Copyright 2018 Therp BV <https://therp.nl> |
|||
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). |
|||
from base64 import b64decode |
|||
try: |
|||
from ExtractMsg import Message |
|||
except ImportError: |
|||
Message = None |
|||
from odoo import _, api, exceptions, models |
|||
|
|||
|
|||
class MailThread(models.AbstractModel): |
|||
_inherit = 'mail.thread' |
|||
|
|||
@api.model |
|||
def message_process_msg( |
|||
self, model, message, custom_values=None, save_original=False, |
|||
strip_attachments=False, thread_id=None, |
|||
): |
|||
"""Convert message to RFC2822 and pass to message_process""" |
|||
if not Message: |
|||
raise exceptions.UserError( |
|||
_('Install the msg-extractor library to handle .msg files') |
|||
) |
|||
message_msg = Message(b64decode(message)) |
|||
message_email = self.env['ir.mail_server'].build_email( |
|||
message_msg.sender, message_msg.to.split(','), message_msg.subject, |
|||
# prefer html bodies to text |
|||
message_msg._getStream('__substg1.0_10130102') or message_msg.body, |
|||
email_cc=message_msg.cc, |
|||
headers={'date': message_msg.date}, |
|||
attachments=[ |
|||
(attachment.longFilename, attachment.data) |
|||
for attachment in message_msg.attachments |
|||
], |
|||
) |
|||
return self.message_process( |
|||
model, message_email.as_string(), custom_values=custom_values, |
|||
save_original=save_original, strip_attachments=strip_attachments, |
|||
thread_id=thread_id, |
|||
) |
After Width: 128 | Height: 128 | Size: 9.2 KiB |
@ -0,0 +1,3 @@ |
|||
.o-mail-drag-over { |
|||
filter: blur(2px); |
|||
} |
@ -0,0 +1,55 @@ |
|||
//-*- coding: utf-8 -*-
|
|||
//Copyright 2018 Therp BV <https://therp.nl>
|
|||
//License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).
|
|||
|
|||
odoo.define('mail_drop_target', function(require) |
|||
{ |
|||
var Chatter = require('mail.Chatter'), |
|||
web_drop_target = require('web_drop_target'), |
|||
Model = require('web.Model'); |
|||
|
|||
Chatter.include(web_drop_target.DropTargetMixin); |
|||
Chatter.include({ |
|||
_drop_allowed_types: ['message/rfc822'], |
|||
_get_drop_item: function(e) { |
|||
var dataTransfer = e.originalEvent.dataTransfer; |
|||
if( |
|||
dataTransfer.items.length == 1 && |
|||
dataTransfer.items[0].type == '' && |
|||
dataTransfer.items[0].kind == 'file' |
|||
) { |
|||
// this might be an outlook msg file
|
|||
return dataTransfer.items[0]; |
|||
} |
|||
return this._super.apply(this, arguments); |
|||
}, |
|||
_handle_file_drop: function(drop_file, e) { |
|||
var self = this, |
|||
mail_processor = '', |
|||
data = ''; |
|||
if(drop_file.name.endsWith('.msg')) { |
|||
mail_processor = 'message_process_msg'; |
|||
data = base64js.fromByteArray( |
|||
new Uint8Array(e.target.result) |
|||
); |
|||
} else { |
|||
mail_processor = 'message_process'; |
|||
data = String.fromCharCode.apply( |
|||
null, new Uint8Array(e.currentTarget.result) |
|||
); |
|||
} |
|||
// TODO: read some config parameter if this should set
|
|||
// some of the context keys to suppress mail.thread's behavior
|
|||
return new Model('mail.thread').call( |
|||
mail_processor, |
|||
[this.field_manager.dataset.model, data], |
|||
{ |
|||
thread_id: this.field_manager.datarecord.id, |
|||
} |
|||
) |
|||
.then(function() { |
|||
return self.field_manager.reload(); |
|||
}); |
|||
} |
|||
}); |
|||
}); |
@ -0,0 +1,11 @@ |
|||
<?xml version="1.0" encoding="UTF-8"?> |
|||
<openerp> |
|||
<data> |
|||
<template id="assets_backend" name="mail_drop_target assets" inherit_id="web.assets_backend"> |
|||
<xpath expr="." position="inside"> |
|||
<script type="text/javascript" src="/mail_drop_target/static/src/js/mail_drop_target.js"></script> |
|||
<link rel="stylesheet" href="/mail_drop_target/static/src/css/mail_drop_target.css"/> |
|||
</xpath> |
|||
</template> |
|||
</data> |
|||
</openerp> |
Write
Preview
Loading…
Cancel
Save
Reference in new issue