diff --git a/Toolkit.Modern.Tests/Unit/Mail/EmailAttachmentHandlerTests.cs b/Toolkit.Modern.Tests/Unit/Mail/EmailAttachmentHandlerTests.cs
index 60e33c4..d69ea3b 100644
--- a/Toolkit.Modern.Tests/Unit/Mail/EmailAttachmentHandlerTests.cs
+++ b/Toolkit.Modern.Tests/Unit/Mail/EmailAttachmentHandlerTests.cs
@@ -334,6 +334,32 @@ public void ProcessAttachments_CompressionWithFileNameMap_ShouldUseCustomNames()
email.Dispose();
}
+ ///
+ /// Verifies that repeated compression operations create distinct temporary attachment names.
+ ///
+ ///
+ /// Guards against timestamp-only temporary zip names colliding during parallel test or application runs.
+ ///
+ [TestMethod]
+ public void ProcessAttachments_RepeatedCompression_ShouldUseUniqueZipNames()
+ {
+ // Arrange
+ var files = new List { _testFiles[2] };
+ var zipNames = new HashSet(StringComparer.OrdinalIgnoreCase);
+
+ // Act
+ for (var i = 0; i < 3; i++)
+ {
+ using var email = CreateTestEmail();
+ var result = _handler.ProcessAttachments(email, files, [], true);
+
+ // Assert
+ result.Success.Should().BeTrue($"compression pass {i} should succeed");
+ email.Attachments.Should().ContainSingle("each compression pass should produce one zip");
+ zipNames.Add(email.Attachments[0].Name).Should().BeTrue("each compressed attachment should use a unique zip name");
+ }
+ }
+
#endregion
#region ProcessAttachments Method Tests - Large File Compression
@@ -620,4 +646,4 @@ public void ProcessAttachments_FileSizeFormatting_ShouldDisplayCorrectly()
#endregion
}
-}
\ No newline at end of file
+}
diff --git a/Toolkit.Modern/Mail/EmailAttachmentHandler.cs b/Toolkit.Modern/Mail/EmailAttachmentHandler.cs
index 0b870ec..ea84e0a 100644
--- a/Toolkit.Modern/Mail/EmailAttachmentHandler.cs
+++ b/Toolkit.Modern/Mail/EmailAttachmentHandler.cs
@@ -82,8 +82,8 @@ public AttachmentProcessResult ProcessAttachments(MailMessage email, List