Browse Source

1️⃣2️⃣⬆️ mailgun porting + updates (#148)

pull/153/head
Ildar 7 years ago
committed by Ivan Yelizariev
parent
commit
062d8b6b6d
  1. 31
      mailgun/README.rst
  2. 48
      mailgun/__manifest__.py
  3. 14
      mailgun/__openerp__.py
  4. 14
      mailgun/data/cron.xml
  5. 15
      mailgun/data/ir_cron_data.xml
  6. 3
      mailgun/doc/changelog.rst
  7. 111
      mailgun/doc/index.rst
  8. BIN
      mailgun/images/mailgun_main.png
  9. 35
      mailgun/models.py
  10. 4
      mailgun/models/__init__.py
  11. 25
      mailgun/models/ir_config_parameter.py
  12. 18
      mailgun/models/mail_thread.py
  13. BIN
      mailgun/static/description/icon.png
  14. 332
      mailgun/static/description/index.html
  15. BIN
      mailgun/static/description/mailgun_add_domain.png
  16. BIN
      mailgun/static/description/mailgun_auth_recipients.png
  17. BIN
      mailgun/static/description/mailgun_auth_recipients_form.png
  18. BIN
      mailgun/static/description/mailgun_domain_details.png
  19. BIN
      mailgun/static/description/mailgun_odoo_general.png
  20. BIN
      mailgun/static/description/mailgun_odoo_mail_alias.png
  21. BIN
      mailgun/static/description/mailgun_odoo_outgoing.png
  22. BIN
      mailgun/static/description/mailgun_odoo_partner_email.png
  23. BIN
      mailgun/static/description/mailgun_odoo_sys_param.png
  24. BIN
      mailgun/static/description/mailgun_route.png
  25. BIN
      mailgun/static/description/mailgun_route_form.png

31
mailgun/README.rst

@ -1,11 +1,14 @@
.. image:: https://img.shields.io/badge/license-LGPL--3-blue.png
:target: https://www.gnu.org/licenses/lgpl
:alt: License: LGPL-3
=========
Mailgun
=========
With this module you can receive incoming messages from mailgun.
The module allows to receive incoming messages or send them to clients who uses external mail services (e.g. gmail.com) by using 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.
That is why we need this module. It fetches messages from mailgun using their API and stores them in odoo.
TODO
====
@ -24,13 +27,27 @@ Sponsors
--------
* `IT-Projects LLC <https://it-projects.info>`__
Maintainers
-----------
* `IT-Projects LLC <https://it-projects.info>`__
To get a guaranteed support you are kindly requested to purchase the module at `odoo apps store <https://apps.odoo.com/apps/modules/11.0/mailgun/>`__.
Thank you for understanding!
`IT-Projects Team <https://www.it-projects.info/team>`__
Further information
===================
HTML Description: https://apps.odoo.com/apps/modules/9.0/mailgun/
Demo: http://runbot.it-projects.info/demo/mail-addons/11.0
HTML Description: https://apps.odoo.com/apps/modules/11.0/mailgun/
Usage instructions: `<doc/index.rst>`_
Usage instructions: `<doc/index.rst>`__
Changelog: `<doc/changelog.rst>`_
Changelog: `<doc/changelog.rst>`__
Notifications on updates: `via Atom <https://github.com/it-projects-llc/mail-addons/commits/11.0/mailgun.atom>`_, `by Email <https://blogtrottr.com/?subscribe=https://github.com/it-projects-llc/mail-addons/commits/11.0/malgun.atom>`_
Tested on Odoo 9.0 c8cd67c5d98b410cabe0a6efb3347a8a4de731d8
Tested on Odoo 11.0 dc61861f90d15797b19f8ebddfb0c8a66d0afa88

48
mailgun/__manifest__.py

@ -0,0 +1,48 @@
# -*- coding: utf-8 -*-
# Copyright 2018 Ildar Nasyrov <https://it-projects.info/team/iledarn>
# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl.html).
{
"name": """Mailgun""",
"summary": """Setup the outgoing and incoming mail flow easily by using Mailgun""",
"category": "Discuss",
"live_test_url": "http://apps.it-projects.info/shop/product/mailgun?version=11.0",
"images": ["images/mailgun_main.png"],
"version": "11.0.1.1.0",
"application": False,
"author": "IT-Projects LLC, Ildar Nasyrov",
"support": "apps@it-projects.info",
"website": "https://it-projects.info/team/iledarn",
"license": "LGPL-3",
"price": 389.00,
"currency": "EUR",
"depends": [
"mail",
],
"external_dependencies": {"python": [], "bin": []},
"data": [
'data/ir_cron_data.xml',
],
"demo": [
],
"qweb": [
],
"post_load": None,
"pre_init_hook": None,
"post_init_hook": None,
"uninstall_hook": None,
"auto_install": False,
"installable": True,
"demo_title": "Mailgun",
"demo_addons": [],
"demo_addons_hidden": [],
"demo_url": "mailgun",
"demo_summary": "Easy to send outgoing and fetch incoming messages by using Mailgun",
"demo_images": [
"images/mailgun_main.png",
]
}

14
mailgun/__openerp__.py

@ -1,14 +0,0 @@
{
'name': "Mailgun",
'author': "IT-Projects LLC, Ildar Nasyrov",
'license': 'LGPL-3',
"support": "apps@it-projects.info",
'website': "https://twitter.com/nasyrov_ildar",
'category': 'Discuss',
'version': '1.1.0',
'depends': ['mail'],
'data': [
'data/cron.xml',
],
'installable': False
}

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>

15
mailgun/data/ir_cron_data.xml

@ -0,0 +1,15 @@
<?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 request</field>
<field name="model_id" ref="model_ir_config_parameter"/>
<field name="interval_number">10</field>
<field name="interval_type">minutes</field>
<field name="numbercall">10</field>
<field name="state">code</field>
<field name="code">model.mailgun_verify()</field>
<field name="doall" eval="True"/>
</record>
</data>
</openerp>

3
mailgun/doc/changelog.rst

@ -1,6 +1,3 @@
Updates
=======
`1.1.0`
-------

111
mailgun/doc/index.rst

@ -2,55 +2,92 @@
Mailgun
=========
Usage
=====
Installation
============
* `Install <https://odoo-development.readthedocs.io/en/latest/odoo/usage/install-module.html>`__ this module in a usual way
Configuration
=============
Mailgun-side
------------
* 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
* Open menu ``[[ Domains ]]`` and click on your domain, e.g. ``sandbox123*****.mailgun.org`` domain. Here you can see all the information needed to configure odoo outgoing mail feature
* Please note that state of your domain should be ``Active`` before you can use it. If it is ``Unverified``, verify it first using Mailgun FAQ - `How do I verify my domain <https://help.mailgun.com/hc/en-us/articles/202052074-How-do-I-verify-my-domain->`__
* if you are using your sandbox domain, add Authorized Recipient first (Sandbox domains are restricted to `authorized recipients <https://help.mailgun.com/hc/en-us/articles/217531258>`__ only)
* create new Route
* 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 menu ``[[ Routes ]]``
* Click ``[Create Route]`` button
* **Expression Type** - ``Custom``
* **Raw Expression** - ``match_recipient('.*@<your mail domain>')``
* **Actions** - ``Store and notify``, ``http://<your odoo domain>/mailgun/notify``
* open ``Settings / Technical / Email / Outgoing Mail Servers``
Odoo-side
---------
* delete localhost
* create new server
* `Activate Developer Mode <https://odoo-development.readthedocs.io/en/latest/odoo/usage/debug-mode.html>`__
* Configure **Outgoung mail 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)
* Open menu ``[[ Settings ]] >> Technical >> Email >> Outgoing Mail Servers``
* Edit ``localhost`` record or create new one with the following:
* From odoo menu ``Settings / General Settings`` edit Alias Domain
* Put your mailgun domain here. E.g. sandbox123...mailgun.org
* Click 'Apply' button
* **Description** - ``Mailgun``
* **SMTP Server** - take from Mailgun **SMTP Hostname** (usually, it is ``smtp.mailgun.org``)
* **Connection Security** - ``SSL/TLS``
* **Username** - take from Mailgun **Default SMTP Login**
* **Password** - take from Mailgun **Default Password**
* Click ``[Test Connection]`` button to check the connection and then ``[Save]``
* From https://mailgun.com/cp/routes create new route
* Configure **Incoming mail feature**
* Priority: ``0``
* Filter expression: ``catch_all()``
* Actions: ``store(notify="http://<your odoo domain>/mailgun/notify")``
* Configure catchall domain
* Set admin's email alias. Open menu ``Settings / Users / Users``
* Open menu ``Settings / General Settings``, check **External Email Servers** and edit **Alias Domain** - set it from Mailgun **Domain Name**
* Click ``[Save]`` button
* choose your user and click ``[Edit]``
* On Preference tab put alias into Messaging Alias field and click ``[Save]``. E.g. ``admin@sandbox...mailgun.org``
* Set Mailgun API credentials
* Open menu ``[[ Settings ]] >> Parameters >> System Parameters``
* Create new parameter
* key: ``mailgun.apikey``
* Value: API Key from mailgun (``key-...``)
* Click ``[Save]`` button
* Configure mail aliases and emails for users
* Open menu ``[[ Settings ]] >> Users >> Users``
* Select the ``Administrator`` user (for example, you should configure all your users the same way but using different aliases) and click ``[Edit]``
* On Preference tab edit **Alias** field - create new mail alias, e.g. ``admin@<you mail domain>`` with the following settings
* **Alias Name** - ``admin``
* **Aliased Model** - ``Users``
* **Record Thread ID** - ``1``
* **Default Values** - ``{}``
* **Alias Contact** - ``Everyone``
* **Security Owner** - ``Administrator``
* **Parent Model** - Not set
* **Parent Record Thread ID** - ``0``
* Open user's **Related Partner** and edit **Email** field - usually it should be the same as mail alias name (``admin@<you mailgun domain`` for ``Administrator``) - this would be an address for replying user's messages
Usage
=====
* 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)
Outgoing
--------
* Open menu ``[[ Settings ]]>> Email >> Emails`` to create a message
* Click ``[Send Now]`` button
* RESULT: receive the message in your mail client (e.g. on gmail.com)
Incoming
--------
* Create new message from your mail client to e.g. ``admin@<you mailgun domain>``
* Open menu ``[[ Discuss ]]`` in Odoo
* RESULT: See your message there

BIN
mailgun/images/mailgun_main.png

After

Width: 750  |  Height: 371  |  Size: 384 KiB

35
mailgun/models.py

@ -1,35 +0,0 @@
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')

4
mailgun/models/__init__.py

@ -0,0 +1,4 @@
# -*- coding: utf-8 -*-
from . import mail_thread
from . import ir_config_parameter

25
mailgun/models/ir_config_parameter.py

@ -0,0 +1,25 @@
# -*- coding: utf-8 -*-
import requests
import simplejson
from openerp import models, api
import logging
_logger = logging.getLogger(__name__)
class IrConfigParameter(models.Model):
_inherit = ['ir.config_parameter']
@api.model
def mailgun_verify(self):
verified = self.sudo().get_param('mailgun.verified')
if verified:
return
api_key = self.sudo().get_param('mailgun.apikey')
mail_domain = self.sudo().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.sudo().set_param('mailgun.verified', '1')

18
mailgun/models/mail_thread.py

@ -0,0 +1,18 @@
# -*- coding: utf-8 -*-
import requests
from odoo 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'))

BIN
mailgun/static/description/icon.png

After

Width: 100  |  Height: 100  |  Size: 2.1 KiB

332
mailgun/static/description/index.html

@ -0,0 +1,332 @@
<section class="oe_container">
<div class="oe_row oe_spaced">
<div class="oe_span12">
<h2 class="oe_slogan" style="color:#875A7B;">Mailgun</h2>
<h3 class="oe_slogan">Easy to setup the outgoing and incoming mail flow</h3>
</div>
</div>
</section>
<section class="oe_container">
<div class="oe_row oe_spaced">
<div class="oe_span12">
<p class="oe_mt32">
<div class="alert alert-success" style="padding:0.3em 0.6em; font-size: 150%;">
The module provides Odoo and Mailgun integration to be able to easily configure <em>Outgoing</em> and <em>Incoming</em> mail flow.
<div style="margin-top:2%;">
From Mailgun side you get:
<ul style="padding-left: 1.6em;">
<li style="margin-top: 0.3em;">
Powerful Sending Infrastructure
</li>
<li>
Intelligent Inbound Routing &amp; Storage
</li>
<li>
Tracking and Analytics
</li>
<li>
Email Validation
</li>
</ul>
</div>
</div>
</p>
</div>
</div>
</section>
<section class="oe_container oe_dark">
<div class="oe_row oe_spaced">
<h3 class="oe_slogan">Mailgun Configuration</h3>
<h4 class="oe_slogan"><b>Manage Domains</b></h4>
<div class="oe_span12">
<p class="oe_mt32">
<font style="font-size: 120%;">
<ul style="padding-left: 1.4em;">
<li>
Create account on <a href="https://mailgun.com" target="_blank">Mailgun</a> service
</li>
<li>
Add domain in <b>Domains</b> menu
</li>
</ul>
Note that the state of your domain should be <b>Active</b> to be able to use it from Odoo side. To verify it follow the instruction <a href="https://help.mailgun.com/hc/en-us/articles/202052074-How-do-I-verify-my-domain-" target="_blank">How do I verify my domain</a>
</font>
</p>
</div>
<div class="oe_screenshot" align="center">
<img style="max-width: 80%" src="mailgun_add_domain.png"/>
</div>
</div>
</section>
<section class="oe_container">
<div class="oe_row oe_spaced">
<div class="oe_span12 text-center">
<p class="oe_mt32">
<font style="font-size: 120%;">
Click on added domain name and see all the information needed to configure your <em>Incoming</em> and <em>Outgoing</em> mail feature.
</font>
</p>
</div>
<div class="oe_screenshot" align="center">
<img style="max-width: 80%" src="mailgun_domain_details.png"/>
</div>
</div>
</section>
<section class="oe_container oe_dark">
<div class="oe_row oe_spaced">
<div class="oe_span12 text-center">
<p class="oe_mt32">
<font style="font-size: 120%;">
If you use sandbox domain, add <b>Authorized Recipient</b> first (sandbox domains are restricted to <a href="https://help.mailgun.com/hc/en-us/articles/217531258" target="_blank">authorized recipients</a>)
</font>
</p>
</div>
<div class="oe_screenshot" align="center">
<img style="max-width: 80%" src="mailgun_auth_recipients.png"/>
</div>
<br/>
<div class="oe_screenshot" align="center">
<img style="max-width: 80%" src="mailgun_auth_recipients_form.png"/>
</div>
</div>
</section>
<section class="oe_container">
<div class="oe_row oe_spaced" style="margin-top: 5em;">
<h4 class="oe_slogan"><b>Routes</b></h4>
<div class="oe_span12 text-center">
<p class="oe_mt32">
<font style="font-size: 120%;">
Navigate to <b>Routes</b> menu and create a new route
</font>
</p>
</div>
<div class="oe_screenshot" align="center">
<img style="max-width: 80%" src="mailgun_route.png"/>
</div>
</div>
</section>
<section class="oe_container oe_dark">
<div class="oe_row oe_spaced">
<div class="oe_span12">
<p class="oe_mt32">
<font style="font-size: 120%;">
Set the following fields and values:
<ul>
<li>
<b>Expression Type</b>: Custom
</li>
<li>
<b>Raw Expression</b>: match_recipient('.*@your_mail_domain')
</li>
<li>
<b>Actions</b>:
<ul>
<li>
Check the box <em>Store and notify</em>
</li>
<li>
Put there http://your_odoo_domain/mailgun/notify
</li>
</li>
</ul>
</font>
</p>
</div>
<div class="oe_screenshot" align="center">
<img style="max-width: 80%" src="mailgun_route_form.png"/>
</div>
<div class="oe_span12 text-center">
<p class="oe_mt32">
<font style="font-size: 120%;">
<b>Now everything is ready to move to Odoo configuration.</b>
</font>
</p>
</div>
</div>
</section>
<section class="oe_container">
<div class="oe_row oe_spaced" style="margin-top: 6em;">
<h3 class="oe_slogan">Odoo Configuration</h3>
<h4 class="oe_slogan"><b>Outgoing Mail Feature</b></h4>
<div class="oe_span12">
<p class="oe_mt32">
<font style="font-size: 120%;">
At first, activate <a href="https://odoo-development.readthedocs.io/en/latest/odoo/usage/debug-mode.html" target="_blank">the developer mode</a>. Then go to <em>Settings &rarr; Technical &rarr; Email &rarr; Outgoing Mail Servers</em> menu and populate the following fields:
<ul>
<li>
<b>Description</b> - e.g. Mailgun
</li>
<li>
<b>SMTP Server</b> - smtp.mailgun.org
</li>
<li>
<b>Connection Security</b> - SSL/TLS
</li>
<li>
<b>Username</b> - use <em>Default SMTP Login</em> from mailgun
</li>
<li>
<b>Password</b> - use <em>Default Password</em> from mailgun
</li>
</ul>
Once the fields are populated, click <b>Test Connection</b> button to check the connection to smtp server. If everything is ok, you can see popup message <em>Connection Test Succeeded! Everything seems properly set up!</em> and you are able to send messages now.
</font>
</p>
</div>
<div class="oe_screenshot" align="center">
<img style="max-width: 80%" src="mailgun_odoo_outgoing.png"/>
</div>
</div>
</section>
<section class="oe_container oe_dark">
<div class="oe_row oe_spaced">
<h4 class="oe_slogan"><b>Incoming Mail Feature</b></h4>
<div class="oe_span12">
<p class="oe_mt32">
<font style="font-size: 120%;">
Note that to setup incoming mailing, it is not required to setup <em>Incoming Mail Server</em>.
<br/>
Open <em>Settings &rarr; General Settings</em> menu:
<ul>
<li>
Check the box <b>External Email Servers</b>
</li>
<li>
Set as <b>Alias Domain</b> the domain name from Mailgun
</li>
</ul>
Save the changes.
</font>
</p>
</div>
<div class="oe_screenshot" align="center">
<img style="max-width: 80%" src="mailgun_odoo_general.png"/>
</div>
</div>
</section>
<section class="oe_container">
<div class="oe_row oe_spaced">
<div class="oe_span12">
<p class="oe_mt32">
<font style="font-size: 120%;">
Setup mailgun API credentials in <em>Settings &rarr; Parameters &rarr; System Parameters</em> menu. Create new parameter:
<ul>
<li>
<b>Key</b> - mailgun.apikey
</li>
<li>
<b>Value</b> - key-12345...
</li>
</ul>
</font>
</p>
</div>
<div class="oe_screenshot" align="center">
<img style="max-width: 80%" src="mailgun_odoo_sys_param.png"/>
</div>
</div>
</section>
<section class="oe_container oe_dark">
<div class="oe_row oe_spaced">
<div class="oe_span12 text-center">
<p class="oe_mt32">
<font style="font-size: 120%;">
Now you can configure mail aliases for users. Go to <em>Settings &rarr; Users</em> menu and open user form (e.g. for Administrator). Then switch to <em>Preferences</em> tab and select an existing alias or create new one in the <b>Alias</b> field.
</font>
</p>
</div>
<div class="oe_screenshot" align="center">
<img style="max-width: 80%" src="mailgun_odoo_mail_alias.png"/>
</div>
</div>
</section>
<section class="oe_container">
<div class="oe_row oe_spaced">
<div class="oe_span12 text-center">
<p class="oe_mt32">
<font style="font-size: 120%;">
Open the user's related partner and set <b>Email</b> - the email is used for replying on user messages
</font>
</p>
</div>
<div class="oe_screenshot" align="center">
<img style="max-width: 80%" src="mailgun_odoo_partner_email.png"/>
</div>
</div>
</section>
<section class="oe_container oe_dark">
<div class="oe_row oe_spaced">
<div class="oe_span12 text-center">
<p class="oe_mt32">
<font style="font-size: 120%;">
<b>
Everything is done! It's time to send/receive email messages now!
</b>
</font>
</p>
</div>
</div>
</section>
<section class="oe_container">
<div class="oe_row oe_spaced">
<div class="oe_span8">
<h2>Need our service?</h2>
<p class="oe_mt32">Contact us by <a href="mailto:apps@it-projects.info">email</a> or fill out <a href="https://www.it-projects.info/page/website.contactus " target="_blank">request form</a></p>
<ul>
<li><a href="mailto:apps@it-projects.info">apps@it-projects.info <i class="fa fa-envelope-o"></i></a></li>
<li><a href="https://www.it-projects.info/page/website.contactus " target="_blank">https://www.it-projects.info/page/website.contactus <i class="fa fa-list-alt"></i></a></li>
</ul>
</div>
<div class="oe_span4">
<div class="stamp" style="width:200px;">
<div style="margin-top: 15px;
position: relative;
font-family:'Vollkorn', serif;
font-size: 16px;
line-height: 25px;
text-transform: uppercase;
font-weight: bold;
color: #75526b;
border: 3px dashed #75526b;
float: left;
padding: 4px 12px;
-webkit-transform: rotate(6deg);
-o-transform: rotate(6deg);
-moz-transform: rotate(6deg);
-ms-transform: rotate(6deg);">
Tested on Odoo<br/>11.0 community
</div>
<div style="margin-top: 15px;
position: relative;
font-family:'Vollkorn', serif;
font-size: 16px;
line-height: 25px;
text-transform: uppercase;
font-weight: bold;
color: #75526b;
border: 3px dashed #75526b;
float: left;
padding: 4px 12px;
-webkit-transform: rotate(-7deg);
-o-transform: rotate(-7deg);
-moz-transform: rotate(-7deg);
-ms-transform: rotate(-7deg);">
Tested on Odoo<br/>11.0 enterprise
</div>
</div>
</div>
</div>
</section>

BIN
mailgun/static/description/mailgun_add_domain.png

After

Width: 1196  |  Height: 509  |  Size: 133 KiB

BIN
mailgun/static/description/mailgun_auth_recipients.png

After

Width: 1135  |  Height: 916  |  Size: 150 KiB

BIN
mailgun/static/description/mailgun_auth_recipients_form.png

After

Width: 1079  |  Height: 443  |  Size: 68 KiB

BIN
mailgun/static/description/mailgun_domain_details.png

After

Width: 1209  |  Height: 916  |  Size: 135 KiB

BIN
mailgun/static/description/mailgun_odoo_general.png

After

Width: 1257  |  Height: 681  |  Size: 112 KiB

BIN
mailgun/static/description/mailgun_odoo_mail_alias.png

After

Width: 1192  |  Height: 647  |  Size: 113 KiB

BIN
mailgun/static/description/mailgun_odoo_outgoing.png

After

Width: 1186  |  Height: 671  |  Size: 114 KiB

BIN
mailgun/static/description/mailgun_odoo_partner_email.png

After

Width: 969  |  Height: 653  |  Size: 83 KiB

BIN
mailgun/static/description/mailgun_odoo_sys_param.png

After

Width: 1192  |  Height: 647  |  Size: 108 KiB

BIN
mailgun/static/description/mailgun_route.png

After

Width: 1179  |  Height: 921  |  Size: 287 KiB

BIN
mailgun/static/description/mailgun_route_form.png

After

Width: 1179  |  Height: 921  |  Size: 201 KiB

Loading…
Cancel
Save