Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 5 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
@@ -1,2 +1,6 @@
vendor
*.swp
*.sgh
*.zip
translate_locales.php
config.inc.php

65 changes: 39 additions & 26 deletions banner_warn.php
Original file line number Diff line number Diff line change
Expand Up @@ -68,10 +68,23 @@ public function warn($args)
}

// Warn users if mail from outside organization
if ($this->addressExternal($message->sender['mailto'])) {
// Derive sender address safely (sender may be false or missing)
$from_mailto = '';
if (is_array($message->sender) && !empty($message->sender['mailto'])) {
$from_mailto = $message->sender['mailto'];
} else {
// Fallback to "From" header
$decoded_from = rcube_mime::decode_address_list($message->from ?? '', 1, true, null, false);
if (is_array($decoded_from) && !empty($decoded_from)) {
$first_from = reset($decoded_from);
if (is_array($first_from) && !empty($first_from['mailto'])) {
$from_mailto = $first_from['mailto'];
}
}
}
if (!empty($from_mailto) && $this->addressExternal($from_mailto)) {
array_push($content, '<div class="notice warning">' . $this->gettext('from_outsite') . '</div>');
}

// Check X-Spam-Status
if ($this->isSpam($message->headers)) {
array_push($content, '<div class="notice error">' . $this->gettext('posible_spam') . '</div>');
Expand All @@ -94,39 +107,37 @@ public function mlist($p)
if (!$RCMAIL->config->get('avatars', true)) return;

$banner_avatar = array();

foreach ($p['messages'] as $index => $message) {
// Create entry
$banner_avatar[$message->uid] = array();

// Parse from address
$from = rcube_mime::decode_address_list($message->from, 1, true, null, false)[1];

// Check if we have a from email address (uhh)
if (isset($from)) {
// Get first letter of name
$name = $from["name"];
if (empty($name)) {
$name = $from["mailto"];
// SAFER: decode first address, compute defaults, avoid null-indexing
$decoded_from = rcube_mime::decode_address_list($message->from ?? '', 1, true, null, false);
$from = (is_array($decoded_from) && !empty($decoded_from)) ? reset($decoded_from) : null;

// Defaults
$name = '??';
$color = '999999';
$from_mailto = '';

if (is_array($from)) {
$from_mailto = $from['mailto'] ?? '';
$name_source = $from['name'] ?? $from_mailto;
$name_source = preg_replace("/[^A-Za-z0-9 ]/", '', (string)$name_source);
$name = strtoupper((string) mb_substr($name_source, 0, 1));
if (!empty($from_mailto)) {
$color = substr(md5($from_mailto), 0, 6);
}
$name = preg_replace("/[^A-Za-z0-9 ]/", '', $name);
$name = strtoupper($name[0]);

// Get md5 color from email
$color = substr(md5($from["mailto"]), 0, 6);
}

// Check for SPF fail
if (!isset($from) || $this->isSpam($message) || $this->spfFails($message)) {
$color = 'ff0000';
$name = '!';
$banner_avatar[$message->uid]['alert'] = 1;
}
else if ($RCMAIL->config->get('avatars_external_hexagon', true) && $this->addressExternal($from["mailto"])) {
// Warn hexagon for external sender (config-controlled)
if ($RCMAIL->config->get('avatars_external_hexagon', true) && !empty($from_mailto) && $this->addressExternal($from_mailto)) {
$banner_avatar[$message->uid]['warn'] = 1;
}

$banner_avatar[$message->uid]['name'] = $name;
$banner_avatar[$message->uid]['from'] = $from['mailto'];
$banner_avatar[$message->uid]['name'] = $name;
$banner_avatar[$message->uid]['from'] = $from_mailto;
$banner_avatar[$message->uid]['color'] = $color;
}

Expand All @@ -142,7 +153,9 @@ private function first($obj) {
}

private function addressExternal($address) {
return (!preg_match($this->org_mail_regex, $address));
$addr = (string) ($address ?? '');
if ($addr === '') return true; // treat unknown as external
return (!preg_match($this->org_mail_regex, $addr));
}

private function spfFails($headers) {
Expand Down
6 changes: 6 additions & 0 deletions localization/ar.inc
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
<?php
$labels = array();
$labels['from_outsite'] = 'هذا البريد صادر من خارج مؤسستك. لا تنقر على الروابط أو تفتح المرفقات ما لم تتعرف على المرسل وتتأكد من أن المحتوى آمن.';
$labels['posible_spam'] = 'تم تحديد هذا البريد على أنه بريد مزعج محتمل. كن أكثر حذراً أثناء التعامل مع محتوياته.';
$labels['spf_fail'] = 'تعذر التحقق من صحة مرسل هذا البريد الإلكتروني. <br> تجنب النقر على الروابط أو تنزيل المرفقات أو الرد بمعلومات شخصية.';
?>
6 changes: 6 additions & 0 deletions localization/ar_SA.inc
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
<?php
$labels = array();
$labels['from_outsite'] = 'هذا البريد صادر من خارج مؤسستك. لا تنقر على الروابط أو تفتح المرفقات ما لم تتعرف على المرسل وتتأكد من أن المحتوى آمن.';
$labels['posible_spam'] = 'تم تحديد هذا البريد على أنه بريد مزعج محتمل. كن أكثر حذراً أثناء التعامل مع محتوياته.';
$labels['spf_fail'] = 'تعذر التحقق من صحة مرسل هذا البريد الإلكتروني. <br> تجنب النقر على الروابط أو تنزيل المرفقات أو الرد بمعلومات شخصية.';
?>
6 changes: 6 additions & 0 deletions localization/bg_BG.inc
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
<?php
$labels = array();
$labels['from_outsite'] = 'Тази поща е изпратена извън вашата организация. Не кликвайте върху връзки и не отваряйте прикачени файлове, освен ако не познавате подателя и не знаете, че съдържанието е безопасно.';
$labels['posible_spam'] = 'Тази поща е идентифицирана като възможен спам. Бъдете особено внимателни при работа със съдържанието му.';
$labels['spf_fail'] = 'Автентичността на подателя на този имейл не може да бъде проверена. <br> Избягвайте да кликвате върху връзки, да изтегляте прикачени файлове или да отговаряте с лична информация.';
?>
6 changes: 6 additions & 0 deletions localization/cs_CZ.inc
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
<?php
$labels = array();
$labels['from_outsite'] = 'Tato pošta pochází od někoho mimo vaši organizaci. Neklikejte na odkazy ani neotvírejte přílohy, pokud neznáte odesílatele a nevíte, že je obsah bezpečný.';
$labels['posible_spam'] = 'Tento e-mail byl identifikován jako možný spam. Při práci s jeho obsahem buďte obzvláště opatrní.';
$labels['spf_fail'] = 'Pravost odesílatele tohoto e-mailu se nepodařilo ověřit. <br> Vyvarujte se klikání na odkazy, stahování příloh nebo odpovídání s uvedením osobních údajů.';
?>
6 changes: 6 additions & 0 deletions localization/da_DK.inc
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
<?php
$labels = array();
$labels['from_outsite'] = 'Denne mail stammer fra et sted uden for din organisation. Klik ikke på links eller åbn vedhæftede filer, medmindre du genkender afsenderen og ved, at indholdet er sikkert.';
$labels['posible_spam'] = 'Denne mail er blevet identificeret som mulig spam. Vær ekstra forsigtig, når du interagerer med dens indhold.';
$labels['spf_fail'] = 'Ægtheden af afsenderen af denne e-mail kunne ikke verificeres. <br> Undgå at klikke på links, downloade vedhæftede filer eller svare med personlige oplysninger.';
?>
6 changes: 6 additions & 0 deletions localization/de_CH.inc
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
<?php
$labels = array();
$labels['from_outsite'] = 'Diese E-Mail stammt von außerhalb Ihrer Organisation. Klicken Sie nicht auf Links und öffnen Sie keine Anhänge, wenn Sie den Absender nicht kennen und wissen, dass der Inhalt sicher ist.';
$labels['posible_spam'] = 'Diese E-Mail wurde als möglicher Spam identifiziert. Seien Sie besonders vorsichtig, wenn Sie mit ihrem Inhalt interagieren.';
$labels['spf_fail'] = 'Die Authentizität des Absenders dieser E-Mail konnte nicht überprüft werden. <br> Vermeiden Sie es, auf Links zu klicken, Anhänge herunterzuladen oder mit persönlichen Informationen zu antworten.';
?>
9 changes: 4 additions & 5 deletions localization/de_DE.inc
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
<?php

$labels = array();

$labels['from_outsite'] = "Der Absender dieser E-Mail ist nicht Teil ihrer Organisation. Klicken Sie nicht auf Links und Öffnen sie keine Anhänge, es sei denn Ihnen ist der Absender bekannt und Sie betrachten den Inhalt als vertrauenswürdig.";
$labels['posible_spam'] = "Die E-Mail ist möglicherweise Spam. Ihr Inhalt ist mit Vorsicht zu genießen.";
$labels['spf_fail'] = "Die Authentizität des angezeigten Absenders konnte nicht verifiziert werden.<br />Vermeiden Sie auf Links zu klicken, Anhänge zu öffnen oder persönlichen Details herauszugeben.";
$labels['from_outsite'] = 'Diese E-Mail stammt von außerhalb Ihrer Organisation. Klicken Sie nicht auf Links und öffnen Sie keine Anhänge, wenn Sie den Absender nicht kennen und wissen, dass der Inhalt sicher ist.';
$labels['posible_spam'] = 'Diese E-Mail wurde als möglicher Spam identifiziert. Seien Sie besonders vorsichtig, wenn Sie mit ihrem Inhalt interagieren.';
$labels['spf_fail'] = 'Die Authentizität des Absenders dieser E-Mail konnte nicht überprüft werden. <br> Vermeiden Sie es, auf Links zu klicken, Anhänge herunterzuladen oder mit persönlichen Informationen zu antworten.';
?>
6 changes: 6 additions & 0 deletions localization/el_GR.inc
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
<?php
$labels = array();
$labels['from_outsite'] = 'Αυτό το μήνυμα προέρχεται από κάποιον εκτός του οργανισμού σας. Μην κάνετε κλικ σε συνδέσμους και μην ανοίγετε συνημμένα αρχεία, εκτός εάν αναγνωρίζετε τον αποστολέα και γνωρίζετε ότι το περιεχόμενο είναι ασφαλές.';
$labels['posible_spam'] = 'Αυτό το μήνυμα έχει αναγνωριστεί ως πιθανή ανεπιθύμητη αλληλογραφία. Να είστε ιδιαίτερα προσεκτικοί όταν αλληλεπιδράτε με το περιεχόμενό του.';
$labels['spf_fail'] = 'Η γνησιότητα του αποστολέα αυτού του ηλεκτρονικού μηνύματος δεν μπόρεσε να επαληθευτεί. <br> Αποφύγετε να κάνετε κλικ σε συνδέσμους, να κατεβάσετε συνημμένα αρχεία ή να απαντήσετε με προσωπικές πληροφορίες.';
?>
6 changes: 6 additions & 0 deletions localization/en_CA.inc
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
<?php
$labels = array();
$labels['from_outsite'] = 'This mail originated from outside of your organization. Do not click links or open attachments unless you recognize the sender and know the content is safe.';
$labels['posible_spam'] = 'This mail has been identified as possible spam. Be extra careful while interacting with its contents.';
$labels['spf_fail'] = 'The authenticity of the sender of this email could not be verified. <br> Avoid clicking links, downloading attachments or replying with personal information.';
?>
6 changes: 6 additions & 0 deletions localization/en_GB.inc
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
<?php
$labels = array();
$labels['from_outsite'] = 'This mail originated from outside of your organization. Do not click links or open attachments unless you recognize the sender and know the content is safe.';
$labels['posible_spam'] = 'This mail has been identified as possible spam. Be extra careful while interacting with its contents.';
$labels['spf_fail'] = 'The authenticity of the sender of this email could not be verified. <br> Avoid clicking links, downloading attachments or replying with personal information.';
?>
6 changes: 6 additions & 0 deletions localization/es_419.inc
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
<?php
$labels = array();
$labels['from_outsite'] = 'Este correo procede de fuera de su organización. No haga clic en enlaces ni abra archivos adjuntos a menos que reconozca al remitente y sepa que el contenido es seguro.';
$labels['posible_spam'] = 'Este correo ha sido identificado como posible spam. Tenga mucho cuidado al interactuar con su contenido.';
$labels['spf_fail'] = 'No se ha podido verificar la autenticidad del remitente de este correo electrónico. <br> Evite hacer clic en enlaces, descargar archivos adjuntos o responder con información personal.';
?>
6 changes: 6 additions & 0 deletions localization/es_AR.inc
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
<?php
$labels = array();
$labels['from_outsite'] = 'Este correo procede de fuera de su organización. No haga clic en enlaces ni abra archivos adjuntos a menos que reconozca al remitente y sepa que el contenido es seguro.';
$labels['posible_spam'] = 'Este correo ha sido identificado como posible spam. Tenga mucho cuidado al interactuar con su contenido.';
$labels['spf_fail'] = 'No se ha podido verificar la autenticidad del remitente de este correo electrónico. <br> Evite hacer clic en enlaces, descargar archivos adjuntos o responder con información personal.';
?>
9 changes: 4 additions & 5 deletions localization/es_ES.inc
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
<?php

$labels = array();

$labels['from_outsite'] = "Este correo se originó desde fuera de su organización. No abra enlaces o adjuntos a menos que reconozca al remitente y sepa que el contenido es seguro.";
$labels['posible_spam'] = "Este correo ha sido identificado como posible SPAM. Tenga cuidado con su contenido.";
$labels['spf_fail'] = "La autenticidad del remitente no se pudo verificar. <br> Evite abrir enlaces, descargar adjuntos o responder con información personal.";
$labels['from_outsite'] = 'Este correo procede de fuera de su organización. No haga clic en enlaces ni abra archivos adjuntos a menos que reconozca al remitente y sepa que el contenido es seguro.';
$labels['posible_spam'] = 'Este correo ha sido identificado como posible spam. Tenga mucho cuidado al interactuar con su contenido.';
$labels['spf_fail'] = 'No se ha podido verificar la autenticidad del remitente de este correo electrónico. <br> Evite hacer clic en enlaces, descargar archivos adjuntos o responder con información personal.';
?>
6 changes: 6 additions & 0 deletions localization/et_EE.inc
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
<?php
$labels = array();
$labels['from_outsite'] = 'See post on pärit väljastpoolt teie organisatsiooni. Ärge klõpsake linkidele ega avage manuseid, kui te ei tunne saatjat ja ei tea, et sisu on turvaline.';
$labels['posible_spam'] = 'See post on tuvastatud kui võimalik rämpspost. Olge selle sisuga suhtlemisel eriti ettevaatlik.';
$labels['spf_fail'] = 'Selle e-kirja saatja autentsust ei olnud võimalik kontrollida. <br> Vältige linkidele klõpsamist, manuste allalaadimist või vastamist isiklike andmetega.';
?>
6 changes: 6 additions & 0 deletions localization/fi_FI.inc
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
<?php
$labels = array();
$labels['from_outsite'] = 'Tämä sähköposti on peräisin organisaatiosi ulkopuolelta. Älä napsauta linkkejä tai avaa liitetiedostoja, ellet tunnista lähettäjää ja tiedä, että sisältö on turvallista.';
$labels['posible_spam'] = 'Tämä sähköposti on tunnistettu mahdolliseksi roskapostiksi. Ole erityisen varovainen, kun käsittelet sen sisältöä.';
$labels['spf_fail'] = 'Tämän sähköpostiviestin lähettäjän aitoutta ei voitu todentaa. <br> Vältä linkkien klikkaamista, liitteiden lataamista tai vastaamista henkilökohtaisilla tiedoilla.';
?>
9 changes: 4 additions & 5 deletions localization/fr_FR.inc
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
<?php

$labels = array();

$labels['from_outsite'] = "Ce courrier provient d'une source extérieure à votre organisation. Ne cliquez pas sur les liens et n'ouvrez pas les pièces jointes à moins de reconnaître l'expéditeur et d'être certain que le contenu est sûr.";
$labels['posible_spam'] = "Ce courrier a été identifié comme potentiellement indésirable. Soyez particulièrement prudent lorsque vous interagissez avec son contenu.";
$labels['spf_fail'] = "L'authenticité de l'expéditeur de cet e-mail n'a pas pu être vérifiée. <br> Évitez de cliquer sur des liens, de télécharger des pièces jointes ou de répondre avec des informations personnelles.";
$labels['from_outsite'] = 'Ce courrier provient d\'une personne extérieure à votre organisation. Ne cliquez pas sur les liens et n\'ouvrez pas les pièces jointes si vous ne reconnaissez pas l\'expéditeur et si vous ne savez pas que le contenu est sûr.';
$labels['posible_spam'] = 'Ce courrier a été identifié comme un possible spam. Soyez très prudent lorsque vous interagissez avec son contenu.';
$labels['spf_fail'] = 'L\'authenticité de l\'expéditeur de cet e-mail n\'a pas pu être vérifiée. <Évitez de cliquer sur les liens, de télécharger les pièces jointes ou de répondre avec des informations personnelles.';
?>
6 changes: 6 additions & 0 deletions localization/he_IL.inc
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
<?php
$labels = array();
$labels['from_outsite'] = 'דוא"ל זה נשלח מחוץ לארגון שלך. אל תלחץ על קישורים ואל תפתח קבצים מצורפים, אלא אם כן אתה מכיר את השולח ויודע שהתוכן בטוח.';
$labels['posible_spam'] = 'דוא"ל זה זוהה כספאם אפשרי. יש לנהוג בזהירות יתרה בעת התכתבות עם תוכנו.';
$labels['spf_fail'] = 'לא ניתן לאמת את זהות השולח של דוא"ל זה. <br> הימנע מללחוץ על קישורים, להוריד קבצים מצורפים או להשיב עם מידע אישי.';
?>
9 changes: 4 additions & 5 deletions localization/hu_HU.inc
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
<?php

$labels = array();

$labels['from_outsite'] = "Ez az e-mail a szervezeten kívülről származik. Ne nyisd meg a benne szereplő linkekt és csatolmányokat amennyiben nem ismered a feladót vagy nem biztos a csatolmányok megbízhatósága!";
$labels['posible_spam'] = "Ez az e-mail lehetséges spamnek lett jelölve. Bánj különös megfontossággal a tartalmával!";
$labels['spf_fail'] = "Nem sikerült ellenőrizni a feladó személyazonosságát. <br> Kerüld a linkek és csatolmányok megnyitását, illetve válaszodban a személyes adatok küldését!";
$labels['from_outsite'] = 'Ez a levél az Ön szervezetén kívülről érkezett. Ne kattintson a linkekre, és ne nyissa meg a mellékleteket, hacsak nem ismeri fel a feladót, és nem tudja, hogy a tartalom biztonságos.';
$labels['posible_spam'] = 'Ezt a levelet lehetséges spamként azonosították. Legyen különösen óvatos a tartalmával való interakció során.';
$labels['spf_fail'] = 'Az e-mail feladójának hitelességét nem sikerült ellenőrizni. <br> Kerülje a linkekre való kattintást, a mellékletek letöltését vagy a személyes adatokkal való válaszadást.';
?>
6 changes: 6 additions & 0 deletions localization/id_ID.inc
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
<?php
$labels = array();
$labels['from_outsite'] = 'Email ini berasal dari luar organisasi Anda. Jangan klik tautan atau membuka lampiran kecuali jika Anda mengenali pengirimnya dan mengetahui bahwa kontennya aman.';
$labels['posible_spam'] = 'Email ini telah diidentifikasi sebagai spam. Berhati-hatilah saat berinteraksi dengan isinya.';
$labels['spf_fail'] = 'Keaslian pengirim email ini tidak dapat diverifikasi. <br> Hindari mengklik tautan, mengunduh lampiran, atau membalas dengan informasi pribadi.';
?>
Loading