C # - Изменение пути возврата для MailItem - PullRequest
0 голосов
/ 07 сентября 2018

У меня есть процесс, который будет сидеть на машине автоматической рассылки электронной почты для отправки электронных писем на основе плоского файла. Этот файл содержит Кому, Копия, Тема, Тело, Вложения и Отправитель. Когда электронное письмо отправлено, я хочу, чтобы любые неудавшиеся электронные письма или откаты возвращались отправителю, а не автоматизированной службе. Я пробовал два решения, которые работают ... частично.

Во-первых, используя SMTP, я могу задать адреса возврата и адреса От и получать отклоненные сообщения электронной почты, чтобы вернуться к отправителю. Однако политика компании заключается в том, что я не могу жестко кодировать идентификаторы пользователей и / или пароли. Я пытался использовать флаг «UseDefaultCredentials» без удачи. Наши AD логин и Exchange разные, а пароль один и тот же. Вот код:

    private void SendEmail(EmailProperties pEmail)
    {
        try
        {
            MailMessage mail = new MailMessage();
            mail.Headers.Add("Return-Path", AddressLookup(pEmail.Sender));
            foreach (string strTo in pEmail.To)
            {
                mail.To.Add(AddressLookup(strTo));
            }
            foreach (string strCC in pEmail.CC)
            {
                mail.CC.Add(AddressLookup(strCC));
            }
            mail.Subject = pEmail.Subject;
            mail.Body = pEmail.Body;
            mail.From = new MailAddress(AddressLookup(pEmail.Sender));
            //mail.ReplyToList.Add(AddressLookup(pEmail.ReplyTo));
            SmtpClient smtpClient = new SmtpClient("server", 25);
            smtpClient.DeliveryMethod = SmtpDeliveryMethod.Network;
            smtpClient.UseDefaultCredentials = true;
            //smtpClient.Credentials = new NetworkCredential("user", "pw");
            smtpClient.EnableSsl = false;
            smtpClient.Send(mail);
        }
        catch (Exception ex)
        {
            throw ex;
        }
    }
    private string AddressLookup(string pstrAddr)
    {
        try
        {
            if (pstrAddr.Contains("@")) return pstrAddr;

            Outlook.Application OutlookApp = new Outlook.Application();
            Outlook.AddressLists addrLists = OutlookApp.Session.AddressLists;
            Outlook.AddressList gal = addrLists["Global Address List"];
            Outlook.AddressEntry entry = gal.AddressEntries[pstrAddr];
            return entry.GetExchangeUser().PrimarySmtpAddress;
        }
        catch (Exception ex)
        {
            throw ex;
        }
    }

Во-вторых: Я попытался с помощью Outlook Interop, и я могу отправить электронное письмо нормально, но все отказов возвращаются в автоматизированную службу. Вот код:

    private void SendEmail(EmailProperties pEmail)
    {
        try
        {
            Outlook.Application OutlookApp = new Outlook.Application();
            Outlook.MailItem mail = OutlookApp.CreateItem(
                Outlook.OlItemType.olMailItem) as Outlook.MailItem;
            Outlook.AddressEntry currentUser = 
            OutlookApp.Session.CurrentUser.AddressEntry;
            if (currentUser.Type == "EX")
            {
                mail.To = pEmail.To;
                mail.CC = pEmail.CC;
                mail.Subject = pEmail.Subject;
                mail.Body = pEmail.Body;
                mail.ReplyRecipients.Add(pEmail.ReplyTo);
                mail.Sender = AddressLookup(pEmail.Sender);
                mail.Recipients.ResolveAll();
                mail.ReplyRecipients.ResolveAll();

                foreach (string e in pEmail.Attachments)
                {
                    mail.Attachments.Add(e, Outlook.OlAttachmentType.olByValue,
                        Type.Missing, Type.Missing);
                }
                mail.Send();
            }
        }
        catch (Exception ex)
        {
            throw ex;
        }
    }

Есть ли что-то, чего мне не хватает, или другое направление, в котором я могу пойти с этим. Я бы предпочел использовать взаимодействие для отправки писем и просто изменить заголовок письма. Если есть лучший способ сделать это, я открыт для предложений.

Спасибо!

...