【问题标题】:Exchange - Splitting a distribution groupExchange - 拆分通讯组
【发布时间】:2016-06-09 14:15:51
【问题描述】:

我想向通讯组发送一封电子邮件,并确保收件人会收到电子邮件,因为它是专门发送给他们的。 含义:在“收件人”字段中,我希望他们只看到他们的电子邮件地址,而不是粗体字母的组名。

我正在为 Exchange 构建主题路由器 dll,我需要将发送到组的电子邮件拆分为单个电子邮件。 我正在使用 Exchange 2010。 有什么想法吗?

我想做这样的事情:

messageEventArgs.MailItem.Message.To = messageEventArgs.MailItem.Recipients

但不幸的是messageEventArgs.MailItem.Message.To 是只读的...

还有其他想法吗?

这里是一些示例代码:

       void ownRoutingAgent_OnResolvedMessage(ResolvedMessageEventSource   source, QueuedMessageEventArgs messageEventArgs)
 {
      bool forwardToSeg = false;

      if (true) EventViewerLogger.WriteInfo("FromAddress: " + messageEventArgs.MailItem.FromAddress.ToString());
      if (true) EventViewerLogger.WriteInfo("SecureSenders: " + m_SecureSenderAddress);

      distGroupList = generateDistGroupList();

      // Change origional Sender EMail Address to a random sender from the list of SEG users
      foreach (string senderAddr in m_SecureSenderAddress.Split(','))
      {
          //Check if sender equals to a secure sender
          if (senderAddr.ToUpper() == (messageEventArgs.MailItem.FromAddress.ToString().ToUpper()))
          {
                 Random rnd = new Random();
                 int numOfUser = rnd.Next(0, senderAddresses.Length);
                 messageEventArgs.MailItem.FromAddress = new RoutingAddress(senderAddresses[numOfUser]);

                 forwardToSeg = true;

     //Check if recepient is a distrebution group

                 // run over all recipients list
                 //foreach (EnvelopeRecipient recp in messageEventArgs.MailItem.Recipients)
                 //{
                     // run over excluded members list
                     foreach (MyClass disGrp in distGroupList)
                     {
                         // Checks if Recipients contain an  e-mail group),
                         // if yes, does not route to seg.
                         if (messageEventArgs.MailItem.Message.To.ToString().ToUpper() == disGrp.emailAdress.ToUpper())
                         {
                             messageEventArgs.MailItem.Message.To.Add*******
                                 = messageEventArgs.MailItem.Recipients
                             //create a method that extracts group members and saves them in an array
                             //delete group address from mail-recipients

                             //messageEventArgs.MailItem.Recipients;
                             return;
                         }
                     }
                 //}
           }
      }

【问题讨论】:

    标签: c# email dll exchange-server


    【解决方案1】:

    您可以从组中获取电子邮件列表,然后发送邮件。跟随 sn -p 将获取各个邮件 ID。

        string groupName = "somegroup";
        string domainName = "somedomain";
    
        using(PrincipalContext ctx = new PrincipalContext(ContextType.Domain, domainName))
        {
            using(GroupPrincipal grp = GroupPrincipal.FindByIdentity(ctx, IdentityType.Name, groupName))
            {
                var sams = from x in grp.GetMembers(true) select new {x.SamAccountName, };
                var users = from sam in a.Distinct()
                    let usr = UserPrincipal.FindByIdentity(ctx, IdentityType.SamAccountName, sam)
                    select new { usr.SamAccountName, usr.DisplayName, usr.EmailAddress};
                //users is now populated with the e-mail IDs
            }
        }
    

    此外,您仍然可以使用单个邮件并将电子邮件地址保留在密件抄送字段中..不确定要求是什么..

    【讨论】:

    • 我已经有了组收件人的详细信息,我很难找到一种方法将其设置在邮件对象而不是组名上,
    • @david-gidony 你能分享一个你正在使用的示例代码 sn-p 吗??
    • 我按照您的要求分享了我的代码,我要做的就是删除通讯组名称,然后将电子邮件发送给各个收件人,而不是作为一个组发送... .
    猜你喜欢
    • 1970-01-01
    • 2011-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多