Skip to content

Commit

Permalink
fix gestione indirizzi email invalidi
Browse files Browse the repository at this point in the history
  • Loading branch information
madbob committed Dec 18, 2023
1 parent f98146a commit bdfe393
Showing 1 changed file with 12 additions and 20 deletions.
32 changes: 12 additions & 20 deletions code/app/Http/Controllers/MailController.php
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@

class MailController extends Controller
{
private function saveInstances($email, $message)
private function saveInstances($event, $email, $message)
{
$instances = get_instances();
$now = date('Y-m-d G:i:s');
Expand All @@ -26,9 +26,10 @@ private function saveInstances($email, $message)
$db_emails = $db->select("SELECT COUNT(*) as count FROM contacts WHERE type = 'email' and value = '$email'");
if ($db_emails[0]->count != 0) {
$db->insert("INSERT INTO inner_logs (level, type, message, created_at, updated_at) VALUES ('error', 'mail', '$message', '$now', '$now')");
$db_failures = $db->select("SELECT COUNT(*) as count FROM inner_logs WHERE type = 'email' and message like '%$email%'");
if ($db_failures[0]->count >= 3) {
$db->delete("DELETE FROM contacts WHERE type = 'email' and value = '$email'");
$db_failures = $db->select("SELECT COUNT(*) as count FROM inner_logs WHERE type = 'mail' and message = '$message'");

if ($db_failures[0]->count >= 3 || $event == 'blocked') {
$db->delete("UPDATE contacts SET type = 'skip_email' WHERE type = 'email' and value = '$email'");
$message = _i('Rimosso indirizzo email ' . $email);
$db->insert("INSERT INTO inner_logs (level, type, message, created_at, updated_at) VALUES ('error', 'mailsuppression', '$message', '$now', '$now')");
Log::info($message);
Expand All @@ -41,13 +42,13 @@ private function saveInstances($email, $message)
}
}

private function registerBounce($email, $message)
private function registerBounce($event, $email, $message)
{
$message = sprintf(_i('Impossibile inoltrare mail a %s: %s', [$email, $message]));
$message = addslashes($message);

if (global_multi_installation()) {
$this->saveInstances($email, $message);
$this->saveInstances($event, $email, $message);
}
else {
InnerLog::error('mail', $message);
Expand All @@ -73,11 +74,13 @@ public function postStatusSES(Request $request)
}
else if ($message['Type'] === 'Notification') {
$data = json_decode($message['Message']);
if ($data->notificationType == 'Bounce') {
$event = $data->notificationType;

if ($event == 'Bounce') {
try {
$email = $data->bounce->bouncedRecipients[0]->emailAddress;
$message = $data->bounce->bouncedRecipients[0]->diagnosticCode ?? '???';
$this->registerBounce($email, $message);
$this->registerBounce($event, $email, $message);
}
catch(\Exception $e) {
Log::error('Notifica SNS illeggibile: ' . $e->getMessage() . ' - ' . print_r($data, true));
Expand Down Expand Up @@ -107,18 +110,7 @@ public function postStatusSendinblue(Request $request)
try {
$email = $request->input('email');
$message = $request->input('reason', '???');
$this->registerBounce($email, $message);

/*
Se l'indirizzo mail è stato bloccato, è inutile
inoltrare altri messaggi: qui ne cambio il tipo per
evitare di generare altre mail a vuoto
*/
if ($event == 'blocked') {
Contact::where('type', 'email')->where('value', $email)->update([
'type' => 'skip_email',
]);
}
$this->registerBounce($event, $email, $message);
}
catch(\Exception $e) {
Log::error('Notifica SendInBlue illeggibile: ' . $e->getMessage() . ' - ' . print_r($request->all(), true));
Expand Down

0 comments on commit bdfe393

Please sign in to comment.