Dieses Projekt ist ein Workaround für die Einstellung des klassischen POP3-Imports in der Gmail Web-App. Es ermöglicht es, E-Mails von externen IMAP-Servern (wie Hosttech, Hostpoint, BlueWin etc.) abzurufen und nahtlos in ein Gmail-Postfach zu importieren.
- Sicher: Keine Passwörter im Code (Nutzung von Environment Variables & Google Script Properties).
- Flexibel: Unterstützt beliebig viele externe E-Mail-Konten.
- Smart: Markiert Mails als gelesen oder löscht sie nach dem Import (konfigurierbar).
- Kostenlos: Läuft perfekt auf dem Free-Tier von Render.com.
- Repo forken oder klonen.
- Hosting: Lade das Projekt bei einem Cloud-Anbieter wie Render hoch (Web Service).
- Umgebungsvariablen: Hinterlege in den Einstellungen deines Hosting-Anbieters folgende Variable:
API_KEY: Ein von dir frei gewählter, sicherer Schlüssel.
- Deployment: Der Server startet automatisch via
node index.js.
Du kannst den Proxy auch bequem via Docker betreiben.
Erstelle eine docker-compose.yml:
services:
gmail-proxy:
image: ghcr.io/YOUR_GITHUB_USER/gmailsync:latest
container_name: gmail-imap-proxy
ports:
- "3000:3000"
environment:
- API_KEY=dein_geheimer_schluessel
restart: unless-stoppedStarte den Container mit: docker compose up -d
Um den Abruf zu automatisieren, erstelle ein neues Projekt auf script.google.com und nutze den folgenden Code:
Gehe in die Projekteinstellungen (Zahnrad) -> Skripteigenschaften und füge folgende Keys hinzu:
API_KEY: Dein gewählter Key vom Proxy.PASS_ACCOUNT1: Das Passwort deines ersten Mail-Kontos (usw.).
Kopiere diesen Code in den Editor und aktiviere unter Dienste (+) die Gmail API.
const PROXY_URL = "DEINE_RENDER_URL/fetch-mails";
const props = PropertiesService.getScriptProperties();
const ACCOUNTS = [
{
host: "imap.dein-provider.ch",
user: "info@deinedomain.ch",
pass: props.getProperty('PASS_ACCOUNT1'),
deleteAfterFetch: false // true = loeschen, false = nur als gelesen markieren
}
];
function fetchAndImportMails() {
const API_KEY = props.getProperty('API_KEY');
ACCOUNTS.forEach(account => {
const options = {
method: "post",
contentType: "application/json",
payload: JSON.stringify({
apiKey: API_KEY,
...account
}),
muteHttpExceptions: true
};
try {
const response = UrlFetchApp.fetch(PROXY_URL, options);
const data = JSON.parse(response.getContentText());
if (data.emails && data.emails.length > 0) {
data.emails.forEach(mail => {
const webSafeBase64 = Utilities.base64EncodeWebSafe(Utilities.base64Decode(mail.raw));
Gmail.Users.Messages.insert({
raw: webSafeBase64,
labelIds: ['INBOX', 'UNREAD']
}, 'me');
});
console.log(data.emails.length + " Mails importiert fuer " + account.user);
}
} catch (e) {
console.error("Fehler: " + e.toString());
}
});
}
function setupTrigger() {
ScriptApp.newTrigger('fetchAndImportMails').timeBased().everyMinutes(5).create();
}Sobald der Code im Editor gespeichert ist:
- Erster Test: Wähle oben im Dropdown die Funktion
fetchAndImportMailsaus und klicke auf Ausführen.- Hinweis: Google wird dich nach Berechtigungen fragen (Gmail API & Externe Verbindungen). Da es dein eigenes Script ist, kannst du diese bestätigen.
- Prüfe das Protokoll unten: Erscheint dort "Erfolg" oder "Importiert", hat alles geklappt!
- Dauerbetrieb aktivieren: Wähle im Dropdown die Funktion
setupTriggeraus und klicke auf Ausführen.- Damit wird ein automatischer Zeitplaner erstellt, der das Script ab sofort alle 5 Minuten im Hintergrund startet.
- Fertig! Du kannst den Tab jetzt schliessen. Dein Gmail-Postfach wird nun vollautomatisch synchronisiert.
- Veröffentliche niemals deine echten Passwörter oder den
API_KEY. - Nutze die
.gitignore, um lokale.envDateien vom Repository fernzuhalten. - Dieses Projekt nutzt das
imapflowModul für eine sichere TLS-Verbindung.
MIT License - Feel free to use and contribute!