From 69fb887e63d6a54ff78a8127398fb6fd79d2dc7c Mon Sep 17 00:00:00 2001 From: the-djmaze <> Date: Mon, 17 Oct 2022 16:16:06 +0200 Subject: [PATCH] Improved BIMI detection code #115 --- .../0.0.0/app/libraries/MailSo/Mime/Email.php | 9 +--- .../v/0.0.0/app/libraries/snappymail/dns.php | 44 +++++++++++++++++++ 2 files changed, 45 insertions(+), 8 deletions(-) create mode 100644 snappymail/v/0.0.0/app/libraries/snappymail/dns.php diff --git a/snappymail/v/0.0.0/app/libraries/MailSo/Mime/Email.php b/snappymail/v/0.0.0/app/libraries/MailSo/Mime/Email.php index 2a117ad62..b923c87c8 100644 --- a/snappymail/v/0.0.0/app/libraries/MailSo/Mime/Email.php +++ b/snappymail/v/0.0.0/app/libraries/MailSo/Mime/Email.php @@ -260,14 +260,7 @@ class Email implements \JsonSerializable /* $BIMI = ''; if (Enumerations\DkimStatus::PASS == $this->GetDkimStatus()) { - if ($values = \dns_get_record($this->GetDomain(), \DNS_TXT)) { - foreach ($values as $value) { - if (\str_starts_with($value['txt'], 'v=BIMI1')) { - $BIMI = \preg_replace('/^.+l=([^;]+)(;.*)?$/', '$1', $value['txt']); - break; - } - } - } + $BIMI = \SnappyMail\DNS\BIMI($this->GetDomain()); } */ return array( diff --git a/snappymail/v/0.0.0/app/libraries/snappymail/dns.php b/snappymail/v/0.0.0/app/libraries/snappymail/dns.php new file mode 100644 index 000000000..302f2e841 --- /dev/null +++ b/snappymail/v/0.0.0/app/libraries/snappymail/dns.php @@ -0,0 +1,44 @@ +Cacher(); + $BIMI = $oCache->Get("dns-bimi-{$domain}") ?: null; + if ($BIMI) { + $BIMI = \json_decode($BIMI); + if ($BIMI[1] < \time()) { + $BIMI = null; + } else { + $BIMI = $BIMI[0]; + } + } + if (null === $BIMI) { + $BIMI = ''; + $values = \dns_get_record($domain, \DNS_TXT); + if ($values) { + foreach ($values as $value) { + if (\str_starts_with($value['txt'], 'v=BIMI1')) { + $BIMI = \preg_replace('/^.+l=([^;]+)(;.*)?$/D', '$1', $value['txt']); + $oCache->Set("dns-bimi-{$domain}", \json_encode([ + $BIMI, + time() + $value['ttl'] + ])); + break; + } + } + } + if (!$BIMI) { + // Don't lookup for 24 hours + $oCache->Set("dns-bimi-{$domain}", \json_encode([ + $BIMI, + time() + 86400 + ])); + } + } + return $BIMI; + } +}