first commit

This commit is contained in:
root
2026-03-14 09:42:12 +00:00
commit 0adbd20c2c
10991 changed files with 1646955 additions and 0 deletions

View File

@@ -0,0 +1,6 @@
# This file is part of Tryton. The COPYRIGHT file at the top level of
# this repository contains the full copyright notices and license terms.
from . import routes
__all__ = [routes]

View File

@@ -0,0 +1,322 @@
# This file is part of Tryton. The COPYRIGHT file at the top level of
# this repository contains the full copyright notices and license terms.
import base64
import email
import json
import re
import urllib
import uuid
from email.policy import default as email_policy_default
from email.utils import getaddresses
from functools import partial
import trytond.config as config
from trytond.model import (
ModelSQL, ModelStorage, ModelView, fields, sequence_ordered)
from trytond.pool import Pool
from trytond.pyson import Eval
from trytond.transaction import Transaction
from trytond.url import http_host
if config.getboolean('inbound_email', 'filestore', default=True):
file_id = 'data_id'
store_prefix = config.get('inbound_email', 'store_prefix', default=None)
else:
file_id = store_prefix = None
class Inbox(ModelSQL, ModelView):
__name__ = 'inbound.email.inbox'
name = fields.Char("Name", required=True)
identifier = fields.Char("Identifier", readonly=True)
endpoint = fields.Function(
fields.Char(
"Endpoint",
help="The URL where the emails must be posted."),
'on_change_with_endpoint')
rules = fields.One2Many(
'inbound.email.rule', 'inbox', "Rules",
help="The action of the first matching line is run.")
@classmethod
def __setup__(cls):
super().__setup__()
cls._buttons.update(
new_identifier={
'icon': 'tryton-refresh',
},
)
@fields.depends('identifier')
def on_change_with_endpoint(self, name=None):
if self.identifier:
url_part = {
'identifier': self.identifier,
'database_name': Transaction().database.name,
}
return http_host() + (
urllib.parse.quote(
'/%(database_name)s/inbound_email/inbox/%(identifier)s'
% url_part))
@classmethod
@ModelView.button
def new_identifier(cls, inboxes):
for inbox in inboxes:
if inbox.identifier:
inbox.identifier = None
else:
inbox.identifier = uuid.uuid4().hex
cls.save(inboxes)
def process(self, email_):
assert email_.inbox == self
for rule in self.rules:
if rule.match(email_.as_dict()):
email_.rule = rule
rule.run(email_)
return
def _email_text(message, type_='plain'):
if message.get_content_maintype() != 'multipart':
return message.get_payload()
for part in message.walk():
if part.get_content_type() == f'text/{type_}':
return part.get_payload()
def _email_attachments(message):
if message.get_content_maintype() != 'multipart':
return
for i, part in enumerate(message.walk()):
if part.get_content_maintype() == 'multipart':
continue
if 'attachment' not in part.get('Content-Disposition', '').lower():
continue
filename = part.get_filename()
yield {
'filename': filename,
'type': part.get_content_type(),
'data': part.get_payload(decode=True),
}
class Email(ModelSQL, ModelView):
__name__ = 'inbound.email'
inbox = fields.Many2One(
'inbound.email.inbox', "Inbox",
required=True, readonly=True, ondelete='CASCADE')
data = fields.Binary(
"Data", file_id=file_id, store_prefix=store_prefix,
required=True, readonly=True)
data_id = fields.Char("Data ID", readonly=True)
data_type = fields.Selection([
('mailchimp', "Mailchimp"),
('mailpace', "MailPace"),
('postmark', "Postmark"),
('raw', "Raw"),
('sendgrid', "SendGrid"),
], "Data Type", required=True, readonly=True, translate=False)
rule = fields.Many2One('inbound.email.rule', "Rule", readonly=True)
result = fields.Reference("Result", selection='get_models', readonly=True)
@classmethod
def __setup__(cls):
super().__setup__()
cls._order = [('id', 'DESC')]
cls._buttons.update(
process={
'readonly': Eval('rule'),
'depends': ['rule'],
},
)
@classmethod
def get_models(cls):
pool = Pool()
Model = pool.get('ir.model')
return [(None, "")] + Model.get_name_items((ModelStorage, ModelView))
@classmethod
def from_webhook(cls, inbox, data, data_type):
emails = []
if data_type in {'raw', 'mailpace', 'sendgrid', 'postmark'}:
emails.append(cls(inbox=inbox, data=data, data_type=data_type))
elif data_type == 'mailchimp':
payload = json.loads(data)
for event in payload['mandrill_events']:
if event['event'] == 'inbound':
emails.append(cls(
inbox=inbox,
data=json.dumps(event).encode('utf-8'),
data_type=data_type))
return emails
@classmethod
@ModelView.button
def process(cls, emails):
for email_ in emails:
if not email_.rule:
email_.inbox.process(email_)
cls.save(emails)
def as_dict(self):
value = {}
if self.data_type == 'raw':
value.update(self._as_dict(self.data))
elif self.data_type == 'mailchimp':
event = json.loads(self.data)
value.update(self._as_dict(event['raw_msg']))
elif self.data_type == 'mailpace':
payload = json.loads(self.data)
value.update(self._as_dict(payload['raw']))
elif self.data_type == 'postmark':
payload = json.loads(self.data)
value.update(self._as_dict_postmark(payload))
elif self.data_type == 'sendgrid':
payload = json.loads(self.data)
value.update(self._as_dict(payload['email']))
return value
def _as_dict(self, raw):
value = {}
if isinstance(raw, str):
message = email.message_from_string(
raw, policy=email_policy_default)
else:
message = email.message_from_bytes(
raw, policy=email_policy_default)
if 'From' in message:
value['from'] = getaddresses([message.get('From')])[0][1]
for key in ['To', 'Cc', 'Bcc']:
if key in message:
value[key.lower()] = [
a for _, a in getaddresses(message.get_all(key))]
if 'Subject' in message:
value['subject'] = message['Subject']
text = _email_text(message)
if text is not None:
value['text'] = text
html = _email_text(message, 'html')
if html is not None:
value['html'] = html
value['attachments'] = list(_email_attachments(message))
value['headers'] = dict(message.items())
return value
def _as_dict_postmark(self, payload):
value = {}
if 'FromFull' in payload:
value['from'] = payload['FromFull']['Email']
for key in ['To', 'Cc', 'Bcc']:
if f'{key}Full' in payload:
value[key.lower()] = [
a['Email'] for a in payload[f'{key}Full']]
if 'Subject' in payload:
value['subject'] = payload['Subject']
if 'TextBody' in payload:
value['text'] = payload['TextBody']
if 'HtmlBody' in payload:
value['html'] = payload['HtmlBody']
if 'Attachments' in payload:
value['attachments'] = [{
'filename': a['Name'],
'type': a['ContentType'],
'data': base64.b64decode(a['Content']),
} for a in payload['Attachments']]
if 'Headers' in payload:
value['headers'] = {
h['Name']: h['Value'] for h in payload['Headers']}
return value
class Rule(sequence_ordered(), ModelSQL, ModelView):
__name__ = 'inbound.email.rule'
inbox = fields.Many2One(
'inbound.email.inbox', "Inbox", required=True, ondelete='CASCADE')
origin = fields.Char(
"Origin",
help="A regular expression to match the sender email address.")
destination = fields.Char(
"Destination",
help="A regular expression to match any receiver email addresses.")
subject = fields.Char(
"Subject",
help="A regular expression to match the subject.")
attachment_name = fields.Char(
"Attachment Name",
help="A regular expression to match any attachment name.")
headers = fields.One2Many('inbound.email.rule.header', 'rule', "Headers")
action = fields.Selection([
(None, ""),
], "Action")
@classmethod
def __setup__(cls):
super().__setup__()
cls.__access__.add('inbox')
cls._order.insert(0, ('inbox.id', 'DESC'))
def match(self, email_):
flags = re.IGNORECASE
search = partial(re.search, flags=flags)
compile_ = partial(re.compile, flags=flags)
if self.origin:
if not search(self.origin, email_.get('from', '')):
return False
if self.destination:
destinations = [
*email_.get('to', []),
*email_.get('cc', []),
*email_.get('bcc', []),
]
pattern = compile_(self.destination)
if not any(pattern.search(d) for d in destinations):
return False
if self.subject:
if not search(self.subject, email_.get('subject', '')):
return False
if self.attachment_name:
pattern = compile_(self.attachment_name)
if not any(
pattern.search(a.get('filename', ''))
for a in email_.get('attachments', [])):
return False
if self.headers:
for header in self.headers:
if not search(
header.value,
email_.get('headers', {}).get(header.name, '')):
return False
return True
def run(self, email_):
pool = Pool()
if self.action:
model, method = self.action.split('|')
Model = pool.get(model)
email_.result = getattr(Model, method)(email_, self)
class RuleHeader(ModelSQL, ModelView):
__name__ = 'inbound.email.rule.header'
rule = fields.Many2One(
'inbound.email.rule', "Rule", required=True, ondelete='CASCADE')
name = fields.Char(
"Name", required=True,
help="The name of the header.")
value = fields.Char(
"Value",
help="A regular expression to match the header value.")
@classmethod
def __setup__(cls):
super().__setup__()
cls.__access__.add('rule')

View File

@@ -0,0 +1,155 @@
<?xml version="1.0"?>
<!-- This file is part of Tryton. The COPYRIGHT file at the top level of
this repository contains the full copyright notices and license terms. -->
<tryton>
<data>
<menuitem
parent="ir.menu_administration"
name="Inbound Email"
sequence="30"
id="menu_inbound_email"/>
<record model="ir.ui.view" id="inbound_email_inbox_view_form">
<field name="model">inbound.email.inbox</field>
<field name="type">form</field>
<field name="name">inbound_email_inbox_form</field>
</record>
<record model="ir.ui.view" id="inbound_email_inbox_view_list">
<field name="model">inbound.email.inbox</field>
<field name="type">tree</field>
<field name="name">inbound_email_inbox_list</field>
</record>
<record model="ir.action.act_window" id="act_inbound_email_inbox_form">
<field name="name">Inbox</field>
<field name="res_model">inbound.email.inbox</field>
</record>
<record model="ir.action.act_window.view" id="act_inbound_email_inbox_form_view1">
<field name="sequence" eval="10"/>
<field name="view" ref="inbound_email_inbox_view_list"/>
<field name="act_window" ref="act_inbound_email_inbox_form"/>
</record>
<record model="ir.action.act_window.view" id="act_inbound_email_inbox_form_view2">
<field name="sequence" eval="20"/>
<field name="view" ref="inbound_email_inbox_view_form"/>
<field name="act_window" ref="act_inbound_email_inbox_form"/>
</record>
<menuitem
parent="menu_inbound_email"
action="act_inbound_email_inbox_form"
sequence="10"
id="menu_inbound_email_inbox_form"/>
<record model="ir.model.button" id="inbound_email_inbox_new_identifier_button">
<field name="model">inbound.email.inbox</field>
<field name="name">new_identifier</field>
<field name="string">New URL</field>
<field name="confirm">This action will make the previous URL unusable. Do you want to continue?</field>
</record>
<record model="ir.model.access" id="access_inbound_email_inbox">
<field name="model">inbound.email.inbox</field>
<field name="perm_read" eval="False"/>
<field name="perm_write" eval="False"/>
<field name="perm_create" eval="False"/>
<field name="perm_delete" eval="False"/>
</record>
<record model="ir.model.access" id="access_inbound_email_inbox_group_admin">
<field name="model">inbound.email.inbox</field>
<field name="group" ref="res.group_admin"/>
<field name="perm_read" eval="True"/>
<field name="perm_write" eval="True"/>
<field name="perm_create" eval="True"/>
<field name="perm_delete" eval="True"/>
</record>
<record model="ir.ui.view" id="inbound_email_view_form">
<field name="model">inbound.email</field>
<field name="type">form</field>
<field name="name">inbound_email_form</field>
</record>
<record model="ir.ui.view" id="inbound_email_view_list">
<field name="model">inbound.email</field>
<field name="type">tree</field>
<field name="name">inbound_email_list</field>
</record>
<record model="ir.action.act_window" id="act_inbound_email_form_relate">
<field name="name">Emails</field>
<field name="res_model">inbound.email</field>
<field name="domain" eval="[('inbox', 'in', Eval('active_ids', []))]" pyson="1"/>
</record>
<record model="ir.action.act_window.view" id="act_inbound_email_form_relate_view1">
<field name="sequence" eval="10"/>
<field name="view" ref="inbound_email_view_list"/>
<field name="act_window" ref="act_inbound_email_form_relate"/>
</record>
<record model="ir.action.act_window.view" id="act_inbound_email_form_view2">
<field name="sequence" eval="20"/>
<field name="view" ref="inbound_email_view_form"/>
<field name="act_window" ref="act_inbound_email_form_relate"/>
</record>
<record model="ir.action.keyword" id="act_inbound_email_form_relate_keyword">
<field name="keyword">form_relate</field>
<field name="model">inbound.email.inbox,-1</field>
<field name="action" ref="act_inbound_email_form_relate"/>
</record>
<record model="ir.model.access" id="access_inbound_email">
<field name="model">inbound.email</field>
<field name="perm_read" eval="False"/>
<field name="perm_write" eval="False"/>
<field name="perm_create" eval="False"/>
<field name="perm_delete" eval="False"/>
</record>
<record model="ir.model.access" id="access_inbound_email_group_admin">
<field name="model">inbound.email</field>
<field name="group" ref="res.group_admin"/>
<field name="perm_read" eval="True"/>
<field name="perm_write" eval="True"/>
<field name="perm_create" eval="False"/>
<field name="perm_delete" eval="False"/>
</record>
<record model="ir.model.button" id="inbound_email_process_button">
<field name="model">inbound.email</field>
<field name="name">process</field>
<field name="string">Process</field>
</record>
<record model="ir.ui.view" id="inbound_email_rule_view_form">
<field name="model">inbound.email.rule</field>
<field name="type">form</field>
<field name="name">inbound_email_rule_form</field>
</record>
<record model="ir.ui.view" id="inbound_email_rule_view_list">
<field name="model">inbound.email.rule</field>
<field name="type">tree</field>
<field name="priority" eval="10"/>
<field name="name">inbound_email_rule_list</field>
</record>
<record model="ir.ui.view" id="inbound_email_rule_view_list_sequence">
<field name="model">inbound.email.rule</field>
<field name="type">tree</field>
<field name="priority" eval="20"/>
<field name="name">inbound_email_rule_list_sequence</field>
</record>
<record model="ir.ui.view" id="inbound_email_rule_header_view_form">
<field name="model">inbound.email.rule.header</field>
<field name="type">form</field>
<field name="name">inbound_email_rule_header_form</field>
</record>
<record model="ir.ui.view" id="inbound_email_rule_header_view_list">
<field name="model">inbound.email.rule.header</field>
<field name="type">tree</field>
<field name="priority" eval="10"/>
<field name="name">inbound_email_rule_header_list</field>
</record>
</data>
</tryton>

View File

@@ -0,0 +1,162 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:inbound.email,data:"
msgid "Data"
msgstr ""
msgctxt "field:inbound.email,data_id:"
msgid "Data ID"
msgstr ""
msgctxt "field:inbound.email,data_type:"
msgid "Data Type"
msgstr ""
msgctxt "field:inbound.email,inbox:"
msgid "Inbox"
msgstr ""
msgctxt "field:inbound.email,result:"
msgid "Result"
msgstr ""
msgctxt "field:inbound.email,rule:"
msgid "Rule"
msgstr ""
msgctxt "field:inbound.email.inbox,endpoint:"
msgid "Endpoint"
msgstr ""
msgctxt "field:inbound.email.inbox,identifier:"
msgid "Identifier"
msgstr ""
msgctxt "field:inbound.email.inbox,name:"
msgid "Name"
msgstr ""
msgctxt "field:inbound.email.inbox,rules:"
msgid "Rules"
msgstr ""
msgctxt "field:inbound.email.rule,action:"
msgid "Action"
msgstr ""
msgctxt "field:inbound.email.rule,attachment_name:"
msgid "Attachment Name"
msgstr ""
msgctxt "field:inbound.email.rule,destination:"
msgid "Destination"
msgstr ""
msgctxt "field:inbound.email.rule,headers:"
msgid "Headers"
msgstr ""
msgctxt "field:inbound.email.rule,inbox:"
msgid "Inbox"
msgstr ""
msgctxt "field:inbound.email.rule,origin:"
msgid "Origin"
msgstr ""
msgctxt "field:inbound.email.rule,subject:"
msgid "Subject"
msgstr ""
msgctxt "field:inbound.email.rule.header,name:"
msgid "Name"
msgstr ""
msgctxt "field:inbound.email.rule.header,rule:"
msgid "Rule"
msgstr ""
msgctxt "field:inbound.email.rule.header,value:"
msgid "Value"
msgstr ""
msgctxt "help:inbound.email.inbox,endpoint:"
msgid "The URL where the emails must be posted."
msgstr ""
msgctxt "help:inbound.email.inbox,rules:"
msgid "The action of the first matching line is run."
msgstr ""
msgctxt "help:inbound.email.rule,attachment_name:"
msgid "A regular expression to match any attachment name."
msgstr ""
msgctxt "help:inbound.email.rule,destination:"
msgid "A regular expression to match any receiver email addresses."
msgstr ""
msgctxt "help:inbound.email.rule,origin:"
msgid "A regular expression to match the sender email address."
msgstr ""
msgctxt "help:inbound.email.rule,subject:"
msgid "A regular expression to match the subject."
msgstr ""
msgctxt "help:inbound.email.rule.header,name:"
msgid "The name of the header."
msgstr ""
msgctxt "help:inbound.email.rule.header,value:"
msgid "A regular expression to match the header value."
msgstr ""
msgctxt "model:inbound.email,string:"
msgid "Inbound Email"
msgstr ""
msgctxt "model:inbound.email.inbox,string:"
msgid "Inbound Email Inbox"
msgstr ""
msgctxt "model:inbound.email.rule,string:"
msgid "Inbound Email Rule"
msgstr ""
msgctxt "model:inbound.email.rule.header,string:"
msgid "Inbound Email Rule Header"
msgstr ""
msgctxt "model:ir.action,name:act_inbound_email_form_relate"
msgid "Emails"
msgstr ""
msgctxt "model:ir.action,name:act_inbound_email_inbox_form"
msgid "Inbox"
msgstr ""
msgctxt ""
"model:ir.model.button,confirm:inbound_email_inbox_new_identifier_button"
msgid ""
"This action will make the previous URL unusable. Do you want to continue?"
msgstr ""
msgctxt ""
"model:ir.model.button,string:inbound_email_inbox_new_identifier_button"
msgid "New URL"
msgstr ""
msgctxt "model:ir.model.button,string:inbound_email_process_button"
msgid "Process"
msgstr ""
msgctxt "model:ir.ui.menu,name:menu_inbound_email"
msgid "Inbound Email"
msgstr ""
msgctxt "model:ir.ui.menu,name:menu_inbound_email_inbox_form"
msgid "Inbox"
msgstr ""

View File

@@ -0,0 +1,167 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:inbound.email,data:"
msgid "Data"
msgstr "Dades"
msgctxt "field:inbound.email,data_id:"
msgid "Data ID"
msgstr "ID Dades"
msgctxt "field:inbound.email,data_type:"
msgid "Data Type"
msgstr "Tipus dades"
msgctxt "field:inbound.email,inbox:"
msgid "Inbox"
msgstr "Safata d'entrada"
msgctxt "field:inbound.email,result:"
msgid "Result"
msgstr "Resultat"
msgctxt "field:inbound.email,rule:"
msgid "Rule"
msgstr "Regla"
msgctxt "field:inbound.email.inbox,endpoint:"
msgid "Endpoint"
msgstr "Punt final"
msgctxt "field:inbound.email.inbox,identifier:"
msgid "Identifier"
msgstr "Identificador"
msgctxt "field:inbound.email.inbox,name:"
msgid "Name"
msgstr "Nom"
msgctxt "field:inbound.email.inbox,rules:"
msgid "Rules"
msgstr "Regles"
msgctxt "field:inbound.email.rule,action:"
msgid "Action"
msgstr "Acció"
msgctxt "field:inbound.email.rule,attachment_name:"
msgid "Attachment Name"
msgstr "Nom de l'adjunt"
msgctxt "field:inbound.email.rule,destination:"
msgid "Destination"
msgstr "Destí"
msgctxt "field:inbound.email.rule,headers:"
msgid "Headers"
msgstr "Capçaleres"
msgctxt "field:inbound.email.rule,inbox:"
msgid "Inbox"
msgstr "Safata d'entrada"
msgctxt "field:inbound.email.rule,origin:"
msgid "Origin"
msgstr "Origen"
msgctxt "field:inbound.email.rule,subject:"
msgid "Subject"
msgstr "Asumpte"
msgctxt "field:inbound.email.rule.header,name:"
msgid "Name"
msgstr "Nom"
msgctxt "field:inbound.email.rule.header,rule:"
msgid "Rule"
msgstr "Regla"
msgctxt "field:inbound.email.rule.header,value:"
msgid "Value"
msgstr "Valor"
msgctxt "help:inbound.email.inbox,endpoint:"
msgid "The URL where the emails must be posted."
msgstr "La URL a la que s'han d'enviar els correus electrónics."
msgctxt "help:inbound.email.inbox,rules:"
msgid "The action of the first matching line is run."
msgstr "S'executarà l'acció de la primera línia coincident."
msgctxt "help:inbound.email.rule,attachment_name:"
msgid "A regular expression to match any attachment name."
msgstr "Una expresió regular a coincidir amb algún nom del adjunt."
msgctxt "help:inbound.email.rule,destination:"
msgid "A regular expression to match any receiver email addresses."
msgstr ""
"Una expresió regular a coincidir amb algún correu electrònic del "
"destinatari."
msgctxt "help:inbound.email.rule,origin:"
msgid "A regular expression to match the sender email address."
msgstr ""
"Una expresió regular a coincidir amb el correu electrònic del remitent."
msgctxt "help:inbound.email.rule,subject:"
msgid "A regular expression to match the subject."
msgstr "Una expresió regular a coincidir amb l'assumpte."
msgctxt "help:inbound.email.rule.header,name:"
msgid "The name of the header."
msgstr "El nom de la capçalera."
msgctxt "help:inbound.email.rule.header,value:"
msgid "A regular expression to match the header value."
msgstr "Una expresió regular a coincidir amb el valor de la capçalera."
msgctxt "model:inbound.email,string:"
msgid "Inbound Email"
msgstr "Correu electrònic entrant"
msgctxt "model:inbound.email.inbox,string:"
msgid "Inbound Email Inbox"
msgstr "Safata del correu electrònic entrant"
msgctxt "model:inbound.email.rule,string:"
msgid "Inbound Email Rule"
msgstr "Regla de correu electrònic"
msgctxt "model:inbound.email.rule.header,string:"
msgid "Inbound Email Rule Header"
msgstr "Capçaleres de les regles de correu electrònic entrant"
msgctxt "model:ir.action,name:act_inbound_email_form_relate"
msgid "Emails"
msgstr "Correus electrònics"
msgctxt "model:ir.action,name:act_inbound_email_inbox_form"
msgid "Inbox"
msgstr "Safata d'entrada"
msgctxt ""
"model:ir.model.button,confirm:inbound_email_inbox_new_identifier_button"
msgid ""
"This action will make the previous URL unusable. Do you want to continue?"
msgstr ""
"Aquesta acció provocarà que la URL anterior deixi de funcionar. Voleu "
"continuar?"
msgctxt ""
"model:ir.model.button,string:inbound_email_inbox_new_identifier_button"
msgid "New URL"
msgstr "Nova URL"
msgctxt "model:ir.model.button,string:inbound_email_process_button"
msgid "Process"
msgstr "Processa"
msgctxt "model:ir.ui.menu,name:menu_inbound_email"
msgid "Inbound Email"
msgstr "Correu electrònic entrant"
msgctxt "model:ir.ui.menu,name:menu_inbound_email_inbox_form"
msgid "Inbox"
msgstr "Safata d'entrada"

View File

@@ -0,0 +1,162 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:inbound.email,data:"
msgid "Data"
msgstr ""
msgctxt "field:inbound.email,data_id:"
msgid "Data ID"
msgstr ""
msgctxt "field:inbound.email,data_type:"
msgid "Data Type"
msgstr ""
msgctxt "field:inbound.email,inbox:"
msgid "Inbox"
msgstr ""
msgctxt "field:inbound.email,result:"
msgid "Result"
msgstr ""
msgctxt "field:inbound.email,rule:"
msgid "Rule"
msgstr ""
msgctxt "field:inbound.email.inbox,endpoint:"
msgid "Endpoint"
msgstr ""
msgctxt "field:inbound.email.inbox,identifier:"
msgid "Identifier"
msgstr ""
msgctxt "field:inbound.email.inbox,name:"
msgid "Name"
msgstr ""
msgctxt "field:inbound.email.inbox,rules:"
msgid "Rules"
msgstr ""
msgctxt "field:inbound.email.rule,action:"
msgid "Action"
msgstr ""
msgctxt "field:inbound.email.rule,attachment_name:"
msgid "Attachment Name"
msgstr ""
msgctxt "field:inbound.email.rule,destination:"
msgid "Destination"
msgstr ""
msgctxt "field:inbound.email.rule,headers:"
msgid "Headers"
msgstr ""
msgctxt "field:inbound.email.rule,inbox:"
msgid "Inbox"
msgstr ""
msgctxt "field:inbound.email.rule,origin:"
msgid "Origin"
msgstr ""
msgctxt "field:inbound.email.rule,subject:"
msgid "Subject"
msgstr ""
msgctxt "field:inbound.email.rule.header,name:"
msgid "Name"
msgstr ""
msgctxt "field:inbound.email.rule.header,rule:"
msgid "Rule"
msgstr ""
msgctxt "field:inbound.email.rule.header,value:"
msgid "Value"
msgstr ""
msgctxt "help:inbound.email.inbox,endpoint:"
msgid "The URL where the emails must be posted."
msgstr ""
msgctxt "help:inbound.email.inbox,rules:"
msgid "The action of the first matching line is run."
msgstr ""
msgctxt "help:inbound.email.rule,attachment_name:"
msgid "A regular expression to match any attachment name."
msgstr ""
msgctxt "help:inbound.email.rule,destination:"
msgid "A regular expression to match any receiver email addresses."
msgstr ""
msgctxt "help:inbound.email.rule,origin:"
msgid "A regular expression to match the sender email address."
msgstr ""
msgctxt "help:inbound.email.rule,subject:"
msgid "A regular expression to match the subject."
msgstr ""
msgctxt "help:inbound.email.rule.header,name:"
msgid "The name of the header."
msgstr ""
msgctxt "help:inbound.email.rule.header,value:"
msgid "A regular expression to match the header value."
msgstr ""
msgctxt "model:inbound.email,string:"
msgid "Inbound Email"
msgstr ""
msgctxt "model:inbound.email.inbox,string:"
msgid "Inbound Email Inbox"
msgstr ""
msgctxt "model:inbound.email.rule,string:"
msgid "Inbound Email Rule"
msgstr ""
msgctxt "model:inbound.email.rule.header,string:"
msgid "Inbound Email Rule Header"
msgstr ""
msgctxt "model:ir.action,name:act_inbound_email_form_relate"
msgid "Emails"
msgstr ""
msgctxt "model:ir.action,name:act_inbound_email_inbox_form"
msgid "Inbox"
msgstr ""
msgctxt ""
"model:ir.model.button,confirm:inbound_email_inbox_new_identifier_button"
msgid ""
"This action will make the previous URL unusable. Do you want to continue?"
msgstr ""
msgctxt ""
"model:ir.model.button,string:inbound_email_inbox_new_identifier_button"
msgid "New URL"
msgstr ""
msgctxt "model:ir.model.button,string:inbound_email_process_button"
msgid "Process"
msgstr ""
msgctxt "model:ir.ui.menu,name:menu_inbound_email"
msgid "Inbound Email"
msgstr ""
msgctxt "model:ir.ui.menu,name:menu_inbound_email_inbox_form"
msgid "Inbox"
msgstr ""

View File

@@ -0,0 +1,164 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:inbound.email,data:"
msgid "Data"
msgstr "Daten"
msgctxt "field:inbound.email,data_id:"
msgid "Data ID"
msgstr "Daten ID"
msgctxt "field:inbound.email,data_type:"
msgid "Data Type"
msgstr "Datentyp"
msgctxt "field:inbound.email,inbox:"
msgid "Inbox"
msgstr "Posteingang"
msgctxt "field:inbound.email,result:"
msgid "Result"
msgstr "Ergebnis"
msgctxt "field:inbound.email,rule:"
msgid "Rule"
msgstr "Regel"
msgctxt "field:inbound.email.inbox,endpoint:"
msgid "Endpoint"
msgstr "Endpoint"
msgctxt "field:inbound.email.inbox,identifier:"
msgid "Identifier"
msgstr "Identifikator"
msgctxt "field:inbound.email.inbox,name:"
msgid "Name"
msgstr "Name"
msgctxt "field:inbound.email.inbox,rules:"
msgid "Rules"
msgstr "Regeln"
msgctxt "field:inbound.email.rule,action:"
msgid "Action"
msgstr "Aktion"
msgctxt "field:inbound.email.rule,attachment_name:"
msgid "Attachment Name"
msgstr "Name Anhang"
msgctxt "field:inbound.email.rule,destination:"
msgid "Destination"
msgstr "Ziel"
msgctxt "field:inbound.email.rule,headers:"
msgid "Headers"
msgstr "Header"
msgctxt "field:inbound.email.rule,inbox:"
msgid "Inbox"
msgstr "Posteingang"
msgctxt "field:inbound.email.rule,origin:"
msgid "Origin"
msgstr "Herkunft"
msgctxt "field:inbound.email.rule,subject:"
msgid "Subject"
msgstr "Betreff"
msgctxt "field:inbound.email.rule.header,name:"
msgid "Name"
msgstr "Name"
msgctxt "field:inbound.email.rule.header,rule:"
msgid "Rule"
msgstr "Regel"
msgctxt "field:inbound.email.rule.header,value:"
msgid "Value"
msgstr "Wert"
msgctxt "help:inbound.email.inbox,endpoint:"
msgid "The URL where the emails must be posted."
msgstr "Die URL für die Übermittlung der E-Mails."
msgctxt "help:inbound.email.inbox,rules:"
msgid "The action of the first matching line is run."
msgstr "Die Aktion der ersten zutreffenden Zeile wird ausgeführt."
msgctxt "help:inbound.email.rule,attachment_name:"
msgid "A regular expression to match any attachment name."
msgstr "Ein regulärer Ausdruck der passende Namen von Anhängen auswählt."
msgctxt "help:inbound.email.rule,destination:"
msgid "A regular expression to match any receiver email addresses."
msgstr ""
"Ein regulärer Ausdruck der passende Empfänger E-Mail-Adressen auswählt."
msgctxt "help:inbound.email.rule,origin:"
msgid "A regular expression to match the sender email address."
msgstr "Ein regulärer Ausdruck der passende Sender E-Mail-Adressen auswählt."
msgctxt "help:inbound.email.rule,subject:"
msgid "A regular expression to match the subject."
msgstr "Ein regulärer Ausdruck der passende Betreffe auswählt."
msgctxt "help:inbound.email.rule.header,name:"
msgid "The name of the header."
msgstr "Der Name des Headers."
msgctxt "help:inbound.email.rule.header,value:"
msgid "A regular expression to match the header value."
msgstr "Ein regulärer Ausdruck der passende Header Werte auswählt."
msgctxt "model:inbound.email,string:"
msgid "Inbound Email"
msgstr "Eingehende E-Mail"
msgctxt "model:inbound.email.inbox,string:"
msgid "Inbound Email Inbox"
msgstr "Eingehende E-Mail Posteingang"
msgctxt "model:inbound.email.rule,string:"
msgid "Inbound Email Rule"
msgstr "Eingehende E-Mail Regel"
msgctxt "model:inbound.email.rule.header,string:"
msgid "Inbound Email Rule Header"
msgstr "Eingehende E-Mail Regel Header"
msgctxt "model:ir.action,name:act_inbound_email_form_relate"
msgid "Emails"
msgstr "E-Mails"
msgctxt "model:ir.action,name:act_inbound_email_inbox_form"
msgid "Inbox"
msgstr "Posteingang"
msgctxt ""
"model:ir.model.button,confirm:inbound_email_inbox_new_identifier_button"
msgid ""
"This action will make the previous URL unusable. Do you want to continue?"
msgstr ""
"Diese Aktion macht die bisherige URL unbrauchbar. Möchten Sie fortfahren?"
msgctxt ""
"model:ir.model.button,string:inbound_email_inbox_new_identifier_button"
msgid "New URL"
msgstr "Neue URL erzeugen"
msgctxt "model:ir.model.button,string:inbound_email_process_button"
msgid "Process"
msgstr "Ausführen"
msgctxt "model:ir.ui.menu,name:menu_inbound_email"
msgid "Inbound Email"
msgstr "Eingehende E-Mail"
msgctxt "model:ir.ui.menu,name:menu_inbound_email_inbox_form"
msgid "Inbox"
msgstr "Posteingang"

View File

@@ -0,0 +1,167 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:inbound.email,data:"
msgid "Data"
msgstr "Datos"
msgctxt "field:inbound.email,data_id:"
msgid "Data ID"
msgstr "ID Datos"
msgctxt "field:inbound.email,data_type:"
msgid "Data Type"
msgstr "Tipo datos"
msgctxt "field:inbound.email,inbox:"
msgid "Inbox"
msgstr "Bandeja de entrada"
msgctxt "field:inbound.email,result:"
msgid "Result"
msgstr "Resultado"
msgctxt "field:inbound.email,rule:"
msgid "Rule"
msgstr "Regla"
msgctxt "field:inbound.email.inbox,endpoint:"
msgid "Endpoint"
msgstr "Punto final"
msgctxt "field:inbound.email.inbox,identifier:"
msgid "Identifier"
msgstr "Identificador"
msgctxt "field:inbound.email.inbox,name:"
msgid "Name"
msgstr "Nombre"
msgctxt "field:inbound.email.inbox,rules:"
msgid "Rules"
msgstr "Reglas"
msgctxt "field:inbound.email.rule,action:"
msgid "Action"
msgstr "Acción"
msgctxt "field:inbound.email.rule,attachment_name:"
msgid "Attachment Name"
msgstr "Nombre del adjunto"
msgctxt "field:inbound.email.rule,destination:"
msgid "Destination"
msgstr "Destino"
msgctxt "field:inbound.email.rule,headers:"
msgid "Headers"
msgstr "Cabeceras"
msgctxt "field:inbound.email.rule,inbox:"
msgid "Inbox"
msgstr "Bandeja de entrada"
msgctxt "field:inbound.email.rule,origin:"
msgid "Origin"
msgstr "Origen"
msgctxt "field:inbound.email.rule,subject:"
msgid "Subject"
msgstr "Asunto"
msgctxt "field:inbound.email.rule.header,name:"
msgid "Name"
msgstr "Nombre"
msgctxt "field:inbound.email.rule.header,rule:"
msgid "Rule"
msgstr "Regla"
msgctxt "field:inbound.email.rule.header,value:"
msgid "Value"
msgstr "Valor"
msgctxt "help:inbound.email.inbox,endpoint:"
msgid "The URL where the emails must be posted."
msgstr "La URL a la que se deben enviar los correos electrónicos."
msgctxt "help:inbound.email.inbox,rules:"
msgid "The action of the first matching line is run."
msgstr "La acción de la primera linea coincidente se ejecutará."
msgctxt "help:inbound.email.rule,attachment_name:"
msgid "A regular expression to match any attachment name."
msgstr "Una expresión regular que coincida con algún nombre del adjunto."
msgctxt "help:inbound.email.rule,destination:"
msgid "A regular expression to match any receiver email addresses."
msgstr ""
"Una expresión regular a coincidir con algún correo electrónico del "
"destinatario."
msgctxt "help:inbound.email.rule,origin:"
msgid "A regular expression to match the sender email address."
msgstr ""
"Una expresión regular a coincidir con elcorreo electrónico del remitente."
msgctxt "help:inbound.email.rule,subject:"
msgid "A regular expression to match the subject."
msgstr "Una expresión regular a coincidir con el asunto."
msgctxt "help:inbound.email.rule.header,name:"
msgid "The name of the header."
msgstr "El nombre de la cabecera."
msgctxt "help:inbound.email.rule.header,value:"
msgid "A regular expression to match the header value."
msgstr "Una expresión regular a coincidir con el valor de la cabecera."
msgctxt "model:inbound.email,string:"
msgid "Inbound Email"
msgstr "Correo electrónico entrante"
msgctxt "model:inbound.email.inbox,string:"
msgid "Inbound Email Inbox"
msgstr "Buzón de correo electrónico entrante"
msgctxt "model:inbound.email.rule,string:"
msgid "Inbound Email Rule"
msgstr "Regla de correo electrónico"
msgctxt "model:inbound.email.rule.header,string:"
msgid "Inbound Email Rule Header"
msgstr "Cabeceras de las reglas de correo electrónico entrante"
msgctxt "model:ir.action,name:act_inbound_email_form_relate"
msgid "Emails"
msgstr "Correos electrónicos"
msgctxt "model:ir.action,name:act_inbound_email_inbox_form"
msgid "Inbox"
msgstr "Bandeja de entrada"
msgctxt ""
"model:ir.model.button,confirm:inbound_email_inbox_new_identifier_button"
msgid ""
"This action will make the previous URL unusable. Do you want to continue?"
msgstr ""
"Esta acción provocara que la URL anterior deje de funcionar. ¿Desea "
"continuar?"
msgctxt ""
"model:ir.model.button,string:inbound_email_inbox_new_identifier_button"
msgid "New URL"
msgstr "Nueva URL"
msgctxt "model:ir.model.button,string:inbound_email_process_button"
msgid "Process"
msgstr "Procesar"
msgctxt "model:ir.ui.menu,name:menu_inbound_email"
msgid "Inbound Email"
msgstr "Correo electrónico entrante"
msgctxt "model:ir.ui.menu,name:menu_inbound_email_inbox_form"
msgid "Inbox"
msgstr "Bandeja de entrada"

View File

@@ -0,0 +1,162 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:inbound.email,data:"
msgid "Data"
msgstr ""
msgctxt "field:inbound.email,data_id:"
msgid "Data ID"
msgstr ""
msgctxt "field:inbound.email,data_type:"
msgid "Data Type"
msgstr ""
msgctxt "field:inbound.email,inbox:"
msgid "Inbox"
msgstr ""
msgctxt "field:inbound.email,result:"
msgid "Result"
msgstr ""
msgctxt "field:inbound.email,rule:"
msgid "Rule"
msgstr ""
msgctxt "field:inbound.email.inbox,endpoint:"
msgid "Endpoint"
msgstr ""
msgctxt "field:inbound.email.inbox,identifier:"
msgid "Identifier"
msgstr ""
msgctxt "field:inbound.email.inbox,name:"
msgid "Name"
msgstr ""
msgctxt "field:inbound.email.inbox,rules:"
msgid "Rules"
msgstr ""
msgctxt "field:inbound.email.rule,action:"
msgid "Action"
msgstr ""
msgctxt "field:inbound.email.rule,attachment_name:"
msgid "Attachment Name"
msgstr ""
msgctxt "field:inbound.email.rule,destination:"
msgid "Destination"
msgstr ""
msgctxt "field:inbound.email.rule,headers:"
msgid "Headers"
msgstr ""
msgctxt "field:inbound.email.rule,inbox:"
msgid "Inbox"
msgstr ""
msgctxt "field:inbound.email.rule,origin:"
msgid "Origin"
msgstr ""
msgctxt "field:inbound.email.rule,subject:"
msgid "Subject"
msgstr ""
msgctxt "field:inbound.email.rule.header,name:"
msgid "Name"
msgstr ""
msgctxt "field:inbound.email.rule.header,rule:"
msgid "Rule"
msgstr ""
msgctxt "field:inbound.email.rule.header,value:"
msgid "Value"
msgstr ""
msgctxt "help:inbound.email.inbox,endpoint:"
msgid "The URL where the emails must be posted."
msgstr ""
msgctxt "help:inbound.email.inbox,rules:"
msgid "The action of the first matching line is run."
msgstr ""
msgctxt "help:inbound.email.rule,attachment_name:"
msgid "A regular expression to match any attachment name."
msgstr ""
msgctxt "help:inbound.email.rule,destination:"
msgid "A regular expression to match any receiver email addresses."
msgstr ""
msgctxt "help:inbound.email.rule,origin:"
msgid "A regular expression to match the sender email address."
msgstr ""
msgctxt "help:inbound.email.rule,subject:"
msgid "A regular expression to match the subject."
msgstr ""
msgctxt "help:inbound.email.rule.header,name:"
msgid "The name of the header."
msgstr ""
msgctxt "help:inbound.email.rule.header,value:"
msgid "A regular expression to match the header value."
msgstr ""
msgctxt "model:inbound.email,string:"
msgid "Inbound Email"
msgstr ""
msgctxt "model:inbound.email.inbox,string:"
msgid "Inbound Email Inbox"
msgstr ""
msgctxt "model:inbound.email.rule,string:"
msgid "Inbound Email Rule"
msgstr ""
msgctxt "model:inbound.email.rule.header,string:"
msgid "Inbound Email Rule Header"
msgstr ""
msgctxt "model:ir.action,name:act_inbound_email_form_relate"
msgid "Emails"
msgstr ""
msgctxt "model:ir.action,name:act_inbound_email_inbox_form"
msgid "Inbox"
msgstr ""
msgctxt ""
"model:ir.model.button,confirm:inbound_email_inbox_new_identifier_button"
msgid ""
"This action will make the previous URL unusable. Do you want to continue?"
msgstr ""
msgctxt ""
"model:ir.model.button,string:inbound_email_inbox_new_identifier_button"
msgid "New URL"
msgstr ""
msgctxt "model:ir.model.button,string:inbound_email_process_button"
msgid "Process"
msgstr ""
msgctxt "model:ir.ui.menu,name:menu_inbound_email"
msgid "Inbound Email"
msgstr ""
msgctxt "model:ir.ui.menu,name:menu_inbound_email_inbox_form"
msgid "Inbox"
msgstr ""

View File

@@ -0,0 +1,162 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:inbound.email,data:"
msgid "Data"
msgstr ""
msgctxt "field:inbound.email,data_id:"
msgid "Data ID"
msgstr ""
msgctxt "field:inbound.email,data_type:"
msgid "Data Type"
msgstr ""
msgctxt "field:inbound.email,inbox:"
msgid "Inbox"
msgstr ""
msgctxt "field:inbound.email,result:"
msgid "Result"
msgstr ""
msgctxt "field:inbound.email,rule:"
msgid "Rule"
msgstr ""
msgctxt "field:inbound.email.inbox,endpoint:"
msgid "Endpoint"
msgstr ""
msgctxt "field:inbound.email.inbox,identifier:"
msgid "Identifier"
msgstr ""
msgctxt "field:inbound.email.inbox,name:"
msgid "Name"
msgstr ""
msgctxt "field:inbound.email.inbox,rules:"
msgid "Rules"
msgstr ""
msgctxt "field:inbound.email.rule,action:"
msgid "Action"
msgstr ""
msgctxt "field:inbound.email.rule,attachment_name:"
msgid "Attachment Name"
msgstr ""
msgctxt "field:inbound.email.rule,destination:"
msgid "Destination"
msgstr ""
msgctxt "field:inbound.email.rule,headers:"
msgid "Headers"
msgstr ""
msgctxt "field:inbound.email.rule,inbox:"
msgid "Inbox"
msgstr ""
msgctxt "field:inbound.email.rule,origin:"
msgid "Origin"
msgstr ""
msgctxt "field:inbound.email.rule,subject:"
msgid "Subject"
msgstr ""
msgctxt "field:inbound.email.rule.header,name:"
msgid "Name"
msgstr ""
msgctxt "field:inbound.email.rule.header,rule:"
msgid "Rule"
msgstr ""
msgctxt "field:inbound.email.rule.header,value:"
msgid "Value"
msgstr ""
msgctxt "help:inbound.email.inbox,endpoint:"
msgid "The URL where the emails must be posted."
msgstr ""
msgctxt "help:inbound.email.inbox,rules:"
msgid "The action of the first matching line is run."
msgstr ""
msgctxt "help:inbound.email.rule,attachment_name:"
msgid "A regular expression to match any attachment name."
msgstr ""
msgctxt "help:inbound.email.rule,destination:"
msgid "A regular expression to match any receiver email addresses."
msgstr ""
msgctxt "help:inbound.email.rule,origin:"
msgid "A regular expression to match the sender email address."
msgstr ""
msgctxt "help:inbound.email.rule,subject:"
msgid "A regular expression to match the subject."
msgstr ""
msgctxt "help:inbound.email.rule.header,name:"
msgid "The name of the header."
msgstr ""
msgctxt "help:inbound.email.rule.header,value:"
msgid "A regular expression to match the header value."
msgstr ""
msgctxt "model:inbound.email,string:"
msgid "Inbound Email"
msgstr ""
msgctxt "model:inbound.email.inbox,string:"
msgid "Inbound Email Inbox"
msgstr ""
msgctxt "model:inbound.email.rule,string:"
msgid "Inbound Email Rule"
msgstr ""
msgctxt "model:inbound.email.rule.header,string:"
msgid "Inbound Email Rule Header"
msgstr ""
msgctxt "model:ir.action,name:act_inbound_email_form_relate"
msgid "Emails"
msgstr ""
msgctxt "model:ir.action,name:act_inbound_email_inbox_form"
msgid "Inbox"
msgstr ""
msgctxt ""
"model:ir.model.button,confirm:inbound_email_inbox_new_identifier_button"
msgid ""
"This action will make the previous URL unusable. Do you want to continue?"
msgstr ""
msgctxt ""
"model:ir.model.button,string:inbound_email_inbox_new_identifier_button"
msgid "New URL"
msgstr ""
msgctxt "model:ir.model.button,string:inbound_email_process_button"
msgid "Process"
msgstr ""
msgctxt "model:ir.ui.menu,name:menu_inbound_email"
msgid "Inbound Email"
msgstr ""
msgctxt "model:ir.ui.menu,name:menu_inbound_email_inbox_form"
msgid "Inbox"
msgstr ""

View File

@@ -0,0 +1,162 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:inbound.email,data:"
msgid "Data"
msgstr ""
msgctxt "field:inbound.email,data_id:"
msgid "Data ID"
msgstr ""
msgctxt "field:inbound.email,data_type:"
msgid "Data Type"
msgstr ""
msgctxt "field:inbound.email,inbox:"
msgid "Inbox"
msgstr ""
msgctxt "field:inbound.email,result:"
msgid "Result"
msgstr ""
msgctxt "field:inbound.email,rule:"
msgid "Rule"
msgstr ""
msgctxt "field:inbound.email.inbox,endpoint:"
msgid "Endpoint"
msgstr ""
msgctxt "field:inbound.email.inbox,identifier:"
msgid "Identifier"
msgstr ""
msgctxt "field:inbound.email.inbox,name:"
msgid "Name"
msgstr ""
msgctxt "field:inbound.email.inbox,rules:"
msgid "Rules"
msgstr ""
msgctxt "field:inbound.email.rule,action:"
msgid "Action"
msgstr ""
msgctxt "field:inbound.email.rule,attachment_name:"
msgid "Attachment Name"
msgstr ""
msgctxt "field:inbound.email.rule,destination:"
msgid "Destination"
msgstr ""
msgctxt "field:inbound.email.rule,headers:"
msgid "Headers"
msgstr ""
msgctxt "field:inbound.email.rule,inbox:"
msgid "Inbox"
msgstr ""
msgctxt "field:inbound.email.rule,origin:"
msgid "Origin"
msgstr ""
msgctxt "field:inbound.email.rule,subject:"
msgid "Subject"
msgstr ""
msgctxt "field:inbound.email.rule.header,name:"
msgid "Name"
msgstr ""
msgctxt "field:inbound.email.rule.header,rule:"
msgid "Rule"
msgstr ""
msgctxt "field:inbound.email.rule.header,value:"
msgid "Value"
msgstr ""
msgctxt "help:inbound.email.inbox,endpoint:"
msgid "The URL where the emails must be posted."
msgstr ""
msgctxt "help:inbound.email.inbox,rules:"
msgid "The action of the first matching line is run."
msgstr ""
msgctxt "help:inbound.email.rule,attachment_name:"
msgid "A regular expression to match any attachment name."
msgstr ""
msgctxt "help:inbound.email.rule,destination:"
msgid "A regular expression to match any receiver email addresses."
msgstr ""
msgctxt "help:inbound.email.rule,origin:"
msgid "A regular expression to match the sender email address."
msgstr ""
msgctxt "help:inbound.email.rule,subject:"
msgid "A regular expression to match the subject."
msgstr ""
msgctxt "help:inbound.email.rule.header,name:"
msgid "The name of the header."
msgstr ""
msgctxt "help:inbound.email.rule.header,value:"
msgid "A regular expression to match the header value."
msgstr ""
msgctxt "model:inbound.email,string:"
msgid "Inbound Email"
msgstr ""
msgctxt "model:inbound.email.inbox,string:"
msgid "Inbound Email Inbox"
msgstr ""
msgctxt "model:inbound.email.rule,string:"
msgid "Inbound Email Rule"
msgstr ""
msgctxt "model:inbound.email.rule.header,string:"
msgid "Inbound Email Rule Header"
msgstr ""
msgctxt "model:ir.action,name:act_inbound_email_form_relate"
msgid "Emails"
msgstr ""
msgctxt "model:ir.action,name:act_inbound_email_inbox_form"
msgid "Inbox"
msgstr ""
msgctxt ""
"model:ir.model.button,confirm:inbound_email_inbox_new_identifier_button"
msgid ""
"This action will make the previous URL unusable. Do you want to continue?"
msgstr ""
msgctxt ""
"model:ir.model.button,string:inbound_email_inbox_new_identifier_button"
msgid "New URL"
msgstr ""
msgctxt "model:ir.model.button,string:inbound_email_process_button"
msgid "Process"
msgstr ""
msgctxt "model:ir.ui.menu,name:menu_inbound_email"
msgid "Inbound Email"
msgstr ""
msgctxt "model:ir.ui.menu,name:menu_inbound_email_inbox_form"
msgid "Inbox"
msgstr ""

View File

@@ -0,0 +1,162 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:inbound.email,data:"
msgid "Data"
msgstr ""
msgctxt "field:inbound.email,data_id:"
msgid "Data ID"
msgstr ""
msgctxt "field:inbound.email,data_type:"
msgid "Data Type"
msgstr ""
msgctxt "field:inbound.email,inbox:"
msgid "Inbox"
msgstr ""
msgctxt "field:inbound.email,result:"
msgid "Result"
msgstr ""
msgctxt "field:inbound.email,rule:"
msgid "Rule"
msgstr ""
msgctxt "field:inbound.email.inbox,endpoint:"
msgid "Endpoint"
msgstr ""
msgctxt "field:inbound.email.inbox,identifier:"
msgid "Identifier"
msgstr ""
msgctxt "field:inbound.email.inbox,name:"
msgid "Name"
msgstr ""
msgctxt "field:inbound.email.inbox,rules:"
msgid "Rules"
msgstr ""
msgctxt "field:inbound.email.rule,action:"
msgid "Action"
msgstr ""
msgctxt "field:inbound.email.rule,attachment_name:"
msgid "Attachment Name"
msgstr ""
msgctxt "field:inbound.email.rule,destination:"
msgid "Destination"
msgstr ""
msgctxt "field:inbound.email.rule,headers:"
msgid "Headers"
msgstr ""
msgctxt "field:inbound.email.rule,inbox:"
msgid "Inbox"
msgstr ""
msgctxt "field:inbound.email.rule,origin:"
msgid "Origin"
msgstr ""
msgctxt "field:inbound.email.rule,subject:"
msgid "Subject"
msgstr ""
msgctxt "field:inbound.email.rule.header,name:"
msgid "Name"
msgstr ""
msgctxt "field:inbound.email.rule.header,rule:"
msgid "Rule"
msgstr ""
msgctxt "field:inbound.email.rule.header,value:"
msgid "Value"
msgstr ""
msgctxt "help:inbound.email.inbox,endpoint:"
msgid "The URL where the emails must be posted."
msgstr ""
msgctxt "help:inbound.email.inbox,rules:"
msgid "The action of the first matching line is run."
msgstr ""
msgctxt "help:inbound.email.rule,attachment_name:"
msgid "A regular expression to match any attachment name."
msgstr ""
msgctxt "help:inbound.email.rule,destination:"
msgid "A regular expression to match any receiver email addresses."
msgstr ""
msgctxt "help:inbound.email.rule,origin:"
msgid "A regular expression to match the sender email address."
msgstr ""
msgctxt "help:inbound.email.rule,subject:"
msgid "A regular expression to match the subject."
msgstr ""
msgctxt "help:inbound.email.rule.header,name:"
msgid "The name of the header."
msgstr ""
msgctxt "help:inbound.email.rule.header,value:"
msgid "A regular expression to match the header value."
msgstr ""
msgctxt "model:inbound.email,string:"
msgid "Inbound Email"
msgstr ""
msgctxt "model:inbound.email.inbox,string:"
msgid "Inbound Email Inbox"
msgstr ""
msgctxt "model:inbound.email.rule,string:"
msgid "Inbound Email Rule"
msgstr ""
msgctxt "model:inbound.email.rule.header,string:"
msgid "Inbound Email Rule Header"
msgstr ""
msgctxt "model:ir.action,name:act_inbound_email_form_relate"
msgid "Emails"
msgstr ""
msgctxt "model:ir.action,name:act_inbound_email_inbox_form"
msgid "Inbox"
msgstr ""
msgctxt ""
"model:ir.model.button,confirm:inbound_email_inbox_new_identifier_button"
msgid ""
"This action will make the previous URL unusable. Do you want to continue?"
msgstr ""
msgctxt ""
"model:ir.model.button,string:inbound_email_inbox_new_identifier_button"
msgid "New URL"
msgstr ""
msgctxt "model:ir.model.button,string:inbound_email_process_button"
msgid "Process"
msgstr ""
msgctxt "model:ir.ui.menu,name:menu_inbound_email"
msgid "Inbound Email"
msgstr ""
msgctxt "model:ir.ui.menu,name:menu_inbound_email_inbox_form"
msgid "Inbox"
msgstr ""

View File

@@ -0,0 +1,169 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:inbound.email,data:"
msgid "Data"
msgstr "Données"
msgctxt "field:inbound.email,data_id:"
msgid "Data ID"
msgstr "Identifiant des données"
msgctxt "field:inbound.email,data_type:"
msgid "Data Type"
msgstr "Type de données"
msgctxt "field:inbound.email,inbox:"
msgid "Inbox"
msgstr "Boîte de réception"
msgctxt "field:inbound.email,result:"
msgid "Result"
msgstr "Résultat"
msgctxt "field:inbound.email,rule:"
msgid "Rule"
msgstr "Règle"
msgctxt "field:inbound.email.inbox,endpoint:"
msgid "Endpoint"
msgstr "Point final"
msgctxt "field:inbound.email.inbox,identifier:"
msgid "Identifier"
msgstr "Identifiant"
msgctxt "field:inbound.email.inbox,name:"
msgid "Name"
msgstr "Nom"
msgctxt "field:inbound.email.inbox,rules:"
msgid "Rules"
msgstr "Règles"
msgctxt "field:inbound.email.rule,action:"
msgid "Action"
msgstr "Action"
msgctxt "field:inbound.email.rule,attachment_name:"
msgid "Attachment Name"
msgstr "Nom de la pièce jointe"
msgctxt "field:inbound.email.rule,destination:"
msgid "Destination"
msgstr "Destination"
msgctxt "field:inbound.email.rule,headers:"
msgid "Headers"
msgstr "Entêtes"
msgctxt "field:inbound.email.rule,inbox:"
msgid "Inbox"
msgstr "Boîte de réception"
msgctxt "field:inbound.email.rule,origin:"
msgid "Origin"
msgstr "Origine"
msgctxt "field:inbound.email.rule,subject:"
msgid "Subject"
msgstr "Objet"
msgctxt "field:inbound.email.rule.header,name:"
msgid "Name"
msgstr "Nom"
msgctxt "field:inbound.email.rule.header,rule:"
msgid "Rule"
msgstr "Règle"
msgctxt "field:inbound.email.rule.header,value:"
msgid "Value"
msgstr "Valeur"
msgctxt "help:inbound.email.inbox,endpoint:"
msgid "The URL where the emails must be posted."
msgstr "L'URL où les courriels doivent être publiés."
msgctxt "help:inbound.email.inbox,rules:"
msgid "The action of the first matching line is run."
msgstr "L'action de la première ligne correspondante est exécutée."
msgctxt "help:inbound.email.rule,attachment_name:"
msgid "A regular expression to match any attachment name."
msgstr ""
"Une expression régulière pour correspondre à nimporte quel nom de pièce "
"jointe."
msgctxt "help:inbound.email.rule,destination:"
msgid "A regular expression to match any receiver email addresses."
msgstr ""
"Une expression régulière pour correspondre n'importe quelle adresse "
"électronique des destinataires."
msgctxt "help:inbound.email.rule,origin:"
msgid "A regular expression to match the sender email address."
msgstr ""
"Une expression régulière pour correspondre à l'adresse électronique de "
"l'expéditeur."
msgctxt "help:inbound.email.rule,subject:"
msgid "A regular expression to match the subject."
msgstr "Une expression régulière correspondant au sujet."
msgctxt "help:inbound.email.rule.header,name:"
msgid "The name of the header."
msgstr "Le nom de l'entête."
msgctxt "help:inbound.email.rule.header,value:"
msgid "A regular expression to match the header value."
msgstr "Une expression régulière correspondant à la valeur de l'entête."
msgctxt "model:inbound.email,string:"
msgid "Inbound Email"
msgstr "Courriel entrant"
msgctxt "model:inbound.email.inbox,string:"
msgid "Inbound Email Inbox"
msgstr "Boîte de réception des courriels entrants"
msgctxt "model:inbound.email.rule,string:"
msgid "Inbound Email Rule"
msgstr "Règle de courriel entrant"
msgctxt "model:inbound.email.rule.header,string:"
msgid "Inbound Email Rule Header"
msgstr "Règle d'entête de courriel entrant"
msgctxt "model:ir.action,name:act_inbound_email_form_relate"
msgid "Emails"
msgstr "Courriels"
msgctxt "model:ir.action,name:act_inbound_email_inbox_form"
msgid "Inbox"
msgstr "Boîte de réception"
msgctxt ""
"model:ir.model.button,confirm:inbound_email_inbox_new_identifier_button"
msgid ""
"This action will make the previous URL unusable. Do you want to continue?"
msgstr ""
"Cette action rendra l'URL précédente inutilisable. Voulez-vous continuer ?"
msgctxt ""
"model:ir.model.button,string:inbound_email_inbox_new_identifier_button"
msgid "New URL"
msgstr "Nouvelle URL"
msgctxt "model:ir.model.button,string:inbound_email_process_button"
msgid "Process"
msgstr "Traiter"
msgctxt "model:ir.ui.menu,name:menu_inbound_email"
msgid "Inbound Email"
msgstr "Courriel entrant"
msgctxt "model:ir.ui.menu,name:menu_inbound_email_inbox_form"
msgid "Inbox"
msgstr "Boîte de réception"

View File

@@ -0,0 +1,162 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:inbound.email,data:"
msgid "Data"
msgstr ""
msgctxt "field:inbound.email,data_id:"
msgid "Data ID"
msgstr ""
msgctxt "field:inbound.email,data_type:"
msgid "Data Type"
msgstr ""
msgctxt "field:inbound.email,inbox:"
msgid "Inbox"
msgstr ""
msgctxt "field:inbound.email,result:"
msgid "Result"
msgstr ""
msgctxt "field:inbound.email,rule:"
msgid "Rule"
msgstr ""
msgctxt "field:inbound.email.inbox,endpoint:"
msgid "Endpoint"
msgstr ""
msgctxt "field:inbound.email.inbox,identifier:"
msgid "Identifier"
msgstr ""
msgctxt "field:inbound.email.inbox,name:"
msgid "Name"
msgstr ""
msgctxt "field:inbound.email.inbox,rules:"
msgid "Rules"
msgstr ""
msgctxt "field:inbound.email.rule,action:"
msgid "Action"
msgstr ""
msgctxt "field:inbound.email.rule,attachment_name:"
msgid "Attachment Name"
msgstr ""
msgctxt "field:inbound.email.rule,destination:"
msgid "Destination"
msgstr ""
msgctxt "field:inbound.email.rule,headers:"
msgid "Headers"
msgstr ""
msgctxt "field:inbound.email.rule,inbox:"
msgid "Inbox"
msgstr ""
msgctxt "field:inbound.email.rule,origin:"
msgid "Origin"
msgstr ""
msgctxt "field:inbound.email.rule,subject:"
msgid "Subject"
msgstr ""
msgctxt "field:inbound.email.rule.header,name:"
msgid "Name"
msgstr ""
msgctxt "field:inbound.email.rule.header,rule:"
msgid "Rule"
msgstr ""
msgctxt "field:inbound.email.rule.header,value:"
msgid "Value"
msgstr ""
msgctxt "help:inbound.email.inbox,endpoint:"
msgid "The URL where the emails must be posted."
msgstr ""
msgctxt "help:inbound.email.inbox,rules:"
msgid "The action of the first matching line is run."
msgstr ""
msgctxt "help:inbound.email.rule,attachment_name:"
msgid "A regular expression to match any attachment name."
msgstr ""
msgctxt "help:inbound.email.rule,destination:"
msgid "A regular expression to match any receiver email addresses."
msgstr ""
msgctxt "help:inbound.email.rule,origin:"
msgid "A regular expression to match the sender email address."
msgstr ""
msgctxt "help:inbound.email.rule,subject:"
msgid "A regular expression to match the subject."
msgstr ""
msgctxt "help:inbound.email.rule.header,name:"
msgid "The name of the header."
msgstr ""
msgctxt "help:inbound.email.rule.header,value:"
msgid "A regular expression to match the header value."
msgstr ""
msgctxt "model:inbound.email,string:"
msgid "Inbound Email"
msgstr ""
msgctxt "model:inbound.email.inbox,string:"
msgid "Inbound Email Inbox"
msgstr ""
msgctxt "model:inbound.email.rule,string:"
msgid "Inbound Email Rule"
msgstr ""
msgctxt "model:inbound.email.rule.header,string:"
msgid "Inbound Email Rule Header"
msgstr ""
msgctxt "model:ir.action,name:act_inbound_email_form_relate"
msgid "Emails"
msgstr ""
msgctxt "model:ir.action,name:act_inbound_email_inbox_form"
msgid "Inbox"
msgstr ""
msgctxt ""
"model:ir.model.button,confirm:inbound_email_inbox_new_identifier_button"
msgid ""
"This action will make the previous URL unusable. Do you want to continue?"
msgstr ""
msgctxt ""
"model:ir.model.button,string:inbound_email_inbox_new_identifier_button"
msgid "New URL"
msgstr ""
msgctxt "model:ir.model.button,string:inbound_email_process_button"
msgid "Process"
msgstr ""
msgctxt "model:ir.ui.menu,name:menu_inbound_email"
msgid "Inbound Email"
msgstr ""
msgctxt "model:ir.ui.menu,name:menu_inbound_email_inbox_form"
msgid "Inbox"
msgstr ""

View File

@@ -0,0 +1,162 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:inbound.email,data:"
msgid "Data"
msgstr ""
msgctxt "field:inbound.email,data_id:"
msgid "Data ID"
msgstr ""
msgctxt "field:inbound.email,data_type:"
msgid "Data Type"
msgstr ""
msgctxt "field:inbound.email,inbox:"
msgid "Inbox"
msgstr ""
msgctxt "field:inbound.email,result:"
msgid "Result"
msgstr ""
msgctxt "field:inbound.email,rule:"
msgid "Rule"
msgstr ""
msgctxt "field:inbound.email.inbox,endpoint:"
msgid "Endpoint"
msgstr ""
msgctxt "field:inbound.email.inbox,identifier:"
msgid "Identifier"
msgstr ""
msgctxt "field:inbound.email.inbox,name:"
msgid "Name"
msgstr ""
msgctxt "field:inbound.email.inbox,rules:"
msgid "Rules"
msgstr ""
msgctxt "field:inbound.email.rule,action:"
msgid "Action"
msgstr ""
msgctxt "field:inbound.email.rule,attachment_name:"
msgid "Attachment Name"
msgstr ""
msgctxt "field:inbound.email.rule,destination:"
msgid "Destination"
msgstr ""
msgctxt "field:inbound.email.rule,headers:"
msgid "Headers"
msgstr ""
msgctxt "field:inbound.email.rule,inbox:"
msgid "Inbox"
msgstr ""
msgctxt "field:inbound.email.rule,origin:"
msgid "Origin"
msgstr ""
msgctxt "field:inbound.email.rule,subject:"
msgid "Subject"
msgstr ""
msgctxt "field:inbound.email.rule.header,name:"
msgid "Name"
msgstr ""
msgctxt "field:inbound.email.rule.header,rule:"
msgid "Rule"
msgstr ""
msgctxt "field:inbound.email.rule.header,value:"
msgid "Value"
msgstr ""
msgctxt "help:inbound.email.inbox,endpoint:"
msgid "The URL where the emails must be posted."
msgstr ""
msgctxt "help:inbound.email.inbox,rules:"
msgid "The action of the first matching line is run."
msgstr ""
msgctxt "help:inbound.email.rule,attachment_name:"
msgid "A regular expression to match any attachment name."
msgstr ""
msgctxt "help:inbound.email.rule,destination:"
msgid "A regular expression to match any receiver email addresses."
msgstr ""
msgctxt "help:inbound.email.rule,origin:"
msgid "A regular expression to match the sender email address."
msgstr ""
msgctxt "help:inbound.email.rule,subject:"
msgid "A regular expression to match the subject."
msgstr ""
msgctxt "help:inbound.email.rule.header,name:"
msgid "The name of the header."
msgstr ""
msgctxt "help:inbound.email.rule.header,value:"
msgid "A regular expression to match the header value."
msgstr ""
msgctxt "model:inbound.email,string:"
msgid "Inbound Email"
msgstr ""
msgctxt "model:inbound.email.inbox,string:"
msgid "Inbound Email Inbox"
msgstr ""
msgctxt "model:inbound.email.rule,string:"
msgid "Inbound Email Rule"
msgstr ""
msgctxt "model:inbound.email.rule.header,string:"
msgid "Inbound Email Rule Header"
msgstr ""
msgctxt "model:ir.action,name:act_inbound_email_form_relate"
msgid "Emails"
msgstr ""
msgctxt "model:ir.action,name:act_inbound_email_inbox_form"
msgid "Inbox"
msgstr ""
msgctxt ""
"model:ir.model.button,confirm:inbound_email_inbox_new_identifier_button"
msgid ""
"This action will make the previous URL unusable. Do you want to continue?"
msgstr ""
msgctxt ""
"model:ir.model.button,string:inbound_email_inbox_new_identifier_button"
msgid "New URL"
msgstr ""
msgctxt "model:ir.model.button,string:inbound_email_process_button"
msgid "Process"
msgstr ""
msgctxt "model:ir.ui.menu,name:menu_inbound_email"
msgid "Inbound Email"
msgstr ""
msgctxt "model:ir.ui.menu,name:menu_inbound_email_inbox_form"
msgid "Inbox"
msgstr ""

View File

@@ -0,0 +1,162 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:inbound.email,data:"
msgid "Data"
msgstr ""
msgctxt "field:inbound.email,data_id:"
msgid "Data ID"
msgstr ""
msgctxt "field:inbound.email,data_type:"
msgid "Data Type"
msgstr ""
msgctxt "field:inbound.email,inbox:"
msgid "Inbox"
msgstr ""
msgctxt "field:inbound.email,result:"
msgid "Result"
msgstr ""
msgctxt "field:inbound.email,rule:"
msgid "Rule"
msgstr ""
msgctxt "field:inbound.email.inbox,endpoint:"
msgid "Endpoint"
msgstr ""
msgctxt "field:inbound.email.inbox,identifier:"
msgid "Identifier"
msgstr ""
msgctxt "field:inbound.email.inbox,name:"
msgid "Name"
msgstr ""
msgctxt "field:inbound.email.inbox,rules:"
msgid "Rules"
msgstr ""
msgctxt "field:inbound.email.rule,action:"
msgid "Action"
msgstr ""
msgctxt "field:inbound.email.rule,attachment_name:"
msgid "Attachment Name"
msgstr ""
msgctxt "field:inbound.email.rule,destination:"
msgid "Destination"
msgstr ""
msgctxt "field:inbound.email.rule,headers:"
msgid "Headers"
msgstr ""
msgctxt "field:inbound.email.rule,inbox:"
msgid "Inbox"
msgstr ""
msgctxt "field:inbound.email.rule,origin:"
msgid "Origin"
msgstr ""
msgctxt "field:inbound.email.rule,subject:"
msgid "Subject"
msgstr ""
msgctxt "field:inbound.email.rule.header,name:"
msgid "Name"
msgstr ""
msgctxt "field:inbound.email.rule.header,rule:"
msgid "Rule"
msgstr ""
msgctxt "field:inbound.email.rule.header,value:"
msgid "Value"
msgstr ""
msgctxt "help:inbound.email.inbox,endpoint:"
msgid "The URL where the emails must be posted."
msgstr ""
msgctxt "help:inbound.email.inbox,rules:"
msgid "The action of the first matching line is run."
msgstr ""
msgctxt "help:inbound.email.rule,attachment_name:"
msgid "A regular expression to match any attachment name."
msgstr ""
msgctxt "help:inbound.email.rule,destination:"
msgid "A regular expression to match any receiver email addresses."
msgstr ""
msgctxt "help:inbound.email.rule,origin:"
msgid "A regular expression to match the sender email address."
msgstr ""
msgctxt "help:inbound.email.rule,subject:"
msgid "A regular expression to match the subject."
msgstr ""
msgctxt "help:inbound.email.rule.header,name:"
msgid "The name of the header."
msgstr ""
msgctxt "help:inbound.email.rule.header,value:"
msgid "A regular expression to match the header value."
msgstr ""
msgctxt "model:inbound.email,string:"
msgid "Inbound Email"
msgstr ""
msgctxt "model:inbound.email.inbox,string:"
msgid "Inbound Email Inbox"
msgstr ""
msgctxt "model:inbound.email.rule,string:"
msgid "Inbound Email Rule"
msgstr ""
msgctxt "model:inbound.email.rule.header,string:"
msgid "Inbound Email Rule Header"
msgstr ""
msgctxt "model:ir.action,name:act_inbound_email_form_relate"
msgid "Emails"
msgstr ""
msgctxt "model:ir.action,name:act_inbound_email_inbox_form"
msgid "Inbox"
msgstr ""
msgctxt ""
"model:ir.model.button,confirm:inbound_email_inbox_new_identifier_button"
msgid ""
"This action will make the previous URL unusable. Do you want to continue?"
msgstr ""
msgctxt ""
"model:ir.model.button,string:inbound_email_inbox_new_identifier_button"
msgid "New URL"
msgstr ""
msgctxt "model:ir.model.button,string:inbound_email_process_button"
msgid "Process"
msgstr ""
msgctxt "model:ir.ui.menu,name:menu_inbound_email"
msgid "Inbound Email"
msgstr ""
msgctxt "model:ir.ui.menu,name:menu_inbound_email_inbox_form"
msgid "Inbox"
msgstr ""

View File

@@ -0,0 +1,162 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:inbound.email,data:"
msgid "Data"
msgstr ""
msgctxt "field:inbound.email,data_id:"
msgid "Data ID"
msgstr ""
msgctxt "field:inbound.email,data_type:"
msgid "Data Type"
msgstr ""
msgctxt "field:inbound.email,inbox:"
msgid "Inbox"
msgstr ""
msgctxt "field:inbound.email,result:"
msgid "Result"
msgstr ""
msgctxt "field:inbound.email,rule:"
msgid "Rule"
msgstr ""
msgctxt "field:inbound.email.inbox,endpoint:"
msgid "Endpoint"
msgstr ""
msgctxt "field:inbound.email.inbox,identifier:"
msgid "Identifier"
msgstr ""
msgctxt "field:inbound.email.inbox,name:"
msgid "Name"
msgstr ""
msgctxt "field:inbound.email.inbox,rules:"
msgid "Rules"
msgstr ""
msgctxt "field:inbound.email.rule,action:"
msgid "Action"
msgstr ""
msgctxt "field:inbound.email.rule,attachment_name:"
msgid "Attachment Name"
msgstr ""
msgctxt "field:inbound.email.rule,destination:"
msgid "Destination"
msgstr ""
msgctxt "field:inbound.email.rule,headers:"
msgid "Headers"
msgstr ""
msgctxt "field:inbound.email.rule,inbox:"
msgid "Inbox"
msgstr ""
msgctxt "field:inbound.email.rule,origin:"
msgid "Origin"
msgstr ""
msgctxt "field:inbound.email.rule,subject:"
msgid "Subject"
msgstr ""
msgctxt "field:inbound.email.rule.header,name:"
msgid "Name"
msgstr ""
msgctxt "field:inbound.email.rule.header,rule:"
msgid "Rule"
msgstr ""
msgctxt "field:inbound.email.rule.header,value:"
msgid "Value"
msgstr ""
msgctxt "help:inbound.email.inbox,endpoint:"
msgid "The URL where the emails must be posted."
msgstr ""
msgctxt "help:inbound.email.inbox,rules:"
msgid "The action of the first matching line is run."
msgstr ""
msgctxt "help:inbound.email.rule,attachment_name:"
msgid "A regular expression to match any attachment name."
msgstr ""
msgctxt "help:inbound.email.rule,destination:"
msgid "A regular expression to match any receiver email addresses."
msgstr ""
msgctxt "help:inbound.email.rule,origin:"
msgid "A regular expression to match the sender email address."
msgstr ""
msgctxt "help:inbound.email.rule,subject:"
msgid "A regular expression to match the subject."
msgstr ""
msgctxt "help:inbound.email.rule.header,name:"
msgid "The name of the header."
msgstr ""
msgctxt "help:inbound.email.rule.header,value:"
msgid "A regular expression to match the header value."
msgstr ""
msgctxt "model:inbound.email,string:"
msgid "Inbound Email"
msgstr ""
msgctxt "model:inbound.email.inbox,string:"
msgid "Inbound Email Inbox"
msgstr ""
msgctxt "model:inbound.email.rule,string:"
msgid "Inbound Email Rule"
msgstr ""
msgctxt "model:inbound.email.rule.header,string:"
msgid "Inbound Email Rule Header"
msgstr ""
msgctxt "model:ir.action,name:act_inbound_email_form_relate"
msgid "Emails"
msgstr ""
msgctxt "model:ir.action,name:act_inbound_email_inbox_form"
msgid "Inbox"
msgstr ""
msgctxt ""
"model:ir.model.button,confirm:inbound_email_inbox_new_identifier_button"
msgid ""
"This action will make the previous URL unusable. Do you want to continue?"
msgstr ""
msgctxt ""
"model:ir.model.button,string:inbound_email_inbox_new_identifier_button"
msgid "New URL"
msgstr ""
msgctxt "model:ir.model.button,string:inbound_email_process_button"
msgid "Process"
msgstr ""
msgctxt "model:ir.ui.menu,name:menu_inbound_email"
msgid "Inbound Email"
msgstr ""
msgctxt "model:ir.ui.menu,name:menu_inbound_email_inbox_form"
msgid "Inbox"
msgstr ""

View File

@@ -0,0 +1,162 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:inbound.email,data:"
msgid "Data"
msgstr ""
msgctxt "field:inbound.email,data_id:"
msgid "Data ID"
msgstr ""
msgctxt "field:inbound.email,data_type:"
msgid "Data Type"
msgstr ""
msgctxt "field:inbound.email,inbox:"
msgid "Inbox"
msgstr ""
msgctxt "field:inbound.email,result:"
msgid "Result"
msgstr ""
msgctxt "field:inbound.email,rule:"
msgid "Rule"
msgstr ""
msgctxt "field:inbound.email.inbox,endpoint:"
msgid "Endpoint"
msgstr ""
msgctxt "field:inbound.email.inbox,identifier:"
msgid "Identifier"
msgstr ""
msgctxt "field:inbound.email.inbox,name:"
msgid "Name"
msgstr ""
msgctxt "field:inbound.email.inbox,rules:"
msgid "Rules"
msgstr ""
msgctxt "field:inbound.email.rule,action:"
msgid "Action"
msgstr ""
msgctxt "field:inbound.email.rule,attachment_name:"
msgid "Attachment Name"
msgstr ""
msgctxt "field:inbound.email.rule,destination:"
msgid "Destination"
msgstr ""
msgctxt "field:inbound.email.rule,headers:"
msgid "Headers"
msgstr ""
msgctxt "field:inbound.email.rule,inbox:"
msgid "Inbox"
msgstr ""
msgctxt "field:inbound.email.rule,origin:"
msgid "Origin"
msgstr ""
msgctxt "field:inbound.email.rule,subject:"
msgid "Subject"
msgstr ""
msgctxt "field:inbound.email.rule.header,name:"
msgid "Name"
msgstr ""
msgctxt "field:inbound.email.rule.header,rule:"
msgid "Rule"
msgstr ""
msgctxt "field:inbound.email.rule.header,value:"
msgid "Value"
msgstr ""
msgctxt "help:inbound.email.inbox,endpoint:"
msgid "The URL where the emails must be posted."
msgstr ""
msgctxt "help:inbound.email.inbox,rules:"
msgid "The action of the first matching line is run."
msgstr ""
msgctxt "help:inbound.email.rule,attachment_name:"
msgid "A regular expression to match any attachment name."
msgstr ""
msgctxt "help:inbound.email.rule,destination:"
msgid "A regular expression to match any receiver email addresses."
msgstr ""
msgctxt "help:inbound.email.rule,origin:"
msgid "A regular expression to match the sender email address."
msgstr ""
msgctxt "help:inbound.email.rule,subject:"
msgid "A regular expression to match the subject."
msgstr ""
msgctxt "help:inbound.email.rule.header,name:"
msgid "The name of the header."
msgstr ""
msgctxt "help:inbound.email.rule.header,value:"
msgid "A regular expression to match the header value."
msgstr ""
msgctxt "model:inbound.email,string:"
msgid "Inbound Email"
msgstr ""
msgctxt "model:inbound.email.inbox,string:"
msgid "Inbound Email Inbox"
msgstr ""
msgctxt "model:inbound.email.rule,string:"
msgid "Inbound Email Rule"
msgstr ""
msgctxt "model:inbound.email.rule.header,string:"
msgid "Inbound Email Rule Header"
msgstr ""
msgctxt "model:ir.action,name:act_inbound_email_form_relate"
msgid "Emails"
msgstr ""
msgctxt "model:ir.action,name:act_inbound_email_inbox_form"
msgid "Inbox"
msgstr ""
msgctxt ""
"model:ir.model.button,confirm:inbound_email_inbox_new_identifier_button"
msgid ""
"This action will make the previous URL unusable. Do you want to continue?"
msgstr ""
msgctxt ""
"model:ir.model.button,string:inbound_email_inbox_new_identifier_button"
msgid "New URL"
msgstr ""
msgctxt "model:ir.model.button,string:inbound_email_process_button"
msgid "Process"
msgstr ""
msgctxt "model:ir.ui.menu,name:menu_inbound_email"
msgid "Inbound Email"
msgstr ""
msgctxt "model:ir.ui.menu,name:menu_inbound_email_inbox_form"
msgid "Inbox"
msgstr ""

View File

@@ -0,0 +1,164 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:inbound.email,data:"
msgid "Data"
msgstr "Gegevens"
msgctxt "field:inbound.email,data_id:"
msgid "Data ID"
msgstr "Gegevens ID"
msgctxt "field:inbound.email,data_type:"
msgid "Data Type"
msgstr "Soort gegevens"
msgctxt "field:inbound.email,inbox:"
msgid "Inbox"
msgstr "Postvak IN"
msgctxt "field:inbound.email,result:"
msgid "Result"
msgstr "Resultaat"
msgctxt "field:inbound.email,rule:"
msgid "Rule"
msgstr "Regel"
msgctxt "field:inbound.email.inbox,endpoint:"
msgid "Endpoint"
msgstr "Eindpunt"
msgctxt "field:inbound.email.inbox,identifier:"
msgid "Identifier"
msgstr "Identificatie"
msgctxt "field:inbound.email.inbox,name:"
msgid "Name"
msgstr "Naam"
msgctxt "field:inbound.email.inbox,rules:"
msgid "Rules"
msgstr "Regels"
msgctxt "field:inbound.email.rule,action:"
msgid "Action"
msgstr "Actie"
msgctxt "field:inbound.email.rule,attachment_name:"
msgid "Attachment Name"
msgstr "Naam bijlage"
msgctxt "field:inbound.email.rule,destination:"
msgid "Destination"
msgstr "Bestemming"
msgctxt "field:inbound.email.rule,headers:"
msgid "Headers"
msgstr "Koppen"
msgctxt "field:inbound.email.rule,inbox:"
msgid "Inbox"
msgstr "Postvak IN"
msgctxt "field:inbound.email.rule,origin:"
msgid "Origin"
msgstr "Oorsprong"
msgctxt "field:inbound.email.rule,subject:"
msgid "Subject"
msgstr "Onderwerp"
msgctxt "field:inbound.email.rule.header,name:"
msgid "Name"
msgstr "Naam"
msgctxt "field:inbound.email.rule.header,rule:"
msgid "Rule"
msgstr "Regel"
msgctxt "field:inbound.email.rule.header,value:"
msgid "Value"
msgstr "Waarde"
msgctxt "help:inbound.email.inbox,endpoint:"
msgid "The URL where the emails must be posted."
msgstr "De URL waar de e-mails naartoe gestuurd moeten worden."
msgctxt "help:inbound.email.inbox,rules:"
msgid "The action of the first matching line is run."
msgstr "De actie van eerst overeenkomende regel wordt uitgevoerd."
msgctxt "help:inbound.email.rule,attachment_name:"
msgid "A regular expression to match any attachment name."
msgstr "Een reguliere expressie voor het vinden van passende bijlage namen."
msgctxt "help:inbound.email.rule,destination:"
msgid "A regular expression to match any receiver email addresses."
msgstr "Een reguliere expressie voor het vinden van passende email adressen."
msgctxt "help:inbound.email.rule,origin:"
msgid "A regular expression to match the sender email address."
msgstr ""
"Een reguliere expressie voor het vinden van passende afzender email "
"adressen."
msgctxt "help:inbound.email.rule,subject:"
msgid "A regular expression to match the subject."
msgstr "Een reguliere expressie voor het vinden van een passend onderwerp."
msgctxt "help:inbound.email.rule.header,name:"
msgid "The name of the header."
msgstr "De naam van de kop."
msgctxt "help:inbound.email.rule.header,value:"
msgid "A regular expression to match the header value."
msgstr "Een reguliere expressie voor het vinden van een passende kop."
msgctxt "model:inbound.email,string:"
msgid "Inbound Email"
msgstr "Inkomende e-mail"
msgctxt "model:inbound.email.inbox,string:"
msgid "Inbound Email Inbox"
msgstr "Inkomende e-mail inbox"
msgctxt "model:inbound.email.rule,string:"
msgid "Inbound Email Rule"
msgstr "Inkomende e-mail regel"
msgctxt "model:inbound.email.rule.header,string:"
msgid "Inbound Email Rule Header"
msgstr "Inkomende e-mail regel kop"
msgctxt "model:ir.action,name:act_inbound_email_form_relate"
msgid "Emails"
msgstr "Emails"
msgctxt "model:ir.action,name:act_inbound_email_inbox_form"
msgid "Inbox"
msgstr "Postvak IN"
msgctxt ""
"model:ir.model.button,confirm:inbound_email_inbox_new_identifier_button"
msgid ""
"This action will make the previous URL unusable. Do you want to continue?"
msgstr "Deze actie maakt de vorige URL onbruikbaar. Wilt u doorgaan?"
msgctxt ""
"model:ir.model.button,string:inbound_email_inbox_new_identifier_button"
msgid "New URL"
msgstr "Nieuwe URL"
msgctxt "model:ir.model.button,string:inbound_email_process_button"
msgid "Process"
msgstr "Verwerken"
msgctxt "model:ir.ui.menu,name:menu_inbound_email"
msgid "Inbound Email"
msgstr "Inkomende e-mail"
msgctxt "model:ir.ui.menu,name:menu_inbound_email_inbox_form"
msgid "Inbox"
msgstr "Postvak IN"

View File

@@ -0,0 +1,162 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:inbound.email,data:"
msgid "Data"
msgstr ""
msgctxt "field:inbound.email,data_id:"
msgid "Data ID"
msgstr ""
msgctxt "field:inbound.email,data_type:"
msgid "Data Type"
msgstr ""
msgctxt "field:inbound.email,inbox:"
msgid "Inbox"
msgstr ""
msgctxt "field:inbound.email,result:"
msgid "Result"
msgstr ""
msgctxt "field:inbound.email,rule:"
msgid "Rule"
msgstr ""
msgctxt "field:inbound.email.inbox,endpoint:"
msgid "Endpoint"
msgstr ""
msgctxt "field:inbound.email.inbox,identifier:"
msgid "Identifier"
msgstr ""
msgctxt "field:inbound.email.inbox,name:"
msgid "Name"
msgstr ""
msgctxt "field:inbound.email.inbox,rules:"
msgid "Rules"
msgstr ""
msgctxt "field:inbound.email.rule,action:"
msgid "Action"
msgstr ""
msgctxt "field:inbound.email.rule,attachment_name:"
msgid "Attachment Name"
msgstr ""
msgctxt "field:inbound.email.rule,destination:"
msgid "Destination"
msgstr ""
msgctxt "field:inbound.email.rule,headers:"
msgid "Headers"
msgstr ""
msgctxt "field:inbound.email.rule,inbox:"
msgid "Inbox"
msgstr ""
msgctxt "field:inbound.email.rule,origin:"
msgid "Origin"
msgstr ""
msgctxt "field:inbound.email.rule,subject:"
msgid "Subject"
msgstr ""
msgctxt "field:inbound.email.rule.header,name:"
msgid "Name"
msgstr ""
msgctxt "field:inbound.email.rule.header,rule:"
msgid "Rule"
msgstr ""
msgctxt "field:inbound.email.rule.header,value:"
msgid "Value"
msgstr ""
msgctxt "help:inbound.email.inbox,endpoint:"
msgid "The URL where the emails must be posted."
msgstr ""
msgctxt "help:inbound.email.inbox,rules:"
msgid "The action of the first matching line is run."
msgstr ""
msgctxt "help:inbound.email.rule,attachment_name:"
msgid "A regular expression to match any attachment name."
msgstr ""
msgctxt "help:inbound.email.rule,destination:"
msgid "A regular expression to match any receiver email addresses."
msgstr ""
msgctxt "help:inbound.email.rule,origin:"
msgid "A regular expression to match the sender email address."
msgstr ""
msgctxt "help:inbound.email.rule,subject:"
msgid "A regular expression to match the subject."
msgstr ""
msgctxt "help:inbound.email.rule.header,name:"
msgid "The name of the header."
msgstr ""
msgctxt "help:inbound.email.rule.header,value:"
msgid "A regular expression to match the header value."
msgstr ""
msgctxt "model:inbound.email,string:"
msgid "Inbound Email"
msgstr ""
msgctxt "model:inbound.email.inbox,string:"
msgid "Inbound Email Inbox"
msgstr ""
msgctxt "model:inbound.email.rule,string:"
msgid "Inbound Email Rule"
msgstr ""
msgctxt "model:inbound.email.rule.header,string:"
msgid "Inbound Email Rule Header"
msgstr ""
msgctxt "model:ir.action,name:act_inbound_email_form_relate"
msgid "Emails"
msgstr ""
msgctxt "model:ir.action,name:act_inbound_email_inbox_form"
msgid "Inbox"
msgstr ""
msgctxt ""
"model:ir.model.button,confirm:inbound_email_inbox_new_identifier_button"
msgid ""
"This action will make the previous URL unusable. Do you want to continue?"
msgstr ""
msgctxt ""
"model:ir.model.button,string:inbound_email_inbox_new_identifier_button"
msgid "New URL"
msgstr ""
msgctxt "model:ir.model.button,string:inbound_email_process_button"
msgid "Process"
msgstr ""
msgctxt "model:ir.ui.menu,name:menu_inbound_email"
msgid "Inbound Email"
msgstr ""
msgctxt "model:ir.ui.menu,name:menu_inbound_email_inbox_form"
msgid "Inbox"
msgstr ""

View File

@@ -0,0 +1,162 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:inbound.email,data:"
msgid "Data"
msgstr ""
msgctxt "field:inbound.email,data_id:"
msgid "Data ID"
msgstr ""
msgctxt "field:inbound.email,data_type:"
msgid "Data Type"
msgstr ""
msgctxt "field:inbound.email,inbox:"
msgid "Inbox"
msgstr ""
msgctxt "field:inbound.email,result:"
msgid "Result"
msgstr ""
msgctxt "field:inbound.email,rule:"
msgid "Rule"
msgstr ""
msgctxt "field:inbound.email.inbox,endpoint:"
msgid "Endpoint"
msgstr ""
msgctxt "field:inbound.email.inbox,identifier:"
msgid "Identifier"
msgstr ""
msgctxt "field:inbound.email.inbox,name:"
msgid "Name"
msgstr ""
msgctxt "field:inbound.email.inbox,rules:"
msgid "Rules"
msgstr ""
msgctxt "field:inbound.email.rule,action:"
msgid "Action"
msgstr ""
msgctxt "field:inbound.email.rule,attachment_name:"
msgid "Attachment Name"
msgstr ""
msgctxt "field:inbound.email.rule,destination:"
msgid "Destination"
msgstr ""
msgctxt "field:inbound.email.rule,headers:"
msgid "Headers"
msgstr ""
msgctxt "field:inbound.email.rule,inbox:"
msgid "Inbox"
msgstr ""
msgctxt "field:inbound.email.rule,origin:"
msgid "Origin"
msgstr ""
msgctxt "field:inbound.email.rule,subject:"
msgid "Subject"
msgstr ""
msgctxt "field:inbound.email.rule.header,name:"
msgid "Name"
msgstr ""
msgctxt "field:inbound.email.rule.header,rule:"
msgid "Rule"
msgstr ""
msgctxt "field:inbound.email.rule.header,value:"
msgid "Value"
msgstr ""
msgctxt "help:inbound.email.inbox,endpoint:"
msgid "The URL where the emails must be posted."
msgstr ""
msgctxt "help:inbound.email.inbox,rules:"
msgid "The action of the first matching line is run."
msgstr ""
msgctxt "help:inbound.email.rule,attachment_name:"
msgid "A regular expression to match any attachment name."
msgstr ""
msgctxt "help:inbound.email.rule,destination:"
msgid "A regular expression to match any receiver email addresses."
msgstr ""
msgctxt "help:inbound.email.rule,origin:"
msgid "A regular expression to match the sender email address."
msgstr ""
msgctxt "help:inbound.email.rule,subject:"
msgid "A regular expression to match the subject."
msgstr ""
msgctxt "help:inbound.email.rule.header,name:"
msgid "The name of the header."
msgstr ""
msgctxt "help:inbound.email.rule.header,value:"
msgid "A regular expression to match the header value."
msgstr ""
msgctxt "model:inbound.email,string:"
msgid "Inbound Email"
msgstr ""
msgctxt "model:inbound.email.inbox,string:"
msgid "Inbound Email Inbox"
msgstr ""
msgctxt "model:inbound.email.rule,string:"
msgid "Inbound Email Rule"
msgstr ""
msgctxt "model:inbound.email.rule.header,string:"
msgid "Inbound Email Rule Header"
msgstr ""
msgctxt "model:ir.action,name:act_inbound_email_form_relate"
msgid "Emails"
msgstr ""
msgctxt "model:ir.action,name:act_inbound_email_inbox_form"
msgid "Inbox"
msgstr ""
msgctxt ""
"model:ir.model.button,confirm:inbound_email_inbox_new_identifier_button"
msgid ""
"This action will make the previous URL unusable. Do you want to continue?"
msgstr ""
msgctxt ""
"model:ir.model.button,string:inbound_email_inbox_new_identifier_button"
msgid "New URL"
msgstr ""
msgctxt "model:ir.model.button,string:inbound_email_process_button"
msgid "Process"
msgstr ""
msgctxt "model:ir.ui.menu,name:menu_inbound_email"
msgid "Inbound Email"
msgstr ""
msgctxt "model:ir.ui.menu,name:menu_inbound_email_inbox_form"
msgid "Inbox"
msgstr ""

View File

@@ -0,0 +1,162 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:inbound.email,data:"
msgid "Data"
msgstr ""
msgctxt "field:inbound.email,data_id:"
msgid "Data ID"
msgstr ""
msgctxt "field:inbound.email,data_type:"
msgid "Data Type"
msgstr ""
msgctxt "field:inbound.email,inbox:"
msgid "Inbox"
msgstr ""
msgctxt "field:inbound.email,result:"
msgid "Result"
msgstr ""
msgctxt "field:inbound.email,rule:"
msgid "Rule"
msgstr ""
msgctxt "field:inbound.email.inbox,endpoint:"
msgid "Endpoint"
msgstr ""
msgctxt "field:inbound.email.inbox,identifier:"
msgid "Identifier"
msgstr ""
msgctxt "field:inbound.email.inbox,name:"
msgid "Name"
msgstr ""
msgctxt "field:inbound.email.inbox,rules:"
msgid "Rules"
msgstr ""
msgctxt "field:inbound.email.rule,action:"
msgid "Action"
msgstr ""
msgctxt "field:inbound.email.rule,attachment_name:"
msgid "Attachment Name"
msgstr ""
msgctxt "field:inbound.email.rule,destination:"
msgid "Destination"
msgstr ""
msgctxt "field:inbound.email.rule,headers:"
msgid "Headers"
msgstr ""
msgctxt "field:inbound.email.rule,inbox:"
msgid "Inbox"
msgstr ""
msgctxt "field:inbound.email.rule,origin:"
msgid "Origin"
msgstr ""
msgctxt "field:inbound.email.rule,subject:"
msgid "Subject"
msgstr ""
msgctxt "field:inbound.email.rule.header,name:"
msgid "Name"
msgstr ""
msgctxt "field:inbound.email.rule.header,rule:"
msgid "Rule"
msgstr ""
msgctxt "field:inbound.email.rule.header,value:"
msgid "Value"
msgstr ""
msgctxt "help:inbound.email.inbox,endpoint:"
msgid "The URL where the emails must be posted."
msgstr ""
msgctxt "help:inbound.email.inbox,rules:"
msgid "The action of the first matching line is run."
msgstr ""
msgctxt "help:inbound.email.rule,attachment_name:"
msgid "A regular expression to match any attachment name."
msgstr ""
msgctxt "help:inbound.email.rule,destination:"
msgid "A regular expression to match any receiver email addresses."
msgstr ""
msgctxt "help:inbound.email.rule,origin:"
msgid "A regular expression to match the sender email address."
msgstr ""
msgctxt "help:inbound.email.rule,subject:"
msgid "A regular expression to match the subject."
msgstr ""
msgctxt "help:inbound.email.rule.header,name:"
msgid "The name of the header."
msgstr ""
msgctxt "help:inbound.email.rule.header,value:"
msgid "A regular expression to match the header value."
msgstr ""
msgctxt "model:inbound.email,string:"
msgid "Inbound Email"
msgstr ""
msgctxt "model:inbound.email.inbox,string:"
msgid "Inbound Email Inbox"
msgstr ""
msgctxt "model:inbound.email.rule,string:"
msgid "Inbound Email Rule"
msgstr ""
msgctxt "model:inbound.email.rule.header,string:"
msgid "Inbound Email Rule Header"
msgstr ""
msgctxt "model:ir.action,name:act_inbound_email_form_relate"
msgid "Emails"
msgstr ""
msgctxt "model:ir.action,name:act_inbound_email_inbox_form"
msgid "Inbox"
msgstr ""
msgctxt ""
"model:ir.model.button,confirm:inbound_email_inbox_new_identifier_button"
msgid ""
"This action will make the previous URL unusable. Do you want to continue?"
msgstr ""
msgctxt ""
"model:ir.model.button,string:inbound_email_inbox_new_identifier_button"
msgid "New URL"
msgstr ""
msgctxt "model:ir.model.button,string:inbound_email_process_button"
msgid "Process"
msgstr ""
msgctxt "model:ir.ui.menu,name:menu_inbound_email"
msgid "Inbound Email"
msgstr ""
msgctxt "model:ir.ui.menu,name:menu_inbound_email_inbox_form"
msgid "Inbox"
msgstr ""

View File

@@ -0,0 +1,162 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:inbound.email,data:"
msgid "Data"
msgstr ""
msgctxt "field:inbound.email,data_id:"
msgid "Data ID"
msgstr ""
msgctxt "field:inbound.email,data_type:"
msgid "Data Type"
msgstr ""
msgctxt "field:inbound.email,inbox:"
msgid "Inbox"
msgstr ""
msgctxt "field:inbound.email,result:"
msgid "Result"
msgstr ""
msgctxt "field:inbound.email,rule:"
msgid "Rule"
msgstr ""
msgctxt "field:inbound.email.inbox,endpoint:"
msgid "Endpoint"
msgstr ""
msgctxt "field:inbound.email.inbox,identifier:"
msgid "Identifier"
msgstr ""
msgctxt "field:inbound.email.inbox,name:"
msgid "Name"
msgstr ""
msgctxt "field:inbound.email.inbox,rules:"
msgid "Rules"
msgstr ""
msgctxt "field:inbound.email.rule,action:"
msgid "Action"
msgstr ""
msgctxt "field:inbound.email.rule,attachment_name:"
msgid "Attachment Name"
msgstr ""
msgctxt "field:inbound.email.rule,destination:"
msgid "Destination"
msgstr ""
msgctxt "field:inbound.email.rule,headers:"
msgid "Headers"
msgstr ""
msgctxt "field:inbound.email.rule,inbox:"
msgid "Inbox"
msgstr ""
msgctxt "field:inbound.email.rule,origin:"
msgid "Origin"
msgstr ""
msgctxt "field:inbound.email.rule,subject:"
msgid "Subject"
msgstr ""
msgctxt "field:inbound.email.rule.header,name:"
msgid "Name"
msgstr ""
msgctxt "field:inbound.email.rule.header,rule:"
msgid "Rule"
msgstr ""
msgctxt "field:inbound.email.rule.header,value:"
msgid "Value"
msgstr ""
msgctxt "help:inbound.email.inbox,endpoint:"
msgid "The URL where the emails must be posted."
msgstr ""
msgctxt "help:inbound.email.inbox,rules:"
msgid "The action of the first matching line is run."
msgstr ""
msgctxt "help:inbound.email.rule,attachment_name:"
msgid "A regular expression to match any attachment name."
msgstr ""
msgctxt "help:inbound.email.rule,destination:"
msgid "A regular expression to match any receiver email addresses."
msgstr ""
msgctxt "help:inbound.email.rule,origin:"
msgid "A regular expression to match the sender email address."
msgstr ""
msgctxt "help:inbound.email.rule,subject:"
msgid "A regular expression to match the subject."
msgstr ""
msgctxt "help:inbound.email.rule.header,name:"
msgid "The name of the header."
msgstr ""
msgctxt "help:inbound.email.rule.header,value:"
msgid "A regular expression to match the header value."
msgstr ""
msgctxt "model:inbound.email,string:"
msgid "Inbound Email"
msgstr ""
msgctxt "model:inbound.email.inbox,string:"
msgid "Inbound Email Inbox"
msgstr ""
msgctxt "model:inbound.email.rule,string:"
msgid "Inbound Email Rule"
msgstr ""
msgctxt "model:inbound.email.rule.header,string:"
msgid "Inbound Email Rule Header"
msgstr ""
msgctxt "model:ir.action,name:act_inbound_email_form_relate"
msgid "Emails"
msgstr ""
msgctxt "model:ir.action,name:act_inbound_email_inbox_form"
msgid "Inbox"
msgstr ""
msgctxt ""
"model:ir.model.button,confirm:inbound_email_inbox_new_identifier_button"
msgid ""
"This action will make the previous URL unusable. Do you want to continue?"
msgstr ""
msgctxt ""
"model:ir.model.button,string:inbound_email_inbox_new_identifier_button"
msgid "New URL"
msgstr ""
msgctxt "model:ir.model.button,string:inbound_email_process_button"
msgid "Process"
msgstr ""
msgctxt "model:ir.ui.menu,name:menu_inbound_email"
msgid "Inbound Email"
msgstr ""
msgctxt "model:ir.ui.menu,name:menu_inbound_email_inbox_form"
msgid "Inbox"
msgstr ""

View File

@@ -0,0 +1,168 @@
#
#, fuzzy
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:inbound.email,data:"
msgid "Data"
msgstr "Podatki"
msgctxt "field:inbound.email,data_id:"
msgid "Data ID"
msgstr "ID podatka"
msgctxt "field:inbound.email,data_type:"
msgid "Data Type"
msgstr "Vrsta podatka"
msgctxt "field:inbound.email,inbox:"
msgid "Inbox"
msgstr "Prejeto"
msgctxt "field:inbound.email,result:"
msgid "Result"
msgstr "Rezultat"
msgctxt "field:inbound.email,rule:"
msgid "Rule"
msgstr "Pravilo"
msgctxt "field:inbound.email.inbox,endpoint:"
msgid "Endpoint"
msgstr ""
msgctxt "field:inbound.email.inbox,identifier:"
msgid "Identifier"
msgstr "Identifikator"
msgctxt "field:inbound.email.inbox,name:"
msgid "Name"
msgstr "Naziv"
msgctxt "field:inbound.email.inbox,rules:"
msgid "Rules"
msgstr "Pravila"
msgctxt "field:inbound.email.rule,action:"
msgid "Action"
msgstr "Ukrep"
msgctxt "field:inbound.email.rule,attachment_name:"
msgid "Attachment Name"
msgstr "Ime priloge"
msgctxt "field:inbound.email.rule,destination:"
msgid "Destination"
msgstr "Cilj"
msgctxt "field:inbound.email.rule,headers:"
msgid "Headers"
msgstr "Glave"
msgctxt "field:inbound.email.rule,inbox:"
msgid "Inbox"
msgstr "Prejeto"
msgctxt "field:inbound.email.rule,origin:"
msgid "Origin"
msgstr "Vir"
msgctxt "field:inbound.email.rule,subject:"
msgid "Subject"
msgstr "Zadeva"
msgctxt "field:inbound.email.rule.header,name:"
msgid "Name"
msgstr "Naziv"
msgctxt "field:inbound.email.rule.header,rule:"
msgid "Rule"
msgstr "Pravilo"
msgctxt "field:inbound.email.rule.header,value:"
msgid "Value"
msgstr "Vrednost"
msgctxt "help:inbound.email.inbox,endpoint:"
msgid "The URL where the emails must be posted."
msgstr ""
msgctxt "help:inbound.email.inbox,rules:"
msgid "The action of the first matching line is run."
msgstr "Izvede se ukrep prve ujemajoče se vrstice."
msgctxt "help:inbound.email.rule,attachment_name:"
msgid "A regular expression to match any attachment name."
msgstr ""
msgctxt "help:inbound.email.rule,destination:"
msgid "A regular expression to match any receiver email addresses."
msgstr ""
msgctxt "help:inbound.email.rule,origin:"
msgid "A regular expression to match the sender email address."
msgstr ""
msgctxt "help:inbound.email.rule,subject:"
msgid "A regular expression to match the subject."
msgstr ""
msgctxt "help:inbound.email.rule.header,name:"
msgid "The name of the header."
msgstr "Naziv glave."
msgctxt "help:inbound.email.rule.header,value:"
msgid "A regular expression to match the header value."
msgstr ""
#, fuzzy
msgctxt "model:inbound.email,string:"
msgid "Inbound Email"
msgstr "Vhodna e-pošta"
#, fuzzy
msgctxt "model:inbound.email.inbox,string:"
msgid "Inbound Email Inbox"
msgstr "Prejeta vhodna e-pošta"
#, fuzzy
msgctxt "model:inbound.email.rule,string:"
msgid "Inbound Email Rule"
msgstr "Pravilo za vhodno e-pošto"
#, fuzzy
msgctxt "model:inbound.email.rule.header,string:"
msgid "Inbound Email Rule Header"
msgstr "Pravilo za glavo vhodno e-pošto"
#, fuzzy
msgctxt "model:ir.action,name:act_inbound_email_form_relate"
msgid "Emails"
msgstr "E-pošte"
msgctxt "model:ir.action,name:act_inbound_email_inbox_form"
msgid "Inbox"
msgstr "Prejeto"
msgctxt ""
"model:ir.model.button,confirm:inbound_email_inbox_new_identifier_button"
msgid ""
"This action will make the previous URL unusable. Do you want to continue?"
msgstr ""
msgctxt ""
"model:ir.model.button,string:inbound_email_inbox_new_identifier_button"
msgid "New URL"
msgstr "Nov URL"
msgctxt "model:ir.model.button,string:inbound_email_process_button"
msgid "Process"
msgstr "Obdelaj"
msgctxt "model:ir.ui.menu,name:menu_inbound_email"
msgid "Inbound Email"
msgstr "Vhodna e-pošta"
msgctxt "model:ir.ui.menu,name:menu_inbound_email_inbox_form"
msgid "Inbox"
msgstr "Prejeto"

View File

@@ -0,0 +1,162 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:inbound.email,data:"
msgid "Data"
msgstr ""
msgctxt "field:inbound.email,data_id:"
msgid "Data ID"
msgstr ""
msgctxt "field:inbound.email,data_type:"
msgid "Data Type"
msgstr ""
msgctxt "field:inbound.email,inbox:"
msgid "Inbox"
msgstr ""
msgctxt "field:inbound.email,result:"
msgid "Result"
msgstr ""
msgctxt "field:inbound.email,rule:"
msgid "Rule"
msgstr ""
msgctxt "field:inbound.email.inbox,endpoint:"
msgid "Endpoint"
msgstr ""
msgctxt "field:inbound.email.inbox,identifier:"
msgid "Identifier"
msgstr ""
msgctxt "field:inbound.email.inbox,name:"
msgid "Name"
msgstr ""
msgctxt "field:inbound.email.inbox,rules:"
msgid "Rules"
msgstr ""
msgctxt "field:inbound.email.rule,action:"
msgid "Action"
msgstr ""
msgctxt "field:inbound.email.rule,attachment_name:"
msgid "Attachment Name"
msgstr ""
msgctxt "field:inbound.email.rule,destination:"
msgid "Destination"
msgstr ""
msgctxt "field:inbound.email.rule,headers:"
msgid "Headers"
msgstr ""
msgctxt "field:inbound.email.rule,inbox:"
msgid "Inbox"
msgstr ""
msgctxt "field:inbound.email.rule,origin:"
msgid "Origin"
msgstr ""
msgctxt "field:inbound.email.rule,subject:"
msgid "Subject"
msgstr ""
msgctxt "field:inbound.email.rule.header,name:"
msgid "Name"
msgstr ""
msgctxt "field:inbound.email.rule.header,rule:"
msgid "Rule"
msgstr ""
msgctxt "field:inbound.email.rule.header,value:"
msgid "Value"
msgstr ""
msgctxt "help:inbound.email.inbox,endpoint:"
msgid "The URL where the emails must be posted."
msgstr ""
msgctxt "help:inbound.email.inbox,rules:"
msgid "The action of the first matching line is run."
msgstr ""
msgctxt "help:inbound.email.rule,attachment_name:"
msgid "A regular expression to match any attachment name."
msgstr ""
msgctxt "help:inbound.email.rule,destination:"
msgid "A regular expression to match any receiver email addresses."
msgstr ""
msgctxt "help:inbound.email.rule,origin:"
msgid "A regular expression to match the sender email address."
msgstr ""
msgctxt "help:inbound.email.rule,subject:"
msgid "A regular expression to match the subject."
msgstr ""
msgctxt "help:inbound.email.rule.header,name:"
msgid "The name of the header."
msgstr ""
msgctxt "help:inbound.email.rule.header,value:"
msgid "A regular expression to match the header value."
msgstr ""
msgctxt "model:inbound.email,string:"
msgid "Inbound Email"
msgstr ""
msgctxt "model:inbound.email.inbox,string:"
msgid "Inbound Email Inbox"
msgstr ""
msgctxt "model:inbound.email.rule,string:"
msgid "Inbound Email Rule"
msgstr ""
msgctxt "model:inbound.email.rule.header,string:"
msgid "Inbound Email Rule Header"
msgstr ""
msgctxt "model:ir.action,name:act_inbound_email_form_relate"
msgid "Emails"
msgstr ""
msgctxt "model:ir.action,name:act_inbound_email_inbox_form"
msgid "Inbox"
msgstr ""
msgctxt ""
"model:ir.model.button,confirm:inbound_email_inbox_new_identifier_button"
msgid ""
"This action will make the previous URL unusable. Do you want to continue?"
msgstr ""
msgctxt ""
"model:ir.model.button,string:inbound_email_inbox_new_identifier_button"
msgid "New URL"
msgstr ""
msgctxt "model:ir.model.button,string:inbound_email_process_button"
msgid "Process"
msgstr ""
msgctxt "model:ir.ui.menu,name:menu_inbound_email"
msgid "Inbound Email"
msgstr ""
msgctxt "model:ir.ui.menu,name:menu_inbound_email_inbox_form"
msgid "Inbox"
msgstr ""

View File

@@ -0,0 +1,162 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:inbound.email,data:"
msgid "Data"
msgstr ""
msgctxt "field:inbound.email,data_id:"
msgid "Data ID"
msgstr ""
msgctxt "field:inbound.email,data_type:"
msgid "Data Type"
msgstr ""
msgctxt "field:inbound.email,inbox:"
msgid "Inbox"
msgstr ""
msgctxt "field:inbound.email,result:"
msgid "Result"
msgstr ""
msgctxt "field:inbound.email,rule:"
msgid "Rule"
msgstr ""
msgctxt "field:inbound.email.inbox,endpoint:"
msgid "Endpoint"
msgstr ""
msgctxt "field:inbound.email.inbox,identifier:"
msgid "Identifier"
msgstr ""
msgctxt "field:inbound.email.inbox,name:"
msgid "Name"
msgstr ""
msgctxt "field:inbound.email.inbox,rules:"
msgid "Rules"
msgstr ""
msgctxt "field:inbound.email.rule,action:"
msgid "Action"
msgstr ""
msgctxt "field:inbound.email.rule,attachment_name:"
msgid "Attachment Name"
msgstr ""
msgctxt "field:inbound.email.rule,destination:"
msgid "Destination"
msgstr ""
msgctxt "field:inbound.email.rule,headers:"
msgid "Headers"
msgstr ""
msgctxt "field:inbound.email.rule,inbox:"
msgid "Inbox"
msgstr ""
msgctxt "field:inbound.email.rule,origin:"
msgid "Origin"
msgstr ""
msgctxt "field:inbound.email.rule,subject:"
msgid "Subject"
msgstr ""
msgctxt "field:inbound.email.rule.header,name:"
msgid "Name"
msgstr ""
msgctxt "field:inbound.email.rule.header,rule:"
msgid "Rule"
msgstr ""
msgctxt "field:inbound.email.rule.header,value:"
msgid "Value"
msgstr ""
msgctxt "help:inbound.email.inbox,endpoint:"
msgid "The URL where the emails must be posted."
msgstr ""
msgctxt "help:inbound.email.inbox,rules:"
msgid "The action of the first matching line is run."
msgstr ""
msgctxt "help:inbound.email.rule,attachment_name:"
msgid "A regular expression to match any attachment name."
msgstr ""
msgctxt "help:inbound.email.rule,destination:"
msgid "A regular expression to match any receiver email addresses."
msgstr ""
msgctxt "help:inbound.email.rule,origin:"
msgid "A regular expression to match the sender email address."
msgstr ""
msgctxt "help:inbound.email.rule,subject:"
msgid "A regular expression to match the subject."
msgstr ""
msgctxt "help:inbound.email.rule.header,name:"
msgid "The name of the header."
msgstr ""
msgctxt "help:inbound.email.rule.header,value:"
msgid "A regular expression to match the header value."
msgstr ""
msgctxt "model:inbound.email,string:"
msgid "Inbound Email"
msgstr ""
msgctxt "model:inbound.email.inbox,string:"
msgid "Inbound Email Inbox"
msgstr ""
msgctxt "model:inbound.email.rule,string:"
msgid "Inbound Email Rule"
msgstr ""
msgctxt "model:inbound.email.rule.header,string:"
msgid "Inbound Email Rule Header"
msgstr ""
msgctxt "model:ir.action,name:act_inbound_email_form_relate"
msgid "Emails"
msgstr ""
msgctxt "model:ir.action,name:act_inbound_email_inbox_form"
msgid "Inbox"
msgstr ""
msgctxt ""
"model:ir.model.button,confirm:inbound_email_inbox_new_identifier_button"
msgid ""
"This action will make the previous URL unusable. Do you want to continue?"
msgstr ""
msgctxt ""
"model:ir.model.button,string:inbound_email_inbox_new_identifier_button"
msgid "New URL"
msgstr ""
msgctxt "model:ir.model.button,string:inbound_email_process_button"
msgid "Process"
msgstr ""
msgctxt "model:ir.ui.menu,name:menu_inbound_email"
msgid "Inbound Email"
msgstr ""
msgctxt "model:ir.ui.menu,name:menu_inbound_email_inbox_form"
msgid "Inbox"
msgstr ""

View File

@@ -0,0 +1,162 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:inbound.email,data:"
msgid "Data"
msgstr ""
msgctxt "field:inbound.email,data_id:"
msgid "Data ID"
msgstr ""
msgctxt "field:inbound.email,data_type:"
msgid "Data Type"
msgstr ""
msgctxt "field:inbound.email,inbox:"
msgid "Inbox"
msgstr ""
msgctxt "field:inbound.email,result:"
msgid "Result"
msgstr ""
msgctxt "field:inbound.email,rule:"
msgid "Rule"
msgstr ""
msgctxt "field:inbound.email.inbox,endpoint:"
msgid "Endpoint"
msgstr ""
msgctxt "field:inbound.email.inbox,identifier:"
msgid "Identifier"
msgstr ""
msgctxt "field:inbound.email.inbox,name:"
msgid "Name"
msgstr ""
msgctxt "field:inbound.email.inbox,rules:"
msgid "Rules"
msgstr ""
msgctxt "field:inbound.email.rule,action:"
msgid "Action"
msgstr ""
msgctxt "field:inbound.email.rule,attachment_name:"
msgid "Attachment Name"
msgstr ""
msgctxt "field:inbound.email.rule,destination:"
msgid "Destination"
msgstr ""
msgctxt "field:inbound.email.rule,headers:"
msgid "Headers"
msgstr ""
msgctxt "field:inbound.email.rule,inbox:"
msgid "Inbox"
msgstr ""
msgctxt "field:inbound.email.rule,origin:"
msgid "Origin"
msgstr ""
msgctxt "field:inbound.email.rule,subject:"
msgid "Subject"
msgstr ""
msgctxt "field:inbound.email.rule.header,name:"
msgid "Name"
msgstr ""
msgctxt "field:inbound.email.rule.header,rule:"
msgid "Rule"
msgstr ""
msgctxt "field:inbound.email.rule.header,value:"
msgid "Value"
msgstr ""
msgctxt "help:inbound.email.inbox,endpoint:"
msgid "The URL where the emails must be posted."
msgstr ""
msgctxt "help:inbound.email.inbox,rules:"
msgid "The action of the first matching line is run."
msgstr ""
msgctxt "help:inbound.email.rule,attachment_name:"
msgid "A regular expression to match any attachment name."
msgstr ""
msgctxt "help:inbound.email.rule,destination:"
msgid "A regular expression to match any receiver email addresses."
msgstr ""
msgctxt "help:inbound.email.rule,origin:"
msgid "A regular expression to match the sender email address."
msgstr ""
msgctxt "help:inbound.email.rule,subject:"
msgid "A regular expression to match the subject."
msgstr ""
msgctxt "help:inbound.email.rule.header,name:"
msgid "The name of the header."
msgstr ""
msgctxt "help:inbound.email.rule.header,value:"
msgid "A regular expression to match the header value."
msgstr ""
msgctxt "model:inbound.email,string:"
msgid "Inbound Email"
msgstr ""
msgctxt "model:inbound.email.inbox,string:"
msgid "Inbound Email Inbox"
msgstr ""
msgctxt "model:inbound.email.rule,string:"
msgid "Inbound Email Rule"
msgstr ""
msgctxt "model:inbound.email.rule.header,string:"
msgid "Inbound Email Rule Header"
msgstr ""
msgctxt "model:ir.action,name:act_inbound_email_form_relate"
msgid "Emails"
msgstr ""
msgctxt "model:ir.action,name:act_inbound_email_inbox_form"
msgid "Inbox"
msgstr ""
msgctxt ""
"model:ir.model.button,confirm:inbound_email_inbox_new_identifier_button"
msgid ""
"This action will make the previous URL unusable. Do you want to continue?"
msgstr ""
msgctxt ""
"model:ir.model.button,string:inbound_email_inbox_new_identifier_button"
msgid "New URL"
msgstr ""
msgctxt "model:ir.model.button,string:inbound_email_process_button"
msgid "Process"
msgstr ""
msgctxt "model:ir.ui.menu,name:menu_inbound_email"
msgid "Inbound Email"
msgstr ""
msgctxt "model:ir.ui.menu,name:menu_inbound_email_inbox_form"
msgid "Inbox"
msgstr ""

View File

@@ -0,0 +1,43 @@
# This file is part of Tryton. The COPYRIGHT file at the top level of
# this repository contains the full copyright notices and license terms.
import json
import trytond.config as config
from trytond.protocols.wrappers import (
HTTPStatus, Response, abort, set_max_request_size, with_pool,
with_transaction)
from trytond.wsgi import app
@app.route(
'/<database_name>/inbound_email/inbox/<identifier>', methods={'POST'})
@set_max_request_size(config.getint(
'inbound_email', 'max_size',
default=config.getint('request', 'max_size')))
@with_pool
@with_transaction()
def inbound_email(request, pool, identifier):
Inbox = pool.get('inbound.email.inbox')
Email = pool.get('inbound.email')
try:
inbox, = Inbox.search([
('identifier', '=', identifier),
])
except ValueError:
abort(HTTPStatus.NOT_FOUND)
data_type = request.args.get('type', 'raw')
if request.form:
data = json.dumps(request.form.to_dict()).encode()
else:
data = request.data
emails = Email.from_webhook(inbox, data, data_type)
if not emails:
abort(HTTPStatus.BAD_REQUEST)
for email in emails:
inbox.process(email)
Email.save(emails)
return Response(status=HTTPStatus.NO_CONTENT)

View File

@@ -0,0 +1,2 @@
# This file is part of Tryton. The COPYRIGHT file at the top level of
# this repository contains the full copyright notices and license terms.

View File

@@ -0,0 +1,383 @@
# This file is part of Tryton. The COPYRIGHT file at the top level of
# this repository contains the full copyright notices and license terms.
import json
import uuid
from email.message import EmailMessage
from unittest.mock import patch
from trytond.pool import Pool
from trytond.protocols.wrappers import HTTPStatus
from trytond.tests.test_tryton import (
ModuleTestCase, RouteTestCase, with_transaction)
from trytond.transaction import Transaction
class InboundEmailTestCase(ModuleTestCase):
"Test Inbound Email module"
module = 'inbound_email'
def get_message(self):
message = EmailMessage()
message['From'] = "John Doe <john.doe@example.com>"
message['To'] = (
"Michael Scott <michael@example.com>, pam@example.com")
message['Cc'] = 'jim@example.com'
message['Subject'] = "The office"
message.set_content("Hello")
message.add_attachment(
b'bin', maintype='application', subtype='octet-stream',
filename='data.bin')
return message
def get_message_dict(self, headers):
return {
'from': 'john.doe@example.com',
'to': ['michael@example.com', 'pam@example.com'],
'cc': ['jim@example.com'],
'subject': 'The office',
'text': 'Hello\n',
'attachments': [{
'filename': 'data.bin',
'type': 'application/octet-stream',
'data': b'bin',
}],
'headers': dict(headers.items()),
}
@with_transaction()
def test_inbox_identifier(self):
"Test inbox identifier"
pool = Pool()
Inbox = pool.get('inbound.email.inbox')
inbox = Inbox(name="Test")
inbox.save()
self.assertFalse(inbox.identifier)
self.assertFalse(inbox.endpoint)
Inbox.new_identifier([inbox])
self.assertTrue(inbox.identifier)
self.assertTrue(inbox.endpoint)
Inbox.new_identifier([inbox])
self.assertFalse(inbox.identifier)
self.assertFalse(inbox.endpoint)
@with_transaction()
def test_email_from_webhook(self):
"Test email from webhook"
pool = Pool()
Email = pool.get('inbound.email')
Inbox = pool.get('inbound.email.inbox')
message = self.get_message()
inbox = Inbox()
data = message.as_bytes()
for data_type in ['raw', 'mailpace', 'postmark', 'sendgrid']:
with self.subTest(data_type=data_type):
emails = Email.from_webhook(inbox, data, data_type=data_type)
email, = emails
self.assertEqual(email.inbox, inbox)
self.assertEqual(email.data, data)
self.assertEqual(email.data_type, data_type)
with self.subTest(data_type='mailchimp'):
data = json.dumps({
'mandrill_events': [{
'event': 'inbound',
}, {
'event': 'inbound',
}],
})
emails = Email.from_webhook(inbox, data, data_type='mailchimp')
self.assertEqual(len(emails), 2)
email = emails[0]
self.assertEqual(email.inbox, inbox)
self.assertEqual(json.loads(email.data), {'event': 'inbound'})
self.assertEqual(email.data_type, 'mailchimp')
@with_transaction()
def test_email_as_dict_raw(self):
"Test raw email as dict"
pool = Pool()
Email = pool.get('inbound.email')
message = self.get_message()
email = Email(data=message.as_bytes(), data_type='raw')
self.assertDictEqual(email.as_dict(), self.get_message_dict(message))
@with_transaction()
def test_email_as_dict_mailchimp(self):
"Test mailchimp email as dict"
pool = Pool()
Email = pool.get('inbound.email')
message = self.get_message()
data = json.dumps({
'event': 'inbound',
'raw_msg': message.as_string(),
}).encode('utf-8')
email = Email(data=data, data_type='mailchimp')
self.assertDictEqual(email.as_dict(), self.get_message_dict(message))
@with_transaction()
def test_email_as_dict_mailpace(self):
"Test mailpace email as dict"
pool = Pool()
Email = pool.get('inbound.email')
message = self.get_message()
data = json.dumps({
'raw': message.as_string(),
}).encode('utf-8')
email = Email(data=data, data_type='mailpace')
self.assertDictEqual(email.as_dict(), self.get_message_dict(message))
@with_transaction()
def test_email_as_dict_postmark(self):
"Test postmark email as dict"
pool = Pool()
Email = pool.get('inbound.email')
data = json.dumps({
'FromFull': {
'Name': 'John Doe',
'Email': 'john.doe@example.com',
},
'ToFull': [{
'Name': 'Michael',
'Email': 'michael@example.com',
}, {
'Email': 'pam@example.com',
},
],
'CcFull': [{
'Email': 'jim@example.com',
}],
'Subject': 'The office',
'TextBody': 'Hello\n',
'Attachments': [{
'Name': 'data.bin',
'Content': 'Ymlu',
'ContentType': 'application/octet-stream',
}],
'Headers': [{
'Name': 'Message-ID',
'Value': '12345@example.com',
}],
}).encode('utf-8')
email = Email(data=data, data_type='postmark')
self.assertDictEqual(
email.as_dict(),
self.get_message_dict({'Message-ID': '12345@example.com'}))
@with_transaction()
def test_email_as_dict_sendgrid(self):
"Test sendgrid email as dict"
pool = Pool()
Email = pool.get('inbound.email')
message = self.get_message()
data = json.dumps({
'email': message.as_string(),
}).encode('utf-8')
email = Email(data=data, data_type='sendgrid')
self.assertDictEqual(email.as_dict(), self.get_message_dict(message))
@with_transaction()
def test_email_process(self):
"Test email process"
pool = Pool()
Inbox = pool.get('inbound.email.inbox')
Rule = pool.get('inbound.email.rule')
Email = pool.get('inbound.email')
inbox = Inbox(name="Test")
inbox.rules = [Rule()]
inbox.save()
message = self.get_message()
email = Email(inbox=inbox, data=message.as_bytes(), data_type='raw')
email.save()
with patch.object(Rule, 'run') as run:
Email.process([email])
run.assert_called_once_with(email)
def _get_rule(self, **values):
pool = Pool()
Rule = pool.get('inbound.email.rule')
for name in Rule._fields:
values.setdefault(name, None)
return Rule(**values)
@with_transaction()
def test_rule_match_origin(self):
"Test rule match origin"
rule = self._get_rule(origin="foo.*@example.com")
self.assertTrue(rule.match({'from': "foo@example.com"}))
self.assertFalse(rule.match({'from': "bar@example.com"}))
self.assertFalse(rule.match({}))
@with_transaction()
def test_rule_match_destination(self):
"Test rule match destination"
rule = self._get_rule(destination="foo.*@example.com")
self.assertTrue(rule.match({'to': ["foo@example.com"]}))
self.assertTrue(rule.match({'to': [
"bar@example.com", "foo@example.com"]}))
self.assertTrue(rule.match({'cc': ["foo@example.com"]}))
self.assertTrue(rule.match({'bcc': ["foo@example.com"]}))
self.assertFalse(rule.match({'to': ["bar@example.com"]}))
self.assertFalse(rule.match({}))
@with_transaction()
def test_rule_match_subject(self):
"Test rule match subject"
rule = self._get_rule(subject="Test")
self.assertTrue(rule.match({'subject': "Email test subject"}))
self.assertFalse(rule.match({'subject': "Email subject"}))
self.assertFalse(rule.match({}))
@with_transaction()
def test_rule_match_attachment_name(self):
"Test rule match attachment name"
rule = self._get_rule(attachment_name="foo")
self.assertTrue(rule.match({'attachments': [
{'filename': "foo.pdf"}]}))
self.assertTrue(rule.match({'attachments': [
{'filename': "bar.pdf"}, {'filename': "foo.pdf"}]}))
self.assertFalse(rule.match({'attachments': [
{'filename': "bar.pdf"}]}))
self.assertFalse(rule.match({}))
@with_transaction()
def test_rule_match_headers(self):
"Test rule match headers"
rule = self._get_rule(
headers=[{'name': 'Message-ID', 'value': 'tryton-'}])
self.assertTrue(rule.match({'headers': {'Message-ID': 'tryton-42'}}))
self.assertTrue(rule.match({'headers': {
'From': 'foo@example.com',
'Message-ID': 'tryton-42',
}}))
self.assertFalse(rule.match({'headers': {'Message-ID': 'bar-42'}}))
self.assertFalse(rule.match({'headers': {
'From': 'tryton-test@example.com',
'Message-ID': 'bar-42',
}}))
self.assertFalse(rule.match({}))
@with_transaction()
def test_rule_run(self):
"Test run rule"
pool = Pool()
Rule = pool.get('inbound.email.rule')
Email = pool.get('inbound.email')
rule = Rule(action='inbound.email|test')
email = Email()
with patch.object(Email, 'test', create=True) as func:
func.return_value = result = Rule()
rule.run(email)
func.assert_called_once_with(email, rule)
self.assertEqual(email.result, result)
class InboundEmailRouteTestCase(RouteTestCase):
"Test Inbound Email route"
module = 'inbound_email'
identifier = uuid.uuid4().hex
@classmethod
def setUpDatabase(cls):
pool = Pool()
Inbox = pool.get('inbound.email.inbox')
Inbox(name="Test", identifier=cls.identifier).save()
def test_inbound_email_route_data(self):
"Test inbound email route with data"
client = self.client()
response = client.post(
f'/{self.db_name}/inbound_email/inbox/{self.identifier}',
data=b'data')
self.assertEqual(response.status_code, HTTPStatus.NO_CONTENT)
@with_transaction()
def check():
pool = Pool()
Email = pool.get('inbound.email')
email, = Email.search([])
try:
self.assertEqual(email.data, b'data')
self.assertEqual(email.data_type, 'raw')
self.assertTrue(email.inbox)
finally:
Email.delete([email])
Transaction().commit()
check()
def test_inbound_email_route_form(self):
"Test inbound email route with form"
client = self.client()
response = client.post(
f'/{self.db_name}/inbound_email/inbox/{self.identifier}',
data={
'email': 'data',
})
self.assertEqual(response.status_code, HTTPStatus.NO_CONTENT)
@with_transaction()
def check():
pool = Pool()
Email = pool.get('inbound.email')
email, = Email.search([])
try:
self.assertEqual(email.data, b'{"email": "data"}')
self.assertEqual(email.data_type, 'raw')
self.assertTrue(email.inbox)
finally:
Email.delete([email])
Transaction().commit()
check()
def test_inbound_email_route_not_found(self):
"Test inbound email route not found"
client = self.client()
response = client.post(
f'/{self.db_name}/inbound_email/inbox/unknown',
data=b'foo')
self.assertEqual(response.status_code, HTTPStatus.NOT_FOUND)
del ModuleTestCase, RouteTestCase

View File

@@ -0,0 +1,14 @@
[tryton]
version=7.8.0
depends:
ir
res
xml:
inbound_email.xml
[register]
model:
inbound_email.Inbox
inbound_email.Email
inbound_email.Rule
inbound_email.RuleHeader

View File

@@ -0,0 +1,24 @@
<?xml version="1.0"?>
<!-- This file is part of Tryton. The COPYRIGHT file at the top level of
this repository contains the full copyright notices and license terms. -->
<form col="2">
<label name="inbox"/>
<field name="inbox"/>
<label name="id"/>
<field name="id"/>
<label name="data_type"/>
<field name="data_type"/>
<label name="data"/>
<field name="data"/>
<label name="rule"/>
<field name="rule"/>
<label name="result"/>
<field name="result"/>
<button name="process" colspan="2"/>
</form>

View File

@@ -0,0 +1,13 @@
<?xml version="1.0"?>
<!-- This file is part of Tryton. The COPYRIGHT file at the top level of
this repository contains the full copyright notices and license terms. -->
<form>
<label name="name"/>
<field name="name" colspan="3"/>
<label name="endpoint"/>
<field name="endpoint" colspan="2"/>
<button name="new_identifier"/>
<field name="rules" colspan="4" view_ids="inbound_email.inbound_email_rule_view_list_sequence"/>
</form>

View File

@@ -0,0 +1,6 @@
<?xml version="1.0"?>
<!-- This file is part of Tryton. The COPYRIGHT file at the top level of
this repository contains the full copyright notices and license terms. -->
<tree>
<field name="name" expand="2"/>
</tree>

View File

@@ -0,0 +1,10 @@
<?xml version="1.0"?>
<!-- This file is part of Tryton. The COPYRIGHT file at the top level of
this repository contains the full copyright notices and license terms. -->
<tree>
<field name="inbox" expand="1"/>
<field name="id" expand="2"/>
<field name="rule" expand="1"/>
<field name="result" expand="2"/>
<button name="process" multiple="1"/>
</tree>

View File

@@ -0,0 +1,25 @@
<?xml version="1.0"?>
<!-- This file is part of Tryton. The COPYRIGHT file at the top level of
this repository contains the full copyright notices and license terms. -->
<form>
<label name="inbox"/>
<field name="inbox" colspan="3"/>
<label name="origin"/>
<field name="origin"/>
<label name="destination"/>
<field name="destination"/>
<label name="subject"/>
<field name="subject" colspan="3"/>
<label name="attachment_name"/>
<field name="attachment_name" colspan="3"/>
<group name="headers" expandable="0" col="1" colspan="4">
<field name="headers"/>
</group>
<label name="action"/>
<field name="action" colspan="3"/>
</form>

View File

@@ -0,0 +1,9 @@
<?xml version="1.0"?>
<!-- This file is part of Tryton. The COPYRIGHT file at the top level of
this repository contains the full copyright notices and license terms. -->
<form>
<label name="name"/>
<field name="name"/>
<label name="value"/>
<field name="value"/>
</form>

View File

@@ -0,0 +1,7 @@
<?xml version="1.0"?>
<!-- This file is part of Tryton. The COPYRIGHT file at the top level of
this repository contains the full copyright notices and license terms. -->
<tree editable="1">
<field name="name" expand="1"/>
<field name="value" expand="2"/>
</tree>

View File

@@ -0,0 +1,7 @@
<?xml version="1.0"?>
<!-- This file is part of Tryton. The COPYRIGHT file at the top level of
this repository contains the full copyright notices and license terms. -->
<tree>
<field name="inbox" expand="1"/>
<field name="action" expand="2"/>
</tree>

View File

@@ -0,0 +1,11 @@
<?xml version="1.0"?>
<!-- This file is part of Tryton. The COPYRIGHT file at the top level of
this repository contains the full copyright notices and license terms. -->
<tree sequence="sequence">
<field name="inbox" expand="1"/>
<field name="origin" expand="1"/>
<field name="destination" expand="1"/>
<field name="subject" expand="1"/>
<field name="attachment_name" expand="1"/>
<field name="action" expand="2"/>
</tree>