Browse Source

Merge pull request #360 from yelizariev/9.0-exodus-19-delete

commit is created by 👷‍♂️ Merge Bot: https://odoo-devops.readthedocs.io/en/latest/git/github-merge-bot.html
pull/367/head
Mitchell Admin 3 years ago
committed by GitHub
parent
commit
895c3f7762
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 35
      mailgun/README.rst
  2. 3
      mailgun/__init__.py
  3. 13
      mailgun/__openerp__.py
  4. 2
      mailgun/controllers/__init__.py
  5. 17
      mailgun/controllers/main.py
  6. 14
      mailgun/data/cron.xml
  7. 13
      mailgun/doc/changelog.rst
  8. 56
      mailgun/doc/index.rst
  9. 36
      mailgun/models.py

35
mailgun/README.rst

@ -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>`_

3
mailgun/__init__.py

@ -1,3 +0,0 @@
# -*- coding: utf-8 -*-
from . import controllers
from . import models

13
mailgun/__openerp__.py

@ -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',
],
}

2
mailgun/controllers/__init__.py

@ -1,2 +0,0 @@
# -*- coding: utf-8 -*-
from . import main

17
mailgun/controllers/main.py

@ -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'

14
mailgun/data/cron.xml

@ -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>

13
mailgun/doc/changelog.rst

@ -1,13 +0,0 @@
Updates
=======
`1.1.0`
-------
- ADD: automatic domain verification
-------
`1.0.0`
-------
- Init version

56
mailgun/doc/index.rst

@ -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)

36
mailgun/models.py

@ -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')
Loading…
Cancel
Save