Monday, June 7, 2010

CRM 4.0 -Send Email using CRM SDK

I got asked for some sample code for sending an email from CRM 4.0 by using the SDK, so thought I would post the code.


1. Create an Email template. so that we can modify the email content at anytime.







2. Here is the code to retrieve the email template and send email using CRM SDK.I have created a queue based on our requirment.so all email should go using this queue Email.

public static void sendEmail(ref CrmService service, Guid entityId, Guid customerid, string customertype, string createdate)

{

try

{

Guid mailID = Guid.Empty;

SendEmailRequest req = new SendEmailRequest();




InstantiateTemplateRequest instTemplate = new InstantiateTemplateRequest();

instTemplate.TemplateId = new Guid("XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX"); //guid of email template

instTemplate.ObjectId = entityId;

instTemplate.ObjectType = EntityName.incident.ToString();



InstantiateTemplateResponse instTemplateResponse = (InstantiateTemplateResponse)service.Execute(instTemplate);

email emailresponse = (email)instTemplateResponse.BusinessEntityCollection.BusinessEntities[0];



Guid queueId = GetQueueGuid(ref service, "Customer Service");



ArrayList alProperty = new ArrayList();



DynamicEntity newEmail = new DynamicEntity();

newEmail.Name = "email";



DynamicEntityArrayProperty deapFrom = new DynamicEntityArrayProperty();

deapFrom.Value = ConvertIntoSingleActivityParty(queueId, EntityName.queue.ToString());

deapFrom.Name = "from";

newEmail.Properties.Add(deapFrom);



DynamicEntityArrayProperty deapTo = new DynamicEntityArrayProperty();

deapTo.Name = "to";

deapTo.Value = ConvertIntoSingleActivityParty(customerid, customertype);

newEmail.Properties.Add(deapTo);



StringProperty strPropDescription = new StringProperty();

strPropDescription.Value = emailresponse.subject;

strPropDescription.Name = "subject";

alProperty.Add(strPropDescription);



StringProperty strPropMessageBody = new StringProperty();

strPropMessageBody.Value = emailresponse.description;

strPropMessageBody.Name = "description";

alProperty.Add(strPropMessageBody);



CrmBooleanProperty ack = new CrmBooleanProperty();

ack.Value = new CrmBoolean(true);

ack.Name = "mda_autoresponse";

alProperty.Add(ack);



Lookup caseid = new Lookup();

caseid.Value = entityId;

caseid.type = EntityName.incident.ToString();



LookupProperty lookupPropRegardingObject = new LookupProperty();

lookupPropRegardingObject.Value = caseid;

lookupPropRegardingObject.Name = "regardingobjectid";

alProperty.Add(lookupPropRegardingObject);



Property[] prop = new Property[alProperty.Count];

alProperty.CopyTo(prop);



newEmail.Properties.AddRange(prop);



TargetCreateDynamic myTarget = new TargetCreateDynamic();

myTarget.Entity = newEmail;

CreateRequest create = new CreateRequest();

create.Target = myTarget;

CreateResponse myResponse = (CreateResponse)service.Execute(create);



SendEmailRequest emailreq = new SendEmailRequest();

emailreq.EmailId = myResponse.id;

emailreq.TrackingToken = "";

emailreq.IssueSend = true;

// Send the e-mail message.

SendEmailResponse res = (SendEmailResponse)service.Execute(emailreq);

}




private static DynamicEntity[] ConvertIntoSingleActivityParty(Guid senderId, string entityname)

{

DynamicEntity[] part = new DynamicEntity[1];

try

{

part[0] = new DynamicEntity();

part[0].Name = "activityparty";



LookupProperty lProp = new LookupProperty();

lProp.Name = "partyid";

Lookup l = new Lookup();

l.type = entityname;

l.Value = senderId;



lProp.Value = l;



Property[] prop = new Property[1];

prop[0] = lProp;



part[0].Properties.AddRange(prop);

return part;

}

catch (System.Web.Services.Protocols.SoapException soapex)

{

throw soapex;

}

catch (Exception ex)

{ throw ex; }

}



Hope this will help you guys to send email from email Template.



Happy Coding.!!!!!!!1

No comments:

Post a Comment