komplettes PHP-Skript, das E-Mails per IMAP abruft, filtert (Absender + Betreff) und automatisch WordPress-Beiträge erstellt. Es kann als Plugin oder in functions.php genutzt werden und ist cron-kompatibel.
<?php
/**
* E-Mail → WordPress Post Automatisierung
* Filter: Absender & Betreff
* Voraussetzung: PHP IMAP, WordPress-Installation
*/
function filter_email_to_post_settings($from, $subject) {
$rules = [
'news@domain.de' => [
'Newsletter*' => ['category' => 'News', 'author' => 1, 'status' => 'publish'],
'*' => ['category' => 'News', 'author' => 1, 'status' => 'draft'],
],
'support@domain.de' => [
'Support*' => ['category' => 'Support', 'author' => 2, 'status' => 'publish'],
],
'*@partner.com' => [
'*' => ['category' => 'Partner', 'author' => 3, 'status' => 'draft'],
],
];
foreach ($rules as $rule_from => $subjects) {
$pattern_from = '/^' . str_replace(['*', '.'], ['.*', '\.'], $rule_from) . '$/i';
if (!preg_match($pattern_from, $from)) continue;
foreach ($subjects as $pattern_subject => $actions) {
$pattern_subject = '/^' . str_replace('*', '.*', $pattern_subject) . '$/i';
if (preg_match($pattern_subject, $subject)) return $actions;
}
}
return ['category' => 'Unsorted', 'author' => 1, 'status' => 'draft'];
}
function fetch_emails_and_create_posts() {
$mailbox = '{imap.example.com:993/imap/ssl}INBOX';
$username = 'dein@email.de';
$password = 'passwort';
$inbox = imap_open($mailbox, $username, $password);
if (!$inbox) return;
$emails = imap_search($inbox, 'UNSEEN');
if ($emails) {
rsort($emails); // Neueste zuerst
foreach ($emails as $email_number) {
$overview = imap_fetch_overview($inbox, $email_number, 0)[0];
$message = imap_fetchbody($inbox, $email_number, 1.1);
if (empty($message)) $message = imap_fetchbody($inbox, $email_number, 1);
$settings = filter_email_to_post_settings($overview->from, $overview->subject);
// Beitrag erstellen
wp_insert_post([
'post_title' => $overview->subject,
'post_content' => $message,
'post_status' => $settings['status'],
'post_author' => $settings['author'],
'post_category'=> [get_cat_ID($settings['category'])],
]);
imap_setflag_full($inbox, $email_number, "\\Seen"); // Als gelesen markieren
}
}
imap_close($inbox);
}
// Cron-Hook registrieren (z.B. alle 5 Minuten)
if (!wp_next_scheduled('cron_fetch_emails')) {
wp_schedule_event(time(), 'five_minutes', 'cron_fetch_emails');
}
add_action('cron_fetch_emails', 'fetch_emails_and_create_posts');
// Optional: Intervall „five_minutes“ definieren
add_filter('cron_schedules', function($schedules) {
$schedules['five_minutes'] = ['interval' => 300, 'display' => 'Every 5 Minutes'];
return $schedules;
});
$rulesdefiniert die Zuordnung von Absendern → Betreff → Aktionen.- Wildcards (
*) werden für Domain-Matches oder beliebige Betreffzeichen verwendet. - Gibt ein Array zurück: Kategorie, Autor, Status.
- Kann direkt in einen IMAP-Abruf oder Cron-Job integriert werden, um Beiträge automatisch zu erstellen.
