diff --git a/mailboxes/folders-lib.pl b/mailboxes/folders-lib.pl
index 55d4c197d..d2a8899c4 100755
--- a/mailboxes/folders-lib.pl
+++ b/mailboxes/folders-lib.pl
@@ -2798,17 +2798,32 @@ while($html =~ /^([\000-\377]*?)(<\s*img[^>]*src=('[^']*'|"[^"]*"|\S+)[^>]*>)([\
my ($before, $allimg, $img, $after) = ($1, $2, $3, $4);
$img =~ s/^'(.*)'$/$1/ || $img =~ s/^"(.*)"$/$1/;
push(@$urls, $img) if ($urls);
- if ($dis == 0) {
+ if ($dis == 3) {
+ # Let server load it in async mode
+ my $imgid = substitute_pattern('[a-f0-9]{40}');
+ my $imgcont = $allimg;
+ $imgcont =~ s/src=/data-presrc=/g;
+ $imgcont =~ s/\Q$img\E/$imgid/g;
+ $newhtml .=
+ "$before$imgcont";
+ $masked_img++;
+ # Try switching to remote user to correctly
+ # set temporary directory for super-users
+ &switch_to_remote_user();
+ # Save image URL reference
+ &write_file_contents(&tempname($imgid), $img);
+ }
+ elsif ($dis == 0) {
# Don't harm image
$newhtml .= $before.$allimg;
}
elsif ($dis == 1) {
# Don't touch unless offsite
if ($img =~ /^(http|https|ftp):/) {
- $masked_img++;
my $imgcont = $allimg;
$imgcont =~ s/src=/data-nosrc=/g;
$newhtml .= $before.$imgcont;
+ $masked_img++;
}
else {
$newhtml .= $before.$allimg;
@@ -2823,17 +2838,36 @@ while($html =~ /^([\000-\377]*?)(<\s*img[^>]*src=('[^']*'|"[^"]*"|\S+)[^>]*>)([\
$newhtml .= $html;
if ($masked_img) {
my $masked_img_style =
- "";
+ }
+ \@keyframes mail-iframe-spinner {
+ to {
+ transform: rotate(360deg);
+ }
+ }
+ .img-presrc {
+ animation: mail-iframe-spinner .4s linear infinite;
+ border-radius: 50%;
+ border: 1.5px solid #bbbbbb;
+ border-top-color: #000000;
+ box-sizing: border-box;
+ content: '';
+ height: 12px;
+ width: 12px;
+ position: absolute;
+ }
+ img[data-presrc]
+ {
+ opacity: 0;
+ }
+ ";
$masked_img_style =~ s/[\n\r\s]+/ /g;
$masked_img_style = &trim($masked_img_style);
if ($newhtml =~ /<\/body>/) {
@@ -2864,6 +2898,8 @@ if ($body =~ /<\/body>/) {
}
$body = &trim("e_escape($body, '"'));
# Email iframe stuff
+my $webprefix = &get_webprefix();
+my $image_mode = int(defined($in{'images'}) ? $in{'images'} : $userconfig{'view_images'});
my $iframe_body = <