Отправка электронной почты Dynamics 365 Web API

Я создаю подписку на страницы на веб-сайте. Итак, будущий подписчик отправит сообщение через форму и будет добавлен в маркетинговый список в Dynamics 365 Online.

После запланированной работы на веб-сайте я делаю запрос контактов в маркетинговом списке.

Затем мне нужно отправить им электронное письмо о создании новой страницы с этими свойствами и ссылку на эту страницу.

Поэтому я хотел бы взять на себя эту ответственность Dynamics 365 Online.

Итак, я использую веб-API и действие: SendEmailFromTemplate. Не уверен, могу ли я использовать это действие или мне нужно создать настраиваемое действие.

Мне нужно будет передать такие данные, как URL-адрес страницы, заголовок и текст. Или всего одна строка - тело сообщения электронной почты, содержащее все это.

Итак, я создал шаблон электронной почты в CRM, и похоже, что код его находит!

Я думаю, что это действие, которое мне нужно: https://msdn.microsoft.com/en-us/library/mt607523.aspx

Если я проверю документацию в службе SOAP, на самом деле есть примеры: https://msdn.microsoft.com/en-us/library/microsoft.crm.sdk.messages.sendemailfromtemplaterequest.aspx?cs-save-lang=1&

Но я собираюсь использовать веб-API.

Итак, я попробовал это:

dynamic regarding = new ExpandoObject();
var oppIndexer = regarding as IDictionary<string, Object>;
oppIndexer["contactid"] = contact.ContactId; //contact that will recive the 
email.
oppIndexer["@odata.type"] = "Microsoft.Dynamics.CRM.contact";

dynamic target = new ExpandoObject();
var targetIndexer = target as IDictionary<string, Object>;
targetIndexer["torecipients"] = "[email protected]";
targetIndexer["sender"] = "[email protected]";
targetIndexer["inreplyto"] = "[email protected]";
targetIndexer["subject"] = "This is the subject";
targetIndexer["description"] = "This should be the body of the email";
targetIndexer["directioncode"] = true; //outgoing
targetIndexer["@odata.type"] = "Microsoft.Dynamics.CRM.email";

dynamic sendEmailFromTemplate = new ExpandoObject();
sendEmailFromTemplate.TemplateId = Guid.Parse("my-email-template-guid-inserted-here");
sendEmailFromTemplate.Regarding = regarding;
sendEmailFromTemplate.Target = target;

api.ExecuteAction("SendEmailFromTemplate", sendEmailFromTemplate);

Но я получаю исключение: «У электронного письма должен быть хотя бы один получатель, прежде чем оно может быть отправлено», когда я отправляю его.

В чем может быть проблема?

Я думаю, что документация по адресу: https://msdn.microsoft.com/en-us/library/mt607523.aspx

Просто объявите, что тип цели и относительно должен быть типа crmbaseentity. Базовый класс ...

Кто-нибудь знает, что может вызвать это?

Это объект электронной почты: https://msdn.microsoft.com/en-us/library/mt608007.aspx

Для поля «получателям» можно было бы читать: «Показывает адреса электронной почты, соответствующие получателям». Так что я не уверен, что мне следует использовать это поле. Если бы текст был «Получатели с», «разделитель, который получит сообщение», я был бы более уверен, что мне придется использовать это поле.

Обновление: Хорошо, вот что вы опубликовали:

{
 "email_activity_parties": [ 
    { "[email protected]": "/systemusers(852a441c-b544-e611-80e3-c4346bc5e750)", "participationtypemask": 1 }, 
    { "[email protected]": "/systemusers(852a441c-b544-e611-80e3-c4346bc5e750)", "participationtypemask": 2 }
  ],
 "description": "description lorem ipsum",
 "subject": "rubrik",
 "[email protected]": "/opportunities(e9e6eb64-9c4c-e611-80e4-c4346bc58294)"
}

Если бы я изменил это так, чтобы он соответствовал моим потребностям. Не думаю, что буду использовать возможности. Или я должен? Есть три параметра для действия SendEmailFromTemplate: https://msdn.microsoft.com/en-us/library/mt607523.aspx TemplateId, в отношении и цели. Я немного изменил этот код (непроверенный)

{
 "TemplateId": "id-for-email-template",
 "Regarding": [ { "[email protected]": "/contacts(contact-guid-X)" } ],
 "Target": {
     "email_activity_parties": [ 
        { "[email protected]": "/systemusers(systemuser-guid-Y)", "participationtypemask": 1 }, //1 is "sender"
        { "[email protected]": "/contacts(contact-guid-X)", "participationtypemask": 2 } // 2 is "to"
      ],
     "description": "description lorem ipsum",
     "subject": "rubrik",
     "[email protected]": "/contacts(contact-guid-X)"
    }
}

Я попробую что-то подобное ..


person Johan Pettersson    schedule 23.11.2017    source источник
comment
Мне нужно установить @ odata.type, я думаю ...   -  person Johan Pettersson    schedule 23.11.2017


Ответы (1)


Электронная почта - это действие, все действия будут разделены на указатель активности + группу действий. Вам нужно поместить тот же контакт, который вы используете для regardingobject, в toParty.

//create activityparty
 Entity Fromparty = new Entity("activityparty");
 Entity Toparty = new Entity("activityparty");

//To set to Contact
Toparty["partyid"]= new EntityReference("contact", _ contactid));

//From set to User
Fromparty["partyid"]= new EntityReference("systemuser", _From));

//create email Object and set attributes
Entity email = new Entity("email");

email["from"] = new Entity[] { Fromparty };
email["to"] = new Entity[] { Toparty };
email["directioncode"] = true;

//setting the Regarding as Contact
email["regardingobjectid"] = new EntityReference("contact", _contactid);

Игнорировать torecipients поле, используйте только to.

Ошибка The e-mail must have at least one recipient before it can be sent исчезнет.

Обновлять:

Мы должны использовать свойство навигации с точки зрения веб-API.

//Create email
var email = new JObject(
           new JProperty("email_activity_parties",
             new JArray(
                  new JObject(
                          new JProperty("[email protected]", "/systemusers (<guid>)"),
          new JProperty("participationtypemask", 1)),
                     new JObject(
                           new JProperty("[email protected]", "/systemusers(<guid>)"),
                   new JProperty("participationtypemask", 2)))),
                  new JProperty("description", txtEmail.Text.Replace("\r\n","<br>")),
                  new JProperty("subject", "Test Subject"),
                  new JProperty("[email protected]", "/opportunities(<guid>)"));
person Arun Vinoth    schedule 23.11.2017
comment
Я видел много примеров этого, но не видел примеров веб-API. Как будет выглядеть сообщение в формате JSON? - person Johan Pettersson; 23.11.2017
comment
Хорошо, я обновил свой основной пост. Думаю, мне придется кое-что изменить. Сделаю небольшое тестирование. - person Johan Pettersson; 23.11.2017