Praxisnahe Tutorials, auf die du zählen kannst.
Einsteiger Guide für Home Assistant

Mit Home Assistant E-Mails überwachen

Vergisst du manchmal, deine E-Mails zu checken? 😅 Keine Sorge – dein Smart Home kann dir unter die Arme greifen! In diesem Video zeige ich dir die Home Assistant IMAP-Integration, mit der du ungelesene E-Mails live im Dashboard siehst und sogar Mails löschen oder als gelesen markieren kannst 🔥

Inhaltsverzeichnis


Voraussetzungen

Ressourcen

Doku von HA, falls du etwas selbst nachlesen möchtesthttps://www.home-assistant.io/integrations/imap/
M365-Mail Integration für Home Assistanthttps://github.com/RogerSelwyn/MS365-Mail / Doku: https://rogerselwyn.github.io/MS365-Mail/

Code-Snippets

Hier die gezeigten Codes / Dashboards / Automationen Video, damit du möglichst viel kopieren kannst! Natürlich musst du die Entitäten-IDs, Geräte-IDs, Dienste usw. gegebenenfalls durch deine eigenen ersetzen!

Dashboard

Kachel-Karte mit ungelesenen Mails

type: tile
entity: sensor.imap_m_mustermann_gmx_de_nachrichten
features_position: bottom
vertical: false
grid_options:
  columns: 12
  rows: 1
visibility:
  - condition: numeric_state
    entity: sensor.imap_m_mustermann_gmx_de_nachrichten
    above: 0
tap_action:
  action: navigate
  navigation_path: /lovelace/mail
icon_tap_action:
  action: more-info
name: IMAP (GMX) Nachrichten

Unter-Ansicht für E-Mails (erfordert Skripte für Buttons & Template)

title: Dashboard-Name
views:
  - type: sections
    max_columns: 4
    title: Mail
    path: mail
    icon: mdi:email
    sections:
      - type: grid
        cards:
          - type: heading
            heading: E-Mails (GMX)
            heading_style: title
            icon: mdi:email
            badges:
              - type: entity
                show_state: true
                show_icon: true
                entity: sensor.imap_m_mustermann_gmx_de_nachrichten
                tap_action:
                  action: more-info
                color: green
                visibility:
                  - condition: numeric_state
                    entity: sensor.imap_m_mustermann_gmx_de_nachrichten
                    below: 1
              - type: entity
                show_state: true
                show_icon: true
                entity: sensor.imap_m_mustermann_gmx_de_nachrichten
                tap_action:
                  action: more-info
                color: red
                visibility:
                  - condition: numeric_state
                    entity: sensor.imap_m_mustermann_gmx_de_nachrichten
                    above: 0
          - type: heading
            heading: Aktionen
            heading_style: title
            icon: mdi:gesture-double-tap
            badges:
              - type: entity
                show_state: true
                show_icon: false
                entity: sensor.imap_content
            visibility:
              - condition: numeric_state
                entity: sensor.imap_m_mustermann_gmx_de_nachrichten
                above: 0
          - show_name: true
            show_icon: true
            type: button
            tap_action:
              action: perform-action
              perform_action: script.neuste_nachricht_als_gelesen_markieren_m_mustermann_gmx_de
              target: {}
            show_state: false
            grid_options:
              columns: 6
              rows: 2
            icon_height: 50px
            entity: sensor.imap_content
            name: Gelesen
            icon: mdi:read
            visibility:
              - condition: numeric_state
                entity: sensor.imap_m_mustermann_gmx_de_nachrichten
                above: 0
          - show_name: true
            show_icon: true
            type: button
            tap_action:
              action: perform-action
              perform_action: script.neuste_nachricht_loschen_m_mustermann_gmx_de
              target: {}
            show_state: false
            grid_options:
              columns: 6
              rows: 2
            icon_height: 50px
            entity: sensor.imap_content
            name: Löschen
            icon: mdi:delete
            visibility:
              - condition: numeric_state
                entity: sensor.imap_m_mustermann_gmx_de_nachrichten
                above: 0
          - type: markdown
            content: |-
              ### Betreff: {{ states("sensor.imap_content") }}

              ### Absender: {{ state_attr("sensor.imap_content", "Sender") }}

              ## Nachricht:

              {{ state_attr("sensor.imap_content", "Message") }}
            title: Vorschau
            visibility:
              - condition: numeric_state
                entity: sensor.imap_m_mustermann_gmx_de_nachrichten
                above: 0
      - type: grid
        cards:
          - type: markdown
            content: '# Perfekt, alles erledigt 🙌'
          - show_name: true
            show_icon: true
            type: button
            tap_action:
              action: navigate
              navigation_path: /lovelace/home
            entity: sensor.imap_content
            icon: mdi:keyboard-backspace
            name: Zurück zum Dashboard
            hold_action:
              action: none
            grid_options:
              columns: 12
              rows: 2
        visibility:
          - condition: numeric_state
            entity: sensor.imap_m_mustermann_gmx_de_nachrichten
            below: 1

Template

template:
#######
############ E-Mail Zeugs
#######
  - trigger:
      - trigger: event
        event_type: "imap_content"
    sensor:
      - name: imap_content
        state: "{{ trigger.event.data['subject'] }}"
        attributes:
          Entry: "{{ trigger.event.data['entry_id'] }}"
          UID: "{{ trigger.event.data['uid'] }}"
          Message: "{{ trigger.event.data['text'] }}"
          Server: "{{ trigger.event.data['server'] }}"
          Username: "{{ trigger.event.data['username'] }}"
          Search: "{{ trigger.event.data['search'] }}"
          Folder: "{{ trigger.event.data['folder'] }}"
          Sender: "{{ trigger.event.data['sender'] }}"
          Date: "{{ trigger.event.data['date'] }}"
          Subject: "{{ trigger.event.data['subject'] }}"
          Initial: "{{ trigger.event.data['initial'] }}"
          To: "{{ trigger.event.data['headers'].get('Delivered-To', ['n/a'])[0] }}"
          Return-Path: "{{ trigger.event.data['headers'].get('Return-Path',['n/a'])[0] }}"
          Received-first: "{{ trigger.event.data['headers'].get('Received',['n/a'])[0] }}"
          Received-last: "{{ trigger.event.data['headers'].get('Received',['n/a'])[-1] }}"

Hinweis für mehrere Postfächer

Falls du mehrere Postfächer hast, musst du das Template um die jeweilige entry_id ergänzen:

triggers:
  - trigger: event
    event_type: imap_content
    event_data:
      entry_id: 91fadb3617c5a3ea692aeb62d92aa869

Skript

Als ungelesen markieren

sequence:
  - action: imap.seen
    metadata: {}
    data:
      uid: "{{ state_attr('sensor.imap_content', 'UID') }}"
      entry: 01JRMGBYV49H9ZVKTAM9GWPF71
alias: Neuste Nachricht als gelesen markieren (m.mustermann@gmx.de)
description: ""

Löschen

sequence:
  - action: imap.delete
    metadata: {}
    data:
      uid: "{{ state_attr('sensor.imap_content', 'UID') }}"
      entry: 01JRMGBYV49H9ZVKTAM9GWPF71
alias: Neuste Nachricht löschen (m.mustermann@gmx.de)
description: ""


Fazit

Mit der IMAP-Integration holst du dir deine E-Mails direkt ins Home Assistant Dashboard – und zwar so, dass du sie nicht mehr ignorieren kannst 😁

Ob als smarte Erinnerung, optischer Hinweis oder mit echten Aktionen wie Löschen oder Als gelesen markieren – dein Smart Home wird zur Mail-Zentrale 💌

Natürlich ist das Setup etwas technischer, aber mit den Snippets & dem Video oben solltest du das gut hinbekommen. Und wie immer gilt: Passe alles an deine eigenen Bedürfnisse an – dann wird’s richtig cool 🔥

Viel Spaß beim Automatisieren – und vergiss deine Mails ab jetzt nie wieder 😉📬

Verpasse keine Tipps!

Ich sende keinen Spam! Erfahre mehr in der Datenschutzerklärung.

Transparenz: In diesem Artikel sind Partnerlinks enthalten. Durch einen Klick darauf ge­lan­gt ihr direkt zum Anbieter. Solltet ihr euch dort für einen Kauf entscheiden, erhalte ich ei­ne kleine Provision. Für euch ändert sich am Preis nichts & Partnerlinks haben keinerlei Einfluss auf meine Berichterstattung. Vielen Dank für deine Unterstützung!

Gründer von simon42. Schreibt hier ehrlich und leidenschaftlich über Smart Home und Technik Themen, denn das Zuhause wurde bereits von Sprachassistenten übernommen und die Kontrolle abgegeben 😁

Nennenswerte Antworten

  1. Avatar for JS83 JS83 says:

    Danke für deinen Beitrag!

    finde ich voll toll, für die “älteren”.

    ich habe mehrere “copy to folder”-buttons:

    • Wichtig => INBOX.Wichtig,
    • SPAM => INBOX.JUNK, und
    • Archiv => INBOX.Archiv und
      sync (mit thunderbird, solange ich teste) und
      backup (nas: ha => nas:volume1\ha),
      auto delete (24h INBOX.JUNK > clear) und so,

    aber was ich nicht verstehe, ist (templating)

    {% macro strip_email(html) %}
      {# Handle undefined or None input #}
      {% set html_safe = html | default('', true) %}
      {# Remove all newlines, carriage returns, and tabs early #}
      {% set no_newlines = html_safe | regex_replace(find='[\\r\\n\\t]+', replace=' ', ignorecase=True) %}
      {# Decode quoted-printable encoding (e.g., =3D to =) #}
      {% set decoded_qp = no_newlines | regex_replace(find='=3D', replace='=', ignorecase=True) %}
      {# Remove <style> tags and their content #}
      {% set no_style_tags = decoded_qp | regex_replace(find='<style[^>]*>.*?</style>', replace='', ignorecase=True) %}
      {# Remove inline style attributes #}
      {% set no_inline_style = no_style_tags | regex_replace(find='style="[^"]*"', replace='', ignorecase=True) %}
      {# Remove conditional comments (e.g., [if gte mso 9]) #}
      {% set no_comments = no_inline_style | regex_replace(find='<!--\[if[^>]*>.*?<!\[endif\]-->', replace='', ignorecase=True) %}
      {# Remove all remaining HTML tags #}
      {% set stripped = no_comments | regex_replace(find='<[^>]+>', replace='', ignorecase=True) %}
      {# Decode HTML entities, including Unicode entities #}
      {% set decoded = stripped 
        | regex_replace(find='&amp;', replace='&', ignorecase=True)
        | regex_replace(find='&lt;', replace='<', ignorecase=True)
        | regex_replace(find='&gt;', replace='>', ignorecase=True)
        | regex_replace(find='&quot;', replace='"', ignorecase=True)
        | regex_replace(find='&nbsp;', replace=' ', ignorecase=True)
        | regex_replace(find=''', replace="'", ignorecase=True)
        | regex_replace(find='&ndash;', replace='–', ignorecase=True)
        | regex_replace(find='&mdash;', replace='—', ignorecase=True)
        | regex_replace(find='ä', replace='ä', ignorecase=True)
        | regex_replace(find='ü', replace='ü', ignorecase=True)
        | regex_replace(find='ß', replace='ß', ignorecase=True)
        | regex_replace(find='ö', replace='ö', ignorecase=True)
        | regex_replace(find='&copy;', replace='©', ignorecase=True)
        | regex_replace(find='&reg;', replace='®', ignorecase=True) %}
      {# Clean up multiple whitespace #}
      {{ decoded | regex_replace(find='\\s+', replace=' ', ignorecase=True) | trim }}
    {% endmacro %}
    
    {{ strip_email(state_attr(“sensor.imap_content”, “Message”)) }}
    
    

    links unten meine variante, rechts die von simon42

    ich habe immer wieder probleme die emails zu lesen statt die css und html anweisungen

    vielleicht habt ihr eine idee. vielen dank!

  2. Avatar for JS83 JS83 says:

    Hallo zusammen,

    ich möchte euch von meinem aktuellen Projekt erzählen und hoffe auf eure Unterstützung oder Ideen! Wie viele von euch kenne ich die Herausforderung, wenn die E-Mail-Postfächer der Eltern überquellen. Meine Eltern haben mehrere E-Mail-Konten, und es war an der Zeit, das mit Home Assistant zu organisieren. Ähnlich wie Simon42 habe ich schon einige Aktionen eingerichtet – zum Beispiel, um E-Mails als gelesen zu markieren, zu löschen, als wichtig zu kennzeichnen oder in Spam/Archiv zu verschieben (siehe das Bild mit den Buttons, das ich beigefügt habe). Das funktioniert super dank der IMAP-Integration!

    Aber jetzt habe ich eine neue Idee für die nächste Aktion: Ich möchte automatisierte Abläufe basierend auf E-Mail-Anhängen erstellen, z. B. Rechnungen als PDF speichern oder Fotos in ein Album hochladen. Leider unterstützt die aktuelle ImapMessage-Klasse in Home Assistant keine Anhänge – weder die Anzahl noch die Namen oder die Dateien selbst.

    Daher habe ich zwei Ansätze verfolgt:

    1. Bestehendes Modul: Ich habe das Custom-Component ha_imap_attachment entdeckt. Es erweitert den IMAP-Sensor und kann Anhänge herunterladen, inklusive Attributen wie num_attachments und attachment_paths. Das habe ich getestet, und es funktioniert, aber ich würde es lieber in den Core integriert sehen, um auf externe Lösungen zu verzichten.
    2. Community-Diskussion: Deshalb habe ich eine Diskussion bei Home Assistant gestartet: IMAP - Enhance ImapMessage to fetch attachments. Dort schlage ich vor, die ImapMessage-Klasse um Anhangunterstützung zu erweitern, inklusive eines Code-Beispiels, wie das umgesetzt werden könnte. Vielleicht könnt ihr als Community diesen Vorschlag unterstützen, z. B. durch Likes oder weitere Stimmen, um die Entwickler zu überzeugen!

    Mein Ziel ist es, eine nahtlose Integration zu haben, die nicht nur Text und HTML ausliest, sondern auch Anhänge verarbeitet – ähnlich wie bei anderen E-Mail-Clients (z. B. Outlook oder Gmail). Wenn diese Funktion in den Core kommt, könnten wir alle davon profitieren, besonders bei Automatisierungen wie der Verarbeitung von Anhängen.

    Was denkt ihr? Hat jemand Erfahrung mit der ha_imap_attachment-Lösung oder Ideen, wie wir die Diskussion vorantreiben können? Ich freue mich auf eure Rückmeldungen!

  3. ich sehe das kritisch. Warum soll das Core System zu einer “Eierlegendenwollmichs*au” mutieren? Core soll schlank und stabil bleiben. Die HASC Erweiterung gibt es ja. Wenn hier Fehler gefunden werden oder neue Funktionen gewünscht sind gibt es ein Github Projekt wo per Issue oder Pullrequest unterstützt werden kann.

    Bevor hier solche Dinge in Core einfließen sollten erstmal grundlegende Dinge wie Oauth2 implementiert werden.

  4. Ich habe mich mit diesem Thema vor kurzem auch beschäftigt. Es gibt hierzu auch die Möglichkeit via “KI”/LLM die Emails vorsortieren zu lassen. Dadurch kann der Spam von den relevanten EMails (meines Erachtens) sehr gut getrennt werden.

    Hier die Anleitung, über die ich auf das Thema gestoßen bin:

    https://www.xda-developers.com/set-up-email-triage-system-home-assistant-local-llm/

    Der Vorteil hier ist, dass man das auch auf langsameren Systemen ohne größere GK laufen lassen kann - man braucht hier dann nur etwas mehr Arbeitsspeicher (der ist ja aktuell vergleichsweise günstig). Bei Emails spielt die Reaktionsgeschwindigkeit ja nicht so die wichtige Rolle vgl. dem Assist vom HA (bei dem der User direkt die Antwort erwartet).

  5. Avatar for JS83 JS83 says:

    @thombe
    dein link ist leider jetzt ein 404, gibt es den artikel noch online?

Setze die Diskussion fort unter community.simon42.com

2 mehr antworten

Teilnehmer

Avatar for system Avatar for thombe Avatar for tarag Avatar for mostie Avatar for JS83

11 Gedanken zu „Mit Home Assistant E-Mails überwachen“

  1. wer gmail hat, sollte sich mit google script entsprechende Programme bauen lassen… von Gemini…. dann kann man mit webhook ein event auslösen

    Antworten
  2. Hallo Simon, vielen Dank für das interessante Video. Ich versuche gerade eine Automation zu erstellen, die mir einen Zähler erhöht wenn eine neue Mail mit dem Betreff beginnend ‚Neue Anfrage von‘ hat. Leider komme ich absolut nicht weiter. Kannst Du mir einen Tipp geben?

    Antworten
    • Danke dir für den Hinweis, es gab ein Problem mit dem Server-Cache, irgendwie war da noch die Entwurfsversion gespeichert 😅

Schreibe einen Kommentar