Absenderpruefung erweitern und Postfach auflisten koennen
Die Pruefung suchte woertlich nach "@paypal.de" oder "@paypal.com". Mails aus einer Versand-Subdomain (e.paypal.de) oder einer Landesvariante (paypal.at, paypal.co.uk) fielen damit als not_from_paypal durch. Geprueft wird jetzt die Domain der Absenderadresse an ihrem Ende - "paypal.de. beispiel.com" ist damit weiterhin kein PayPal, waere bei einer Textsuche aber durchgerutscht. check-imap-support.php listet zusaetzlich die letzten 15 Mails mit Absender, Empfaengerzeilen und Betreff auf und sagt je Mail, ob der Absender als PayPal gilt. Damit laesst sich ein not_from_paypal in einem Lauf klaeren statt zu raten. Rein lesend: OP_READONLY, kein \Seen. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
+26
-1
@@ -152,6 +152,31 @@ function paypal_match_participant(PDO $pdo, int $tenantId, string $payerName, ?s
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Stammt die Mail wirklich von PayPal? Geprueft wird die Domain der
|
||||
* Absenderadresse - inklusive Landesvarianten (paypal.at, paypal.co.uk) und
|
||||
* Versand-Subdomains (e.paypal.de), die PayPal tatsaechlich benutzt.
|
||||
*
|
||||
* Der Vergleich haengt bewusst am Ende der Domain: "paypal.de.beispiel.com"
|
||||
* ist NICHT PayPal, wuerde bei einer simplen Textsuche nach "@paypal.de"
|
||||
* aber durchrutschen - und damit koennte jemand mit Kenntnis der
|
||||
* Eingangsadresse Zahlungen erfinden.
|
||||
*/
|
||||
function paypal_from_is_paypal(string $fromHeader): bool
|
||||
{
|
||||
if (!preg_match_all('/[\w.+-]+@([\w-]+(?:\.[\w-]+)+)/u', strtolower($fromHeader), $treffer)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
foreach ($treffer[1] as $domain) {
|
||||
if (preg_match('/(^|\.)paypal\.[a-z]{2,}(\.[a-z]{2,})?$/', $domain)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gehoeren zwei Adressen zum selben Postfach? Plus-Adressierung wird dabei
|
||||
* ignoriert, "zahlungen+ab12cd@host" ist also dasselbe Postfach wie
|
||||
@@ -366,7 +391,7 @@ function paypal_preview(PDO $pdo, int $tenantId, array $parsed): array
|
||||
*/
|
||||
function paypal_process_raw(PDO $pdo, string $recipient, string $fromHeader, string $rawBody, bool $previewOnly = false): array
|
||||
{
|
||||
if (!preg_match('/@paypal\.(de|com)/i', $fromHeader)) {
|
||||
if (!paypal_from_is_paypal($fromHeader)) {
|
||||
return ['status' => 'not_from_paypal'];
|
||||
}
|
||||
$token = paypal_inbox_extract_token($recipient);
|
||||
|
||||
Reference in New Issue
Block a user