Dynamic CRM 365 调用CRM自动的outlook发送邮件
/// <summary> /// 发送邮件 /// </summary> /// <param name="id"></param> /// <param name="link"></param> /// <returns></returns> public ActionResults sendEmial_Business(string id, string link) { ActionResults results = new ActionResults(); try { Entity entity = service.Retrieve("scc_forecasted_statement", new Guid(id), new ColumnSet("scc_issend_ar", "ownerid")); string scc_predicted_end_date = (entity.Contains("scc_predicted_end_date_zz") ? entity.GetAttributeValue<DateTime>("scc_predicted_end_date_zz").AddHours(8).ToString("yyyy-MM-dd") : ""); string scc_remake = entity.GetAttributeValue<string>("scc_remake"); List<Guid> guidArray = new List<Guid>(); List<Guid> ownerArray = new List<Guid>(); List<string> nameArray = new List<string>(); ownerArray.Add(CrmData.GetSingleValueLabel<Guid>("systemuser", "domainname", "scc\\CRM", "systemuserid", service)); QueryExpression qe = new QueryExpression("scc_forecast_line"); qe.ColumnSet = new ColumnSet("scc_forecast_lineid", "ownerid", "scc_group"); qe.Criteria.AddCondition("scc_forecasted_statement_forecast_lin", ConditionOperator.Equal, entity.Id); qe.Criteria.AddCondition("scc_scc_status", ConditionOperator.NotEqual, 2); //未完成 var encollect = service.RetrieveAll(qe); foreach (Entity en in encollect.Entities) { #region 循环发送邮件 var scc_type_of_predict = en.GetAttributeValue<OptionSetValue>("scc_type_of_predict").Value; string typename = "业务组", objname = ""; objname = en.GetAttributeValue<EntityReference>("scc_group").Name; EntityReference ownerid = en.GetAttributeValue<EntityReference>("ownerid"); if (ownerid == null) { results.Code = "309"; results.Message = $"对应的发邮件对象为空,请联系管理员!"; return results; } var linkText = "<a href = " + link + ">点击此处</a>"; var emailtemplateeditorEntity = accountRepository.GetTemplateeditorEntity(service, "xxxx"); if (emailtemplateeditorEntity != null) { List<Guid> newguidA = new List<Guid>(); newguidA.Add(ownerid.Id); var subjectsafehtml = emailtemplateeditorEntity.GetAttributeValue<string>("subjectsafehtml"); var safehtml = emailtemplateeditorEntity.GetAttributeValue<string>("safehtml"); var title = entity.GetAttributeValue<String>("scc_forecast_name"); subjectsafehtml = subjectsafehtml.Replace("【名称】", title); safehtml = "【xxxxxxxxxxxxxxx】"; var email = accountRepository.CreateInformEmail1(ownerArray, newguidA, null, entity); email["subject"] = subjectsafehtml; email["description"] = safehtml; var emialId = service.Create(email); SendEmailRequest sendEmailreq = new SendEmailRequest { EmailId = emialId, TrackingToken = "", IssueSend = true }; SendEmailResponse sendEmailresp = (SendEmailResponse)service.Execute(sendEmailreq); newguidA.Clear(); } #endregion } } catch (Exception ex) { results.Code = ResponseCode.Code300; results.Message = ex.Message;return results; } return results; }
获取模板信息
/// <summary> /// 获得模板信息 /// </summary> /// <param name="service"></param> /// <param name="title"></param> /// <returns></returns> public Entity GetTemplateeditorEntity(IOrganizationService service, string title) { QueryByAttribute query = new QueryByAttribute("template"); query.AddAttributeValue("title", title); query.ColumnSet = new ColumnSet(true); EntityCollection ec = service.RetrieveMultiple(query); if (ec != null && ec.Entities != null && ec.Entities.Count > 0) { return ec[0]; } return null; }
邮件发送实体赋值:
/// <param name="fromemail">发件人的Guid的List</param> /// <param name="tomail">收件人的Guid的List</param> /// <param name="ccmail">抄送人的Guid的List</param> /// <param name="entity">需要发送邮件的实体,可以根据此处获取邮件中需要的信息</param> /// <returns></returns> public Entity CreateInformEmail1(List<Guid> fromemail, List<Guid> tomail, List<Guid> ccmail, Entity entity) { try { List<Entity> from_list = new List<Entity>(); List<Entity> to_list = new List<Entity>(); List<Entity> cc_list = new List<Entity>(); //发件人 foreach (Guid from in fromemail) { Entity from_party = new Entity("activityparty"); from_party.Attributes["partyid"] = new EntityReference("systemuser", from); from_party.Attributes["partyobjecttypecode"] = 8; from_list.Add(from_party); } //收件人 foreach (Guid to in tomail) { Entity to_party = new Entity("activityparty"); to_party.Attributes["partyid"] = new EntityReference("systemuser", to); to_party.Attributes["partyobjecttypecode"] = 8; to_list.Add(to_party); } ////抄送人 //foreach (Guid cc in ccmail) //{ // Entity cc_party = new Entity("activityparty"); // cc_party.Attributes["partyid"] = new EntityReference("systemuser", cc); // cc_party.Attributes["partyobjecttypecode"] = 8; // cc_list.Add(cc_party); //} Entity email = new Entity("email"); email.Attributes["from"] = from_list.ToArray(); email.Attributes["to"] = to_list.ToArray(); email.Attributes["cc"] = cc_list.ToArray(); //email["regardingobjectid"] = new EntityReference(entity.LogicalName, entity.Id); //email.Attributes["actualdurationminutes"] = 30; //email.Attributes["isworkflowcreated"] = false; return email; } catch (Exception ex) { throw new InvalidPluginExecutionException("Create inform email error: " + ex.Message); } }
记得收藏并关注,掌握更多相关知识!!!
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 实操Deepseek接入个人知识库
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· 【.NET】调用本地 Deepseek 模型
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
· 上周热点回顾(2.17-2.23)