Browse Source

Exodus of mailgun

pull/361/head
Ivan Yelizariev 3 years ago
parent
commit
614c30e9c6
No known key found for this signature in database GPG Key ID: 5C35763D5E7BFD67
  1. 35
      mailgun/README.rst
  2. 3
      mailgun/__init__.py
  3. 12
      mailgun/__manifest__.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. 53
      mailgun/doc/index.rst
  9. 30
      mailgun/i18n/es.po
  10. 25
      mailgun/i18n/mailgun.pot
  11. 47
      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

12
mailgun/__manifest__.py

@ -1,12 +0,0 @@
# -*- coding: utf-8 -*-
{
"name": "Mailgun",
"author": "IT-Projects LLC, Ildar Nasyrov",
"license": "Other OSI approved licence", # MIT
"support": "apps@itpp.dev",
"website": "https://twitter.com/nasyrov_ildar",
"category": "Discuss",
"version": "10.0.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 -*-
import re
from odoo import http
from odoo.http import request
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

53
mailgun/doc/index.rst

@ -1,53 +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)

30
mailgun/i18n/es.po

@ -1,30 +0,0 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * mailgun
#
# Translators:
# Randall Castro <rcastro@treintaycinco.com>, 2018
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 10.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-12-19 16:49+0000\n"
"PO-Revision-Date: 2017-12-19 16:49+0000\n"
"Last-Translator: Randall Castro <rcastro@treintaycinco.com>, 2018\n"
"Language-Team: Spanish (https://www.transifex.com/it-projects-llc/"
"teams/76080/es/)\n"
"Language: es\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#. module: mailgun
#: model:ir.model,name:mailgun.model_mail_thread
msgid "Email Thread"
msgstr "Hilo de correo electrónico"
#. module: mailgun
#: model:ir.model,name:mailgun.model_ir_config_parameter
msgid "ir.config_parameter"
msgstr "ir.config_parameter"

25
mailgun/i18n/mailgun.pot

@ -1,25 +0,0 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * mailgun
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 10.0\n"
"Report-Msgid-Bugs-To: \n"
"Last-Translator: <>\n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: \n"
#. module: mailgun
#: model:ir.model,name:mailgun.model_mail_thread
msgid "Email Thread"
msgstr ""
#. module: mailgun
#: model:ir.model,name:mailgun.model_ir_config_parameter
msgid "ir.config_parameter"
msgstr ""

47
mailgun/models.py

@ -1,47 +0,0 @@
# -*- coding: utf-8 -*-
import logging
import requests
from openerp import api, models
try:
import simplejson as json
except ImportError:
import json
_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 json.loads(res.text)["domain"]["state"] == "active"
):
self.set_param("mailgun.verified", "1")
Loading…
Cancel
Save