Schritt 1: Erstelle ein neues Model, um alle eingehenden E-Mails zu speichern. Schalte den Debug-Modus ein und gehe zu Einstellungen / Technisch / Datenbankstruktur / Modelle. Erstelle ein neues Model.
Modellbeschreibung: Incoming Emails
Modell: x_incoming_emails
Hat E-Mail-Thread: Ja (wichtig!)
Zugriffsrechte: Verkauf/Administrator

Schritt 2: Erstelle unter Einstellungen / Technisch / Datenbankstruktur / Felder drei neue Felder im neuen Model, um die E-Mails zu kategorisieren.
Feld 1:
- Name: x_incoming_mail_category
- Bezeichnung: Mail Kategorie
- Modell: Incoming Emails
- Feldtyp: Text
- KI-Feld: Ja
KI-Befehl:
Task: Categorize the following message.
Constraint: Output exactly ONE category (ONE word) from the list below. Do not include punctuation, prefixes, or explanations.
Categories & Rules:
- Sales: Use ONLY if the customer expresses a clear intent to buy or purchase a product.
- Support: Use for product questions, order status, technical issues, or general inquiries. (If they are asking about a product but haven't committed to buying, it is Support).
- Logistics: Use ONLY for pallet transports, shipping coordination, pickups, or delivery logistics.
- HR: Use for job applications, recruitment, or internal personnel matters.
- Other: Use if the intent is unclear, the message is spam, or it does not fit the above.
Füge zum KI-Befehl mit "/" folgende Felder zum Kontext hinzu:
- Messages -> Inhalte
Messages -> Betreff
Hinweis: Den Prompt kannst du selber auch anpassen oder optimieren, wenn du andere Anforderungen hast.
Feld 2:
- Name: x_incoming_mail_sender_name
- Bezeichnung: Sender Name
- Modell: Incoming Emails
- Feldtyp: Text
Feld 3:
- Name: x_incoming_mail_sender_email
- Bezeichnung: Sender Email
- Modell: Incoming Emails
- Feldtyp: Text
Schritt 3: Erstelle unter Einstellungen / Technisch / Benutzerschnittstelle / Ansichten die Ansicht (View), um die eingehenden Mails sichtbar zu machen.
Ansichtsbezeichnung: Incoming Mails Form View
Ansichtstyp: Formular
Modell der Ansicht: Incoming Emails
Architektur:
<form string="Incoming Mail">
<sheet>
<group>
<field name="x_incoming_mail_category" widget="ai_char"/>
<field name="x_incoming_mail_sender_name" string="Absender Name"/>
<field name="x_incoming_mail_sender_email" string="Absender E-Mail"/>
</group>
</sheet>
<chatter/>
</form>

Schritt 4: Erstelle unter Einstellungen / Technisch / Aktionen / Fensteraktionen eine neue Fensteraktion, um die Ansichten des neuen Models zu laden.
Name der Aktion: Incoming Mails
Objekt: x_incoming_emails
Aktionsart: ir.actions.act_window

einen neuen Menüpunkt, um die eingehenden Mails in der Discuss App aufrufen zu können.
Menü: Incoming Mails
Obermenü: Dialog
Aktion: ir.actions.act_window -> Incoming Mails

einen neuen E-Mail Alias, um die eingehenden Mails an unser neues Model weiterzuleiten. Hinweis: Die folgende Konfiguration funktioniert nur, wenn du den Odoo-internen Mailserver verwendest. Wenn du deine Mails ab einem externen Mailserver sendest, musst du anstelle vom Alias einen neuen eingehenden Mailserver anlegen. Wenn du dazu Hilfe brauchst, kannst du mich gerne kontaktieren.

Schritt 7: Automatisierungsregel zur Berechnung des KI-Felds anlegen. Das ist notwendig, da die Odoo KI Felder sonst nur per Knopfdruck oder jede Nacht aktualisiert werden, wir aber eine sofortige Bearbeitung der E-Mail möchten.
Erstelle unter Einstellungen / Technisch / Automatisierung / Automatisierungsregeln
eine neue Automatisierungsregel.
Modell: Nachricht (mail.message)
Auslöser: Bei Erstellung
Anwenden auf: [("model", "=", "x_incoming_emails"), ("message_type", "=", "email")]
Folgeaktionen: Code ausführen:
for message in records:
record = env[message.model].browse(message.res_id)
if not record or not record.exists():
continue
raw_from = message.email_from or ""
sender_name = ""
sender_email = ""
if "<" in raw_from and ">" in raw_from:
sender_name = raw_from.split("<")[0].replace('"', "").strip()
sender_email = raw_from.split("<")[1].split(">")[0].strip()
else:
sender_email = raw_from.strip()
sender_name = message.record_name or "Unknown"
vals = {
"x_incoming_mail_sender_email": sender_email,
"x_incoming_mail_sender_name": sender_name,
}
result = record.get_ai_field_value("x_incoming_mail_category", {})
category_value = result.get("value") if isinstance(result, dict) else result
if category_value:
vals["x_incoming_mail_category"] = category_value
record.write(vals)
Schritt 8: Automatisierungsregel zur Weiterverarbeitung der eingehenden E-Mails anlegen. In diesem Beispiel wird folgendes erstellt:
Werden die E-Mails als "Support" kategorisiert -> Die Regel erstellt ein Helpdesk Ticket (Wichtig: Helpdesk Modul muss installiert sein).
"Sales" -> Die Regel erstellt eine CRM Opportunity (Wichtig: CRM Modul muss installiert sein).
"Logistik, HR oder Other" -> Die Regel erstellt einen Task im entsprechenden Projekt (Wichtig: Projekt Modul muss installiert sein und die Projekte mit den korrekten Namen müssen angelegt sein (General Inbox, HR Team Inbox, Logistic Team Inbox).
Hinweis: Die E-Mail-Verarbeitung mit dieser Automatisierungsregel ist nur ein grundlegendes Beispiel. Welche Mailkategorien existieren und was genau bei welcher Kategorie in Odoo passiert, muss auf jedes Unternehmen spezifisch angepasst werden.
Name: Create Records from incoming Email
Modell: Incoming Emails
Auslöser: Bei Erstellung und Bearbeitung
Bei der Aktualisierung: Mail Kategorie
Folgeaktionen: Code ausführen:
for record in records:
emails = record.message_ids.filtered(lambda m: m.message_type == "email").sorted("id")
if not emails:
continue
msg = emails[0]
cat = record.x_incoming_mail_category
rec_name = msg.subject or record.x_incoming_mail_sender_name or "New Incoming Request"
new_rec = None
if cat == "Sales":
new_rec = env["crm.lead"].create({
"name": rec_name,
"partner_name": record.x_incoming_mail_sender_name,
"email_from": record.x_incoming_mail_sender_email,
"type": "opportunity",
})
elif cat == "Support":
partner = env["res.partner"].search([("email", "=", record.x_incoming_mail_sender_email)], limit=1)
if not partner and record.x_incoming_mail_sender_email:
partner = env["res.partner"].create({
"name": record.x_incoming_mail_sender_name or record.x_incoming_mail_sender_email,
"email": record.x_incoming_mail_sender_email,
})
new_rec = env["helpdesk.ticket"].create({
"name": rec_name,
"partner_id": partner.id if partner else False,
})
else:
proj_map = {
"HR": "HR Team Inbox",
"Logistics": "Logistic Team Inbox",
}
proj_name = proj_map.get(cat, "General Inbox")
project = env["project.project"].search([("name", "=", proj_name)], limit=1)
if project:
new_rec = env["project.task"].create({
"name": rec_name,
"project_id": project.id,
})
if new_rec:
msg.sudo().copy({
"model": new_rec._name,
"res_id": new_rec.id,
})

Fertig! Nun werden alle deine eingehenden E-Mails, die im Alias konfiguriert sind, automatisch weiterverarbeitet.
Wenn du Fragen hast, kontaktiere mich gerne oder schreibe einen Kommentar.
Nate