Anish_Chakraborty Ответов: 2

Работают ли приемники событий SMTP в Windows Server 2008 R2?


We use a 3rd party software to send Bulk Emails. The software does not provide options to add Email addresses in BCC. However, as per Compliance Rules, it is necessary for us to add a BCC address to every Email sent. Till now, we used to relay all the Emails from that software to an intermediate server having SMTP service installed in it. We deployed a VB6 DLL on that server which functioned as an SMTP Event Sink and it ran every time the "OnArrival" event of the SMTP service was fired. The DLL added the BCC address to the mail. Every thing was running fine till now. Now, we have to upgrade those servers to Windows Server 2008 R2. I have re-written the VB6 Event Sink in C#. The code is like this:

using System;
using System.Diagnostics;
using System.IO;
using System.Runtime.InteropServices;
using ADODB;
using CDO;
using SEOLib;

namespace OnArrivalSink
{
 [Guid("8E9B5A44-ADC3-4752-9CF6-C5333A6B17CF")]
 public class CatchAll : ISMTPOnArrival, IEventIsCacheable
 {
    void IEventIsCacheable.IsCacheable()
    {
        //This will return S_OK by default
    }

    void ISMTPOnArrival.OnArrival(Message msg, ref CdoEventStatus eventStatus)
    {
        try
        {
            ProcessMessage(msg);
        }
        catch (Exception e)
        {
            string errorInfo = "ERROR MESSAGE: " + e.Message + "\n" +
                "INNER EXCEPTION: " + e.InnerException + "\n" +
                "SOURCE: " + e.Source + "\n" +
                "STACK TRACE: " + e.StackTrace + "\n";

            //Write to Event Log
            EventLog evtLog = new EventLog();
            evtLog.Source = "OnArrivalSink";
            evtLog.WriteEntry(errorInfo, EventLogEntryType.Error);
        }
        eventStatus = CdoEventStatus.cdoRunNextSink;
    }

    private void ProcessMessage(IMessage msg)
    {
        //Get the list of recipients that the message will be actually delivered to
        string recipientList = msg.EnvelopeFields["http://schemas.microsoft.com/cdo/smtpenvelope/recipientlist"].Value.ToString();

        //Add a recipient in BCC form
        recipientList = recipientList + "SMTP:john.doe@xyz.com;";
        msg.EnvelopeFields["http://schemas.microsoft.com/cdo/smtpenvelope/recipientlist"].Value = recipientList;
        msg.EnvelopeFields.Update();
        msg.DataSource.Save();
    }
  }


DLL, сгенерированная приведенным выше кодом, была зарегистрирована с помощью RegAsm.exe и он был успешно зарегистрирован. DLL была связана с событием SMTP "OnArrival" с помощью VBScript, предоставленного Microsoft, и это тоже произошло без каких-либо проблем. Однако библиотека DLL вообще не работает. Я пытался протоколировать каждый шаг, но это похоже на то, как если бы DLL вообще не функционировала. Он прекрасно работает на машине с Windows XP. Итак, я знаю, что код C# функциональен. Мы не заинтересованы в использовании Microsoft Exchange Server, так как это излишество для нас. Пожалуйста помочь.

2 Ответов

Рейтинг:
1

dwayne905

В Windows 2008 R2 попробуйте использовать RegAsm из 64-битной папки .NET, если 32-битная папка не работает для вас.


Рейтинг:
0

Alvin20

Вы пробовали использовать RegAsm из 64-битного каталога .NET, который работал для меня