Ivan Yelizariev
3 years ago
No known key found for this signature in database
GPG Key ID: 5C35763D5E7BFD67
9 changed files with 0 additions and 189 deletions
-
35mailgun/README.rst
-
3mailgun/__init__.py
-
13mailgun/__openerp__.py
-
2mailgun/controllers/__init__.py
-
17mailgun/controllers/main.py
-
14mailgun/data/cron.xml
-
13mailgun/doc/changelog.rst
-
56mailgun/doc/index.rst
-
36mailgun/models.py
@ -1,35 +0,0 @@ |
|||
.. image:: https://itpp.dev/images/infinity-readme.png |
|||
:alt: Tested and maintained by IT Projects Labs |
|||
:target: https://itpp.dev |
|||
|
|||
========= |
|||
Mailgun |
|||
========= |
|||
|
|||
With this module you can receive incoming messages from mailgun. |
|||
There is no IMAP or POP3 servers on mailgun that is to be used with odoo. |
|||
That is why we need this module. It fetches messages from mailgun using their API |
|||
and stores them in odoo. |
|||
|
|||
TODO |
|||
==== |
|||
|
|||
* If emails are sent when odoo is stopped then Mailgun will retry (other than for delivery notification) during 8 hours at the following intervals before stop trying: 10 minutes, 10 minutes, 15 minutes, 30 minutes, 1 hour, 2 hour and 4 hours. This could be fixed by fetching undelivered messages after odoo starts. |
|||
|
|||
Questions? |
|||
========== |
|||
|
|||
To get an assistance on this module contact us by email :arrow_right: help@itpp.dev |
|||
|
|||
Contributors |
|||
============ |
|||
* Ildar Nasyrov <Nasyrov@it-projects.info> |
|||
* Ivan Yelizariev <yelizariev@it-projects.info> |
|||
|
|||
Further information |
|||
=================== |
|||
|
|||
Odoo Apps Store: https://apps.odoo.com/apps/modules/9.0/mailgun/ |
|||
|
|||
|
|||
Tested on `Odoo 9.0 <https://github.com/odoo/odoo/commit/c8cd67c5d98b410cabe0a6efb3347a8a4de731d8>`_ |
@ -1,3 +0,0 @@ |
|||
# -*- coding: utf-8 -*- |
|||
from . import controllers |
|||
from . import models |
@ -1,13 +0,0 @@ |
|||
# -*- coding: utf-8 -*- |
|||
{ |
|||
'name': "Mailgun", |
|||
'author': "IT-Projects LLC, Ildar Nasyrov", |
|||
'license': 'LGPL-3', |
|||
'website': "https://twitter.com/nasyrov_ildar", |
|||
'category': 'Discuss', |
|||
'version': '1.1.0', |
|||
'depends': ['mail'], |
|||
'data': [ |
|||
'data/cron.xml', |
|||
], |
|||
} |
@ -1,2 +0,0 @@ |
|||
# -*- coding: utf-8 -*- |
|||
from . import main |
@ -1,17 +0,0 @@ |
|||
# -*- coding: utf-8 -*- |
|||
from openerp.addons.web import http |
|||
from openerp.addons.web.http import request |
|||
import re |
|||
|
|||
|
|||
class MailMailgun(http.Controller): |
|||
|
|||
@http.route('/mailgun/notify', auth='public', type='http', csrf=False) |
|||
def mailgun_notify(self, **kw): |
|||
# mailgun notification in json format |
|||
message_url = kw.get('message-url') |
|||
if not re.match('^https://[^/]*api.mailgun.net/', message_url): |
|||
# simple security check failed |
|||
raise Exception('wrong message-url') |
|||
request.env['mail.thread'].sudo().mailgun_fetch_message(message_url) |
|||
return 'ok' |
@ -1,14 +0,0 @@ |
|||
<?xml version="1.0" encoding="utf-8"?> |
|||
<openerp> |
|||
<data noupdate="1"> |
|||
<record id="mailgun_domain_verification" model="ir.cron"> |
|||
<field name="name">Mailgun - domain verification</field> |
|||
<field name='interval_number'>10</field> |
|||
<field name='interval_type'>minutes</field> |
|||
<field name="numbercall">288</field> |
|||
<field name="active">True</field> |
|||
<field name="model">ir.config_parameter</field> |
|||
<field name="function">mailgun_verify</field> |
|||
</record> |
|||
</data> |
|||
</openerp> |
@ -1,13 +0,0 @@ |
|||
Updates |
|||
======= |
|||
|
|||
`1.1.0` |
|||
------- |
|||
|
|||
- ADD: automatic domain verification |
|||
|
|||
------- |
|||
`1.0.0` |
|||
------- |
|||
|
|||
- Init version |
@ -1,56 +0,0 @@ |
|||
========= |
|||
Mailgun |
|||
========= |
|||
|
|||
Usage |
|||
===== |
|||
|
|||
* register or log in http://mailgun.com |
|||
* On https://mailgun.com/app/domains click on you domain, e.g. sandbox123...mailgun.org domain. Here you can see all information needed to configure odoo outgoing mail feature |
|||
|
|||
* if you in sandbox domain, add Authorized Recepient |
|||
* Copy API Key value into odoo |
|||
|
|||
* Open menu ``Settings / Parameters / System Parameters`` |
|||
* Create new parameter |
|||
|
|||
* key: ``mailgun.apikey`` |
|||
* Value: API Key from mailgun (``key-...``) |
|||
* click Save |
|||
|
|||
* Copy smtp credentials into odoo |
|||
|
|||
* open ``Settings / Technical / Email / Outgoing Mail Servers`` |
|||
|
|||
* delete localhost |
|||
* create new server |
|||
|
|||
* Description: ``mailgun`` |
|||
* SMTP Server: ``smtp.mailgun.org`` |
|||
* Connection Security: ``SSL/TLS`` |
|||
* Username: e.g. ``postmaster@sandbox123....mailgun.org`` |
|||
* Password: ``...`` (copy ``Default Password`` from mailgun) |
|||
|
|||
* From odoo menu ``Settings / General Settings`` edit Alias Domain |
|||
|
|||
* Put your mailgun domain here. E.g. sandbox123...mailgun.org |
|||
* Click 'Apply' button |
|||
|
|||
* From https://mailgun.com/cp/routes create new route |
|||
|
|||
* Priority: ``0`` |
|||
* Filter expression: ``catch_all()`` |
|||
* Actions: ``store(notify="http://<your odoo domain>/mailgun/notify")`` |
|||
|
|||
* Set admin's email alias. Open menu ``Settings / Users / Users`` |
|||
|
|||
* choose your user and click ``[Edit]`` |
|||
* On Preference tab put alias into Messaging Alias field and click ``[Save]``. E.g. ``admin@sandbox...mailgun.org`` |
|||
|
|||
* Via your favorite mail client (e.g. gmail.com) send email to ``admin@sandox...mailgun.org`` |
|||
* Open ``Discuss`` in odoo |
|||
* See your message there |
|||
* Reply to the message and check it in your mail client (e.g. gmail.com) |
|||
|
|||
|
|||
|
@ -1,36 +0,0 @@ |
|||
# -*- coding: utf-8 -*- |
|||
import requests |
|||
import simplejson |
|||
|
|||
from openerp import models, api |
|||
|
|||
|
|||
import logging |
|||
_logger = logging.getLogger(__name__) |
|||
|
|||
|
|||
class MailThread(models.AbstractModel): |
|||
_inherit = 'mail.thread' |
|||
|
|||
@api.model |
|||
def mailgun_fetch_message(self, message_url): |
|||
api_key = self.env['ir.config_parameter'].sudo().get_param('mailgun.apikey') |
|||
res = requests.get(message_url, headers={'Accept': 'message/rfc2822'}, auth=('api', api_key), verify=False) |
|||
self.message_process(False, res.json().get('body-mime')) |
|||
|
|||
|
|||
class IrConfigParameter(models.Model): |
|||
_inherit = ['ir.config_parameter'] |
|||
|
|||
@api.model |
|||
def mailgun_verify(self): |
|||
verified = self.get_param('mailgun.verified') |
|||
if verified: |
|||
return |
|||
api_key = self.get_param('mailgun.apikey') |
|||
mail_domain = self.get_param('mail.catchall.domain') |
|||
if api_key and mail_domain: |
|||
url = "https://api.mailgun.net/v3/domains/%s/verify" % mail_domain |
|||
res = requests.put(url, auth=("api", api_key)) |
|||
if res.status_code == 200 and simplejson.loads(res.text)["domain"]["state"] == "active": |
|||
self.set_param('mailgun.verified', '1') |
Write
Preview
Loading…
Cancel
Save
Reference in new issue