Enhance IP verification process: add email resend functionality and improve error logging
This commit is contained in:
@@ -291,6 +291,9 @@ function fociz_send_new_ip_verification(int $userId, string $email, string $name
|
||||
]);
|
||||
|
||||
$res = FocizMailer::send($email, $name, "Bevestig nieuwe inloglocatie ({$ip}) — Fociz", $html);
|
||||
if (empty($res['success'])) {
|
||||
error_log("fociz_send_new_ip_verification: Mail verzenden mislukt naar {$email}: " . ($res['error'] ?? 'onbekende fout'));
|
||||
}
|
||||
return !empty($res['success']);
|
||||
} catch (Throwable $e) {
|
||||
error_log("fociz_send_new_ip_verification error: " . $e->getMessage());
|
||||
|
||||
+52
-12
@@ -131,15 +131,58 @@ class FocizMailer {
|
||||
throw new Exception("Ongeldige server banner (verwacht 220, kreeg {$resp['code']}): {$resp['text']}");
|
||||
}
|
||||
|
||||
// 4. EHLO Handshake
|
||||
$clientHost = !empty($_SERVER['SERVER_NAME']) ? $_SERVER['SERVER_NAME'] : 'fociz.nl';
|
||||
$resp = $sendCommand("EHLO {$clientHost}");
|
||||
if ($resp['code'] !== 250) {
|
||||
$resp = $sendCommand("HELO {$clientHost}");
|
||||
if ($resp['code'] !== 250) {
|
||||
throw new Exception("EHLO/HELO geweigerd door server: {$resp['text']}");
|
||||
// 4. EHLO Handshake conform RFC 5321 §4.1.4
|
||||
// Voorkom impersonation van het lokale domein (bijv. 'fociz.nl' tegen 'mail.fociz.nl')
|
||||
// Antagonist/Exim weigert 'EHLO fociz.nl' van externe hosts met '550 Bad HELO - Host impersonating domain name'
|
||||
$resolveHeloHost = function() use ($host): string {
|
||||
// 1. Mailserver hostnaam indien beschikbaar en niet een lokaal IP
|
||||
if (!empty($host) && str_contains($host, '.') && !str_starts_with($host, '192.168.') && !str_starts_with($host, '127.')) {
|
||||
return $host;
|
||||
}
|
||||
}
|
||||
// 2. SERVER_NAME mits het niet het bare hoofddomein is
|
||||
if (!empty($_SERVER['SERVER_NAME'])) {
|
||||
$sn = preg_replace('/:[0-9]+$/', '', trim($_SERVER['SERVER_NAME']));
|
||||
if (!in_array(strtolower($sn), ['fociz.nl', 'localhost', '127.0.0.1'])) {
|
||||
return $sn;
|
||||
}
|
||||
}
|
||||
// 3. Systeemhostnaam
|
||||
if (function_exists('gethostname')) {
|
||||
$gh = gethostname();
|
||||
if (!empty($gh) && strtolower($gh) !== 'fociz.nl') {
|
||||
return $gh;
|
||||
}
|
||||
}
|
||||
return 'mail.fociz.nl';
|
||||
};
|
||||
|
||||
$performHeloHandshake = function(string $preferredHost) use ($sendCommand, $log): string {
|
||||
$candidates = array_unique([$preferredHost, 'mail.fociz.nl', 'localhost', '127.0.0.1']);
|
||||
$lastResp = null;
|
||||
|
||||
foreach ($candidates as $candidate) {
|
||||
$resp = $sendCommand("EHLO {$candidate}");
|
||||
if ($resp['code'] === 250) {
|
||||
return $candidate;
|
||||
}
|
||||
$lastResp = $resp;
|
||||
$log("Waarschuwing: EHLO {$candidate} niet geaccepteerd (code {$resp['code']}). Probeert alternatief...");
|
||||
}
|
||||
|
||||
// Fallback naar HELO indien EHLO op alle kandidaten niet werkt
|
||||
foreach ($candidates as $candidate) {
|
||||
$resp = $sendCommand("HELO {$candidate}");
|
||||
if ($resp['code'] === 250) {
|
||||
return $candidate;
|
||||
}
|
||||
$lastResp = $resp;
|
||||
}
|
||||
|
||||
throw new Exception("EHLO/HELO geweigerd door server voor alle kandidaten. Laatste reactie: " . ($lastResp ? "({$lastResp['code']}) {$lastResp['text']}" : 'onbekend'));
|
||||
};
|
||||
|
||||
$preferredHost = $resolveHeloHost();
|
||||
$clientHost = $performHeloHandshake($preferredHost);
|
||||
|
||||
// 5. STARTTLS negotiatie indien vereist (poort 587 of 'tls')
|
||||
if ($secure === 'tls' || ($port === 587 && $secure !== 'none')) {
|
||||
@@ -165,10 +208,7 @@ class FocizMailer {
|
||||
$log("TLS encryptie succesvol geactiveerd.");
|
||||
|
||||
// Na STARTTLS moet EHLO opnieuw worden gestuurd (RFC 3207)
|
||||
$resp = $sendCommand("EHLO {$clientHost}");
|
||||
if ($resp['code'] !== 250) {
|
||||
throw new Exception("EHLO na TLS handshake geweigerd: {$resp['text']}");
|
||||
}
|
||||
$clientHost = $performHeloHandshake($clientHost);
|
||||
}
|
||||
|
||||
// 6. SMTP Authenticatie
|
||||
|
||||
Reference in New Issue
Block a user