diff --git a/src/XrmMockup365/Requests/SendEmailRequestHandler.cs b/src/XrmMockup365/Requests/SendEmailRequestHandler.cs index 1f338a48..72a3aa21 100644 --- a/src/XrmMockup365/Requests/SendEmailRequestHandler.cs +++ b/src/XrmMockup365/Requests/SendEmailRequestHandler.cs @@ -106,10 +106,15 @@ internal override OrganizationResponse Execute(OrganizationRequest orgRequest, E if (activityParty.Contains("partyid")) { var partyRef = activityParty.GetAttributeValue("partyid"); - if (db.GetEntityOrNull(partyRef) is null) + var partyEntity = db.GetEntityOrNull(partyRef); + if (partyEntity is null) { throw new FaultException($"{partyRef.LogicalName} with Id = {partyRef.Id} does not exist"); } + if (string.IsNullOrEmpty(partyEntity.GetAttributeValue("emailaddress1"))) + { + throw new FaultException($"{partyRef.LogicalName} with Id = {partyRef.Id} does not have an email address"); + } } else if (!activityParty.Contains("addressused")) { @@ -122,7 +127,6 @@ internal override OrganizationResponse Execute(OrganizationRequest orgRequest, E throw new FaultException("The email must have at least one recipient before it can be sent"); } - email["statecode"] = new OptionSetValue(EMAIL_STATE_COMPLETED); email["statuscode"] = new OptionSetValue(request.IssueSend ? EMAIL_STATUS_PENDING_SEND : EMAIL_STATUS_SENT); diff --git a/tests/XrmMockup365Test/TestSendEmail.cs b/tests/XrmMockup365Test/TestSendEmail.cs index 4e6f17f0..fa6c51fc 100644 --- a/tests/XrmMockup365Test/TestSendEmail.cs +++ b/tests/XrmMockup365Test/TestSendEmail.cs @@ -356,5 +356,42 @@ public void TestSendEmailRequestFailsWhenRecipientInvalid() Assert.Throws(() => orgAdminUIService.Execute(sendEmailRequest)); } + + [Fact] + public void TestSendEmailRequestFailsWhenRecipientHasNoEmailAddress1() + { + var contact = new Contact + { + FirstName = "Test" + }; + contact.Id = orgAdminUIService.Create(contact); + + var email = new Email + { + From = new ActivityParty[] + { + new ActivityParty + { + PartyId = crm.AdminUser + } + }, + To = new ActivityParty[] + { + new ActivityParty + { + PartyId = contact.ToEntityReference() + } + }, + Subject = "Test Email", + }; + email.Id = orgAdminUIService.Create(email); + + var sendEmailRequest = new SendEmailRequest + { + EmailId = email.Id + }; + + Assert.Throws(() => orgAdminUIService.Execute(sendEmailRequest)); + } } }