Dieses Skript versendet eine E-Mail per SMTP basierend auf den Daten der aktuellen Zeile. Es ist als Button-Skript konzipiert: Sie klicken auf einen Button in einer Zeile und das Skript liest Empfänger, Betreff und Text aus den entsprechenden Spalten. Der Sendestatus wird in einer Einfachauswahl-Spalte zurückgeschrieben.

Send Email in SeaTable

Die Tabelle benötigt folgende Spalten:

  • Recipient (E-Mail) — Empfängeradresse
  • Subject (Text) — Betreff der E-Mail
  • Body (Langtext) — Inhalt der E-Mail
  • Status (Einfachauswahl) — wird vom Skript auf “Success” oder “Error” gesetzt

Außerdem muss eine Button-Spalte eingerichtet werden, die das Skript ausführt.

Passen Sie die SMTP-Zugangsdaten und Spaltennamen an Ihre Konfiguration an. Das Skript nutzt context.current_row, um die Daten der Zeile zu lesen, in der der Button geklickt wurde.

from seatable_api import Base, context
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart

base = Base(context.api_token, context.server_url)
base.auth()

# SMTP configuration
SMTP_SERVER = "smtp.example.com"
SMTP_PORT = 587
SMTP_USER = "your-email@example.com"
SMTP_PASSWORD = "your-app-password"

TABLE_NAME = "Table1"

# Read data from current row
row = context.current_row
if not row:
    print("ERROR: This script must be run via a button.")
else:
    recipient = row.get('Recipient', '')
    subject = row.get('Subject', '')
    body = row.get('Body', '')

    if not recipient:
        print("ERROR: No recipient specified.")
    elif not subject:
        print("ERROR: No subject specified.")
    else:
        msg = MIMEMultipart()
        msg['From'] = SMTP_USER
        msg['To'] = recipient
        msg['Subject'] = subject
        msg.attach(MIMEText(body or '', 'plain'))

        try:
            with smtplib.SMTP(SMTP_SERVER, SMTP_PORT) as server:
                server.starttls()
                server.login(SMTP_USER, SMTP_PASSWORD)
                server.send_message(msg)
            base.update_row(TABLE_NAME, row['_id'], {'Status': 'Success'})
            print(f"Email sent to {recipient}")
        except Exception as e:
            base.update_row(TABLE_NAME, row['_id'], {'Status': 'Error'})
            print(f"Failed: {e}")

Gängige SMTP-Einstellungen:

Anbieter Server Port
Gmail smtp.gmail.com 587
Outlook / Microsoft 365 smtp-mail.outlook.com 587
Eigener Server Ihr SMTP-Server 587 oder 465

Für HTML-E-Mails ersetzen Sie 'plain' durch 'html' im MIMEText-Aufruf.

Die vollständige Funktionsreferenz finden Sie im SeaTable Developer Manual .