SmtpDeliveryMethod.PickupDirectoryFromIis странное поведение - PullRequest
0 голосов
/ 07 августа 2009

Я думаю, что мне нужны огни гуру!

public void SendEndingMail(string fileName)
        {
            SmtpClient client;
            client = new SmtpClient("smtp.myserver.com", 25);
            //client = new SmtpClient();
            if (!string.IsNullOrEmpty(""))
            {
                System.Net.NetworkCredential credential = new NetworkCredential("", "");
                client.Credentials = credential;
            }
            client.UseDefaultCredentials = true;
            client.DeliveryMethod = SmtpDeliveryMethod.Network;
            //client.DeliveryMethod = SmtpDeliveryMethod.PickupDirectoryFromIis;

            MailAddress fromAddress = new MailAddress("mailing@mydom.com", "Elec");
            MailAddress toAdrress = new MailAddress("mailing@mydom.com");

            using (System.Net.Mail.MailMessage mailMessage = new System.Net.Mail.MailMessage(fromAddress, toAdrress))
            {

                mailMessage.Attachments.Add(new System.Net.Mail.Attachment(fileName));
                mailMessage.IsBodyHtml = false;
                mailMessage.BodyEncoding = System.Text.Encoding.UTF8;
                try
                {
                    client.Send(mailMessage);
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message.ToString());
                }
            }
        }

Это правда, что: когда я установлю client.DeliveryMethod = SmtpDeliveryMethod.PickupDirectoryFromIis; Неважно, какой SMTP-сервер я использую

        client = new SmtpClient("smtp.myserver.com", 25);
        //client = new SmtpClient();

Обе строки одинаковы, поскольку он будет использовать LOCAL IIS? !!!

Это правда, это ненормально, что API построен таким образом !? это очень запутанно ...

Спасибо Jonathan

Ответы [ 2 ]

3 голосов
/ 08 августа 2009

IIRC, когда SmtpClient отправляет электронное письмо, он смотрит на значение .DeliveryMethod. Если значение Network, то оно отправляется через сеть. Если это PickupDirectoryFromIis, то он игнорирует любой указанный SMTP-сервер (потому что он просто пишет и отправляет электронную почту в файловую систему) и записывает его в каталог Pickup. Связь по сети не происходит.

1 голос
/ 05 июля 2012

Это ошибка в процедуре отправки - она ​​создает объект сервера smtp, даже если он не указан, а когда он позже (после отправки) пытается его удалить, выдает исключение. Это происходит ПОСЛЕ того, как письмо успешно помещено в каталог раскладки, поэтому письмо будет отправлено.

Обходные:

  1. Укажите localhost в качестве SMTP-сервера. Он не будет использоваться, но предотвращает исключение.

  2. Слепая попытка / уловка метода Send (решение BAD).

...