在邮件传输代理中添加收件人

问题描述:

Exchange 2010SP1邮件传输代理SDK

Exchange 2010SP1 message transport agent SDK

我正在创建一个MTA来自动存档通过传输管道的某些电子邮件。有没有办法在传输代理事件中复制电子邮件(或添加收件人)?根据

technet
,代理需要处理  OnSubmittedMessage
事件(在路由代理中)并且我已经设置了。

I'm making an MTA to automatically archive certain emails that go through the transport pipeline. Is there a way to copy an email (or add a recipient) inside a transport agent event? According to technet an agent needs to handle the OnSubmittedMessage event (in RoutingAgent) and I have that set up.

 


    public class RoutingMailAgent : RoutingAgent
    {
        private static ILog _log;
        public const string RoutedMessageRoutingKey = "vis.process.mail.{routingtype}";

        public RoutingMailAgent()
        {
            _log = LogManager.GetLogger(GetType());
            _log.Info("Starting");
            OnSubmittedMessage += SubmittedMessageHandler;
        }

        private void SubmittedMessageHandler(SubmittedMessageEventSource source, QueuedMessageEventArgs e)
        {
            try
            {
                _log.Info("SubmittedMessageHandler START");
                if (SubjectInfo.IsPertinent(e.MailItem.Message.Subject) == SaveMode.None)
                    return;
                var routingType = e.MailItem.InboundDeliveryMethod.ToString();
                var msg = new EmailMessageExt(e.MailItem.Message, e.MailItem.InboundDeliveryMethod);
                KPICLient.SendRawMessage(RoutedMessageRoutingKey.Replace("{routingtype}", routingType), msg);
                _log.Info("SubmittedMessageHandler END");
            }
            catch (Exception ex)
            {
                _log.Error("SubmittedMessageHandler ERROR", ex);
            }
        }
    }

这个回答了我的问题。

当我在OnRoutedMessage中的MailItem.Recipients.Add时,它抛出了NotImplemented,但在OnSubmitted中使用它有效吗?

When I MailItem.Recipients.Add in OnRoutedMessage it threw NotImplemented, but using it in OnSubmitted works?

工作代码:


        private static ILog _log;
        public const string RoutedMessageRoutingKey = "vis.process.mail.{routingtype}";

        public RoutingMailAgent()
        {
            _log = LogManager.GetLogger(GetType());
            _log.Info("Starting");
            OnSubmittedMessage += SubmittedMessageHandler;
        }

        private void SubmittedMessageHandler(SubmittedMessageEventSource source, QueuedMessageEventArgs e)
        {
            try
            {
                if (SubjectInfo.IsPertinent(e.MailItem.Message.Subject) == SaveMode.None)
                    return;
                _log.Info("SubmittedMessageHandler START");
                var routingType = e.MailItem.InboundDeliveryMethod.ToString();
                e.MailItem.Recipients.Add(new RoutingAddress("malaskra_mail@testvis.local"));
                var msg = new EmailMessageExt(e.MailItem.Message, e.MailItem.InboundDeliveryMethod);
                KPICLient.SendRawMessage(RoutedMessageRoutingKey.Replace("{routingtype}", routingType), msg);
                _log.Info("SubmittedMessageHandler END");
            }
            catch (Exception ex)
            {
                _log.Error("SubmittedMessageHandler ERROR", ex);
            }
        }