C# 转发现有电子邮件,包括来自Dynamics CRM的附件

C# 转发现有电子邮件,包括来自Dynamics CRM的附件,c#,email,dynamics-crm,forward,C#,Email,Dynamics Crm,Forward,我有以下用例 客户希望转发多个联系人的特定现有电子邮件。所以每个联系人都有电子邮件,也可以有附件 所以我需要提取相关的联系人,他们是电子邮件,包括附件,并发送到另一个电子邮件地址 我可以检索相关联系人,但现在我不知道如何检索电子邮件、附件并将它们链接在一起以便发送 谁能给我一些建议吗?非常感谢。下面是一个可以实现这一点的工作流示例。附件的实体称为ActivityTimeAttachment。此代码从电子邮件中提取附件并将其转换为注释。在您的情况下,您应该使用“attachmentid”、“fil

我有以下用例

客户希望转发多个联系人的特定现有电子邮件。所以每个联系人都有电子邮件,也可以有附件

所以我需要提取相关的联系人,他们是电子邮件,包括附件,并发送到另一个电子邮件地址

我可以检索相关联系人,但现在我不知道如何检索电子邮件、附件并将它们链接在一起以便发送


谁能给我一些建议吗?非常感谢。下面是一个可以实现这一点的工作流示例。附件的实体称为ActivityTimeAttachment。此代码从电子邮件中提取附件并将其转换为注释。在您的情况下,您应该使用“attachmentid”、“filename”、“mimetype”创建一封新的电子邮件,我认为这就足够了。祝你好运

using System;
using System.Activities;
using System.Linq;

using Microsoft.Xrm.Sdk;
using Microsoft.Xrm.Sdk.Query;
using Microsoft.Xrm.Sdk.Workflow;

namespace Dyn365Apps.CRM.Workflow
{
    public class ExtractAttachmentsFromEmailAndCreateNotes : CodeActivity
    {
        [RequiredArgument]
        [Input("Email")]
        [ReferenceTarget("email")]
        public InArgument<EntityReference> receivedEmail { get; set; }

        [RequiredArgument]
        [Input("Enquiry")]
        [ReferenceTarget("incident")]
        public InArgument<EntityReference> enquiry { get; set; }

        protected override void Execute(CodeActivityContext context)
        {
            var trace = context.GetExtension<ITracingService>();

            try
            {
                var serviceFactory = context.GetExtension<IOrganizationServiceFactory>();
                var service = serviceFactory.CreateOrganizationService(Guid.Empty); //Use current user's ID

                if (service != null)
                {
                    trace.Trace("Organization Service Created");
                }

                // Get Attachment Count
                trace.Trace("Get Attachment Count");
                var rem = receivedEmail.Get(context);
                Entity email = service.Retrieve(rem.LogicalName, rem.Id, new ColumnSet("attachmentcount"));
                int atc = (int)email["attachmentcount"];
                trace.Trace("Attachment count = " + atc.ToString());

                if (atc > 0)
                {
                    // Get all attachments
                    QueryExpression queryAtt = new QueryExpression("activitymimeattachment");
                    queryAtt.ColumnSet = new ColumnSet(new string[] { "activityid", "attachmentid", "filename", "body", "mimetype", "subject" });
                    queryAtt.Criteria = new FilterExpression();
                    queryAtt.Criteria.FilterOperator = LogicalOperator.And;
                    queryAtt.Criteria.AddCondition(new ConditionExpression("activityid", ConditionOperator.Equal, email.Id));
                    EntityCollection eatt = service.RetrieveMultiple(queryAtt);
                    var entities = eatt.Entities;

                    trace.Trace("Entities count = " + entities.Count());

                    foreach (var ent in entities)
                    {                        
                        trace.Trace("Inside the for loop");
                        trace.Trace("Attributes count = " + ent.Attributes.Count());

                        // Instantiate an Annotation object.
                        Entity annotation = new Entity("annotation");

                        if (ent.Attributes.Contains("subject"))
                        {
                            trace.Trace("subject = " + ent.Attributes["subject"].ToString());
                            annotation["subject"] = ent.Attributes["subject"].ToString();
                        }
                        else
                        {
                            trace.Trace("subject not found");
                            annotation["subject"] = "Undefined";
                        }

                        if(ent.Attributes.Contains("filename"))
                        {
                            trace.Trace("filename = " + ent.Attributes["filename"].ToString());
                            annotation["filename"] = ent.Attributes["filename"].ToString();
                        }
                        else
                        {
                            trace.Trace("filename not found");
                            annotation["filename"] = "Undefined.txt";
                        }

                        if (ent.Attributes.Contains("mimetype"))
                        {
                            trace.Trace("mimetype = " + ent.Attributes["mimetype"].ToString());
                            annotation["mimetype"] = ent.Attributes["mimetype"].ToString();
                        }
                        else
                        {
                            trace.Trace("mimetype not found");
                            annotation["mimetype"] = "plain/text";
                        }

                        if (ent.Attributes.Contains("body"))
                        {
                            annotation["documentbody"] = ent.Attributes["body"];
                        }

                        trace.Trace("objectid = " + enquiry.Get(context).Id.ToString());

                        annotation["objectid"] = enquiry.Get(context);
                        annotation["objecttypecode"] = 112; // Case

                        // Create a Note with the attachment
                        service.Create(annotation);
                    }
                }
            }
            catch (Exception ex)
            {
                trace.Trace("ex.Message = {0}", ex.Message);
                trace.Trace("ex.StackTrace = {0}", ex.StackTrace);
            }
        }
    }
}
使用系统;
使用系统活动;
使用System.Linq;
使用Microsoft.Xrm.Sdk;
使用Microsoft.Xrm.Sdk.Query;
使用Microsoft.Xrm.Sdk.Workflow;
命名空间Dyn365Apps.CRM.Workflow
{
公共类ExtractAttachmentsRomeMailandCreateNotes:CodeActivity
{
[必需参数]
[输入(“电子邮件”)]
[参考目标(“电子邮件”)]
公共InArgument receivedEmail{get;set;}
[必需参数]
[输入(“查询”)]
[参考目标(“事件”)]
公众谘询{get;set;}
受保护的覆盖无效执行(CodeActivityContext上下文)
{
var trace=context.GetExtension();
尝试
{
var serviceFactory=context.GetExtension();
var service=serviceFactory.CreateOrganizationService(Guid.Empty);//使用当前用户的ID
if(服务!=null)
{
trace.trace(“创建的组织服务”);
}
//获取附件计数
trace.trace(“获取附件计数”);
var rem=receivedEmail.Get(上下文);
实体email=service.Retrieve(rem.LogicalName、rem.Id、新列集(“attachmentcount”);
int atc=(int)电子邮件[“attachmentcount”];
trace.trace(“附件计数=“+atc.ToString());
如果(atc>0)
{
//获取所有附件
QueryExpression QueryAt=新的QueryExpression(“ActivityTimeAttachment”);
QueryAt.ColumnSet=新列集(新字符串[]{“activityid”、“attachmentid”、“filename”、“body”、“mimetype”、“subject”});
queryat.Criteria=newfiltereexpression();
QueryAt.Criteria.FilterOperator=逻辑运算符和;
AddCondition(新的ConditionExpression(“activityid”,ConditionOperator.Equal,email.Id));
EntityCollection eatt=service.RetrieveMultiple(queryAt);
var实体=eatt.实体;
trace.trace(“Entities count=“+Entities.count());
foreach(实体中的变量)
{                        
trace.trace(“for循环内部”);
trace.trace(“Attributes count=“+ent.Attributes.count());
//实例化注释对象。
实体注释=新实体(“注释”);
if(ent.Attributes.Contains(“主题”))
{
trace.trace(“subject=“+ent.Attributes[“subject”].ToString());
注释[“subject”]=ent.Attributes[“subject”].ToString();
}
其他的
{
跟踪。跟踪(“未找到受试者”);
注释[“主题”]=“未定义”;
}
if(ent.Attributes.Contains(“文件名”))
{
trace.trace(“filename=“+ent.Attributes[“filename”].ToString());
注释[“filename”]=ent.Attributes[“filename”].ToString();
}
其他的
{
trace.trace(“未找到文件名”);
注释[“filename”]=“Undefined.txt”;
}
if(ent.Attributes.Contains(“mimetype”))
{
trace.trace(“mimetype=“+ent.Attributes[“mimetype”].ToString());
注释[“mimetype”]=ent.Attributes[“mimetype”].ToString();
}
其他的
{
trace.trace(“未找到mimetype”);
注释[“mimetype”]=“纯文本”;
}
if(ent.Attributes.Contains(“body”))
{
注释[“documentbody”]=ent.Attributes[“body”];
}
trace.trace(“objectid=“+enquiry.Get(context.Id.ToString());
注释[“objectid”]=查询.Get(上下文);
注释[“objecttypecode”]=112;//大小写
//创建带有附件的注释
创建(注释);
}
}
}
捕获(例外情况除外)
{
trace.trace(“ex.Message={0}”,ex.Message);
trace.trace(“ex.StackTrace={0}”,ex.StackTrace);
}
}
}
}
资料来源: