Skip to content

Commit 9070951

Browse files
author
Scott Bommarito
authored
Hotfix: Do not CC sender for Contact Owners emails (#6602)
1 parent e582941 commit 9070951

6 files changed

Lines changed: 28 additions & 48 deletions

File tree

src/NuGetGallery.Core/Infrastructure/mail/CoreMarkdownMessageService.cs

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -39,11 +39,16 @@ public async Task SendMessageAsync(IEmailBuilder emailBuilder, bool copySender =
3939

4040
using (var email = CreateMailMessage(emailBuilder))
4141
{
42-
await SendMessageInternalAsync(email, copySender, discloseSenderAddress);
42+
await SendMessageInternalAsync(email);
43+
44+
if (copySender && !discloseSenderAddress)
45+
{
46+
await SendMessageToSenderAsync(email);
47+
}
4348
}
4449
}
4550

46-
protected virtual async Task SendMessageInternalAsync(MailMessage mailMessage, bool copySender = false, bool discloseSenderAddress = false)
51+
protected virtual async Task SendMessageInternalAsync(MailMessage mailMessage)
4752
{
4853
if (!mailMessage.To.Any())
4954
{
@@ -72,11 +77,6 @@ protected virtual async Task SendMessageInternalAsync(MailMessage mailMessage, b
7277
}
7378
}
7479
}
75-
76-
if (copySender && !discloseSenderAddress)
77-
{
78-
await SendMessageToSenderAsync(mailMessage);
79-
}
8080
}
8181

8282
protected virtual Task AttemptSendMessageAsync(MailMessage mailMessage, int attemptNumber)

src/NuGetGallery/Controllers/PackagesController.cs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1115,8 +1115,7 @@ public virtual async Task<ActionResult> ContactOwners(string id, string version,
11151115
package,
11161116
Url.Package(package, false),
11171117
HttpUtility.HtmlEncode(contactForm.Message),
1118-
Url.AccountSettings(relativeUrl: false),
1119-
contactForm.CopySender);
1118+
Url.AccountSettings(relativeUrl: false));
11201119

11211120
await _messageService.SendMessageAsync(contactOwnersMessage, contactForm.CopySender, discloseSenderAddress: false);
11221121

src/NuGetGallery/Infrastructure/Mail/BackgroundMarkdownMessageService.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ public BackgroundMarkdownMessageService(
3030
private Func<BackgroundMarkdownMessageService> _messageServiceFactory;
3131
private bool _sentMessage;
3232

33-
protected override Task SendMessageInternalAsync(MailMessage mailMessage, bool copySender = false, bool discloseSenderAddress = false)
33+
protected override Task SendMessageInternalAsync(MailMessage mailMessage)
3434
{
3535
// Some MVC controller actions send more than one message. Since this method sends
3636
// the message async, we need a new IMessageService per email, to avoid calling
@@ -39,7 +39,7 @@ protected override Task SendMessageInternalAsync(MailMessage mailMessage, bool c
3939
if (_sentMessage)
4040
{
4141
var newMessageService = _messageServiceFactory.Invoke();
42-
return newMessageService.SendMessageInternalAsync(mailMessage, copySender, discloseSenderAddress);
42+
return newMessageService.SendMessageInternalAsync(mailMessage);
4343
}
4444
else
4545
{
@@ -55,7 +55,7 @@ protected override Task SendMessageInternalAsync(MailMessage mailMessage, bool c
5555
{
5656
try
5757
{
58-
await base.SendMessageInternalAsync(messageCopy, copySender, discloseSenderAddress);
58+
await base.SendMessageInternalAsync(messageCopy);
5959
}
6060
catch (Exception ex)
6161
{

src/NuGetGallery/Infrastructure/Mail/Messages/ContactOwnersMessage.cs

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,24 +17,21 @@ public ContactOwnersMessage(
1717
Package package,
1818
string packageUrl,
1919
string htmlEncodedMessage,
20-
string emailSettingsUrl,
21-
bool copySender)
20+
string emailSettingsUrl)
2221
{
2322
_configuration = configuration ?? throw new ArgumentNullException(nameof(configuration));
2423
FromAddress = fromAddress ?? throw new ArgumentNullException(nameof(fromAddress));
2524
Package = package ?? throw new ArgumentNullException(nameof(package));
2625
PackageUrl = packageUrl ?? throw new ArgumentNullException(nameof(packageUrl));
2726
HtmlEncodedMessage = htmlEncodedMessage ?? throw new ArgumentNullException(nameof(htmlEncodedMessage));
2827
EmailSettingsUrl = emailSettingsUrl ?? throw new ArgumentNullException(nameof(emailSettingsUrl));
29-
CopySender = copySender;
3028
}
3129

3230
public MailAddress FromAddress { get; }
3331
public Package Package { get; }
3432
public string PackageUrl { get; }
3533
public string HtmlEncodedMessage { get; }
3634
public string EmailSettingsUrl { get; }
37-
public bool CopySender { get; }
3835

3936
public override MailAddress Sender => _configuration.GalleryOwner;
4037

@@ -46,7 +43,6 @@ public override IEmailRecipients GetRecipients()
4643

4744
return new EmailRecipients(
4845
to,
49-
cc: CopySender ? new[] { FromAddress } : null,
5046
replyTo: new[] { FromAddress });
5147
}
5248

tests/NuGetGallery.Facts/Infrastructure/Mail/Messages/ContactOwnersMessageFacts.cs

Lines changed: 5 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -43,8 +43,7 @@ public void GivenANullArgument_ItShouldThrow(
4343
package,
4444
packageUrl,
4545
message,
46-
emailSettingsUrl,
47-
copySender));
46+
emailSettingsUrl));
4847
}
4948
}
5049

@@ -72,19 +71,9 @@ public void AddsFromAddressToReplyToList()
7271
}
7372

7473
[Fact]
75-
public void AddsFromAddressToCCListWhenCopyingSender()
74+
public void DoesNotAddFromAddressToCCList()
7675
{
77-
var message = CreateMessage(copySender: true);
78-
var recipients = message.GetRecipients();
79-
80-
Assert.Equal(1, recipients.CC.Count);
81-
Assert.Contains(Fakes.FromAddress, recipients.CC);
82-
}
83-
84-
[Fact]
85-
public void DoesNotAddFromAddressToCCListWhenNotCopyingSender()
86-
{
87-
var message = CreateMessage(copySender: false);
76+
var message = CreateMessage();
8877
var recipients = message.GetRecipients();
8978

9079
Assert.Empty(recipients.CC);
@@ -122,16 +111,15 @@ public void SetsGalleryOwnerAsSender()
122111
Assert.Equal(Configuration.GalleryOwner, message.Sender);
123112
}
124113

125-
private static ContactOwnersMessage CreateMessage(bool copySender = false)
114+
private static ContactOwnersMessage CreateMessage()
126115
{
127116
return new ContactOwnersMessage(
128117
Configuration,
129118
Fakes.FromAddress,
130119
Fakes.Package,
131120
Fakes.PackageUrl,
132121
"user input",
133-
Fakes.EmailSettingsUrl,
134-
copySender);
122+
Fakes.EmailSettingsUrl);
135123
}
136124

137125
private const string _expectedMarkdownBody =

tests/NuGetGallery.Facts/Services/MessageServiceFacts.cs

Lines changed: 11 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -233,7 +233,7 @@ public class TheSendContactOwnersMessageMethod
233233
: TestContainer
234234
{
235235
[Fact]
236-
public async Task WillCopySenderIfAsked()
236+
public async Task WillSendCopyToSenderIfAsked()
237237
{
238238
// arrange
239239
var packageId = "smangit";
@@ -267,8 +267,7 @@ public async Task WillCopySenderIfAsked()
267267
package,
268268
"http://someurl/",
269269
"Test message",
270-
"http://someotherurl/",
271-
copySender: true);
270+
"http://someotherurl/");
272271

273272
// act
274273
await messageService.SendMessageAsync(contactOwnersMessage, copySender: true, discloseSenderAddress: false);
@@ -285,6 +284,8 @@ public async Task WillCopySenderIfAsked()
285284
Assert.Equal(TestGalleryOwner, messages[1].From);
286285
Assert.Equal(fromAddress, messages[0].ReplyToList.Single().Address);
287286
Assert.Equal(fromAddress, messages[1].ReplyToList.Single().Address);
287+
Assert.Empty(messages[0].CC);
288+
Assert.Empty(messages[1].CC);
288289
}
289290

290291
[Fact]
@@ -320,11 +321,10 @@ public async Task WillSendEmailToAllOwners()
320321
package,
321322
"http://packageUrl/",
322323
"Test message",
323-
"http://emailSettingsUrl/",
324-
copySender: false);
324+
"http://emailSettingsUrl/");
325325

326326
await messageService.SendMessageAsync(contactOwnersMessage);
327-
var message = messageService.MockMailSender.Sent.Last();
327+
var message = messageService.MockMailSender.Sent.Single();
328328

329329
Assert.Equal(owner1Email, message.To[0].Address);
330330
Assert.Equal(owner2Email, message.To[1].Address);
@@ -372,11 +372,10 @@ public async Task WillNotSendEmailToOwnerThatOptsOut()
372372
package,
373373
"http://someurl/",
374374
"Test message",
375-
"http://someotherurl/",
376-
copySender: false);
375+
"http://someotherurl/");
377376

378377
await messageService.SendMessageAsync(contactOwnersMessage);
379-
var message = messageService.MockMailSender.Sent.Last();
378+
var message = messageService.MockMailSender.Sent.Single();
380379

381380
// assert
382381
Assert.Equal(ownerAddress, message.To[0].Address);
@@ -418,8 +417,7 @@ public async Task WillNotAttemptToSendIfNoOwnersAllow()
418417
package,
419418
"http://someurl/",
420419
"Test message",
421-
"http://someotherurl/",
422-
copySender: false);
420+
"http://someotherurl/");
423421

424422
await messageService.SendMessageAsync(contactOwnersMessage);
425423

@@ -428,7 +426,7 @@ public async Task WillNotAttemptToSendIfNoOwnersAllow()
428426
}
429427

430428
[Fact]
431-
public async Task WillNotCopySenderIfNoOwnersAllow()
429+
public async Task WillNotSendCopyToSenderIfNoOwnersAllow()
432430
{
433431
// arrange
434432
var packageId = "smangit";
@@ -461,8 +459,7 @@ public async Task WillNotCopySenderIfNoOwnersAllow()
461459
package,
462460
"http://someurl/",
463461
"Test message",
464-
"http://someotherurl/",
465-
copySender: false);
462+
"http://someotherurl/");
466463
await messageService.SendMessageAsync(contactOwnersMessage);
467464

468465
// assert

0 commit comments

Comments
 (0)