Как обрабатывать электронные письма о недоставке с сервера Exchange в C #? - PullRequest
0 голосов
/ 11 июля 2019

В настоящее время мое приложение имеет возможность обрабатывать входящие электронные письма и возвращать их обратно, если они не соответствуют заданным критериям в коде.Однако я хочу добавить в Process другой тип электронной почты, который представляет собой отчет о недоставке с сервера Microsoft Exchange.Поэтому мое приложение не отвечает / не возвращает NDR на сервер обмена, что вызывает петлю между моим почтовым ящиком и сервером Exchange.Следующий метод срабатывает, когда Invalid не имеет определенного

private static void ProcessInvidMsgWithoutNo(string sMsgFrom, string sFromEmail, EmailMsg sMsgReceived, EmailMessage message)
    {
        EmailMsg.MoveToInvalid(message);

        sMsgReceived.IsValid = false;
        SaveMsgReceived(sMsgReceived, 0, string.Empty);

        if (!sFromEmail.Equals(string.Empty))
        {
            ResponseForInvidMsg(sFromEmail);
        }
        else
        {
            curLog.WriteLog(string.Format(CultureInfo.CurrentCulture, MsgEMChecker27, sMsgFrom));
        }
    }

Follow Method вызывает ответ на входящее недействительное сообщение, как указано выше.

private static void ResponseForInvidMsg(string sFromEmail)
    {
        string tErrSubjectMsg = String.Format(CultureInfo.CurrentCulture, "{0}\\Resource\\MsgErrorSubjectAck.html", Entity.GetSetting("DocRootDir"));

        StringBuilder htmlText = new StringBuilder();
        FileStream fsFile = new FileStream(tErrSubjectMsg, FileMode.Open);

        if (fsFile != null)
        {
            StreamReader reader = new StreamReader(fsFile, Encoding.Default);

            string text;
            do
            {
                text = reader.ReadLine();
                if ((text != null) && (text != ""))
                    htmlText.Append(text + "\n");
            } while (text != null);

            reader.Close();
            fsFile.Close();
            fsFile = null;
        }
        else
            htmlText.Append("hello");

        string tToCustomerSubject = ReplyForInvalid;
        string tMessage = htmlText.ToString();

        EmailMsg emTo = new EmailMsg(string.Empty, sFromEmail, tToCustomerSubject, tMessage);
        emTo.MsgType = EmailMsg.TypeSentCustomer;
        emTo.Send(false); //Not save but CC to generic email box
    }

Пожалуйста, помогите мне найти способ, гдеЯ могу остановить свой код, чтобы ответить Exchange Server NDR.Спасибо

1 Ответ

0 голосов
/ 12 июля 2019

Для начала нужно проверить ItemClass сообщения, см. https://docs.microsoft.com/en-us/openspecs/exchange_server_protocols/ms-asemail/51d84da6-a2da-41e9-8ca7-eb6c4e72c28d. Отчеты о недоставке, отчет о доставке и т. Д. Должны иметь префикс отчета, например,

REPORT.IPM.NOTE.NDR Non-delivery report for a standard message.
REPORT.IPM.NOTE.DR Delivery receipt for a standard message.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...