Handle bounces using bounce alias directly in mailgateway. Previously bounces were used only in mass mailing to update campaign statistics. Now the mailgateway tries to find data from standard delivery status emails. This data is used to update state of emails sent to customers, to display it in the Chatter. It is also used to increment the message_bounce counter on the bounced partner and bounced record, if any and if the field exists. Previous more generic code that detect bounces is kept. This code is more specific to standard delivery failure notifications by parsing its content.
155 lines
6.5 KiB
XML
155 lines
6.5 KiB
XML
<?xml version="1.0" encoding="utf-8"?>
|
|
<odoo>
|
|
<data noupdate="1">
|
|
<record forcecreate="True" id="ir_cron_mail_scheduler_action" model="ir.cron">
|
|
<field name="name">Email Queue Manager</field>
|
|
<field name="user_id" ref="base.user_root"/>
|
|
<field name="interval_number">1</field>
|
|
<field name="interval_type">hours</field>
|
|
<field name="numbercall">-1</field>
|
|
<field eval="False" name="doall"/>
|
|
<field eval="'mail.mail'" name="model"/>
|
|
<field eval="'process_email_queue'" name="function"/>
|
|
<field eval="'()'" name="args"/>
|
|
</record>
|
|
|
|
<record id="ir_cron_module_update_notification" model="ir.cron">
|
|
<field name="name">Update Notification</field>
|
|
<field eval="True" name="active" />
|
|
<field name="user_id" ref="base.user_root" />
|
|
<field name="interval_number">1</field>
|
|
<field name="interval_type">weeks</field>
|
|
<field name="numbercall">-1</field>
|
|
<field name="nextcall" eval="(DateTime.now() + timedelta(days=7)).strftime('%Y-%m-%d %H:%M:%S')" />
|
|
<field eval="False" name="doall" />
|
|
<field eval="'publisher_warranty.contract'" name="model" />
|
|
<field eval="'update_notification'" name="function" />
|
|
<field eval="'(None,)'" name="args" />
|
|
<field name="priority">1000</field>
|
|
</record>
|
|
|
|
<!-- Admin should not receivve emails at creation -->
|
|
<record id="base.partner_root" model="res.partner">
|
|
<field name="notify_email">none</field>
|
|
</record>
|
|
|
|
<!-- Catchall Email Alias -->
|
|
<record id="icp_mail_catchall_alias" model="ir.config_parameter">
|
|
<field name="key">mail.catchall.alias</field>
|
|
<field name="value">catchall</field>
|
|
</record>
|
|
|
|
<!-- Bounce Email Alias -->
|
|
<record id="icp_mail_bounce_alias" model="ir.config_parameter">
|
|
<field name="key">mail.bounce.alias</field>
|
|
<field name="value">bounce</field>
|
|
</record>
|
|
|
|
<!-- Discussion subtype for messaging / Chatter -->
|
|
<record id="mt_comment" model="mail.message.subtype">
|
|
<field name="name">Discussions</field>
|
|
<field name="sequence" eval="0"/>
|
|
</record>
|
|
<record id="mt_note" model="mail.message.subtype">
|
|
<field name="name">Note</field>
|
|
<field name="default" eval="False"/>
|
|
<field name="internal" eval="True"/>
|
|
<field name="sequence" eval="100"/>
|
|
</record>
|
|
|
|
</data>
|
|
<data>
|
|
<!--Default Notification Email template -->
|
|
<record id="mail_template_data_notification_email_default" model="mail.template">
|
|
<field name="name">Notification Email</field>
|
|
<field name="subject">${object.subject or (object.record_name and 'Re: %s' % object.record_name) or (object.parent_id and object.parent_id.subject and 'Re: %s' % object.parent_id.subject) or (object.parent_id and object.parent_id.record_name and 'Re: %s' % object.parent_id.record_name)}</field>
|
|
<field name="model_id" ref="mail.model_mail_message"/>
|
|
<field name="auto_delete" eval="True"/>
|
|
<field name="body_html"><![CDATA[
|
|
<div>
|
|
% if ctx.get('button_access'):
|
|
<div itemscope itemtype="http://schema.org/EmailMessage">
|
|
<div itemprop="potentialAction" itemscope itemtype="http://schema.org/ViewAction">
|
|
<link itemprop="target" href="${ctx['button_access']['url']}"/>
|
|
<link itemprop="url" href="${ctx['button_access']['url']}"/>
|
|
<meta itemprop="name" content="View ${ctx['model_name']}"/>
|
|
</div>
|
|
</div>
|
|
% endif
|
|
% if not ctx['is_discussion'] or not len(ctx['actions']) == 0 or ctx.get('button_access') or ctx.get('is_accessible'):
|
|
<div summary="o_mail_notification">
|
|
<table cellspacing="0" cellpadding="0" border="0" style="width: 100%; margin-top: 5px;">
|
|
<tbody><tr>
|
|
<td valign="center">
|
|
% if ctx.get('button_access') or ctx.get('button_follow') or ctx.get('button_unfollow'):
|
|
<a href="${ctx['button_access']['url']}" style="padding: 8px 12px; font-size: 12px; text-decoration: none; color: #FFFFFF; text-decoration:none !important; font-weight: 400; background-color: #a24689; border: 0px solid #a24689; border-radius:3px">${ctx['button_access']['title']}</a>
|
|
% endif
|
|
|
|
% if ctx.get('button_follow'):
|
|
% if ctx.get('actions'):
|
|
|
|
|
% endif
|
|
<a href="${ctx['button_follow']['url']}" style="text-decoration:none; color: #a24689; text-decoration:none !important;">${ctx['button_follow']['title']}</a>
|
|
% elif ctx.get('button_unfollow'):
|
|
% if ctx.get('actions'):
|
|
|
|
|
% endif
|
|
<a href="${ctx['button_unfollow']['url']}" style="text-decoration:none; color: #a24689; text-decoration:none !important;">${ctx['button_unfollow']['title']}</a>
|
|
% endif
|
|
|
|
% if ctx.get('actions'):
|
|
% for action in ctx['actions']:
|
|
|
|
|
<a href="${action['url']}" style="text-decoration:none; color: #a24689; text-decoration:none !important;">${action['title']}</a>
|
|
% endfor
|
|
% endif
|
|
</td>
|
|
<td valign="center" align="right">
|
|
<img src="/logo.png" style="padding: 0px; margin: 0px; height: auto; width: 80px;" alt="${user.company_id.name}">
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td colspan="2" style="text-align:center;">
|
|
<hr width="100%"
|
|
style="background-color:rgb(204,204,204);border:medium none;clear:both;display:block;font-size:0px;min-height:1px;line-height:0; margin:10px 0;">
|
|
% if ctx.get('subtype') and ctx.get('subtype').internal:
|
|
<span style="background-color: #f2dede; padding: 5px;">
|
|
<strong>Internal note</strong>: replies are not sent to followers.
|
|
</span>
|
|
% endif
|
|
</td>
|
|
</tr>
|
|
</tbody></table>
|
|
</div>
|
|
% endif
|
|
${object.body | safe}
|
|
% if ctx.get('tracking'):
|
|
<ul>
|
|
% for tracking in ctx['tracking']
|
|
<li>${tracking[0]} : ${tracking[1]} -> ${tracking[2]}</li>
|
|
% endfor
|
|
</ul>
|
|
% endif
|
|
|
|
% if ctx.get('signature'):
|
|
${ctx['signature'] | safe}
|
|
% endif
|
|
<br/>
|
|
<p style="color: #555555;">
|
|
Sent by
|
|
% if ctx.get('website_url'):
|
|
<a href="${ctx['website_url']}" style="text-decoration:none; color: #a24689;">
|
|
% endif
|
|
${ctx.get('company_name')}
|
|
% if ctx.get('website_url'):
|
|
</a>
|
|
% endif
|
|
using
|
|
<a href="https://www.odoo.com" style="text-decoration:none; color: #a24689;">Odoo</a>.
|
|
</p>
|
|
</div>]]></field>
|
|
</record>
|
|
|
|
</data>
|
|
</odoo>
|