C# SmtpDeliveryMethod.PickupDirectoryFromIis奇怪的行为

C# SmtpDeliveryMethod.PickupDirectoryFromIis奇怪的行为,c#,iis,smtp,C#,Iis,Smtp,我想我需要一些古鲁灯 public void SendEndingMail(string fileName) { SmtpClient client; client = new SmtpClient("smtp.myserver.com", 25); //client = new SmtpClient(); if (!string.IsNullOrEmpty(""))

我想我需要一些古鲁灯

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();
这两行是相同的,因为它将使用本地IIS

这是真的吗?API以这种方式构建是不正常的!?这是非常令人困惑的

谢谢
Jonathan

IIRC,当SmtpClient发送电子邮件时,它会查看.DeliveryMethod值。如果值为网络,则通过网络发送。如果它是PickupDirectoryFromIis,那么它会忽略任何指定的SMTP服务器(因为它只是将电子邮件写入文件系统),并将其写入Pickup目录。没有网络通信发生。

IIRC,当SmtpClient发送电子邮件时,它会查看.DeliveryMethod值。如果值为网络,则通过网络发送。如果它是PickupDirectoryFromIis,那么它会忽略任何指定的SMTP服务器(因为它只是将电子邮件写入文件系统),并将其写入Pickup目录。没有发生网络通信。

这是发送例程中的一个错误-即使未指定smtp服务器对象,它也会创建一个smtp服务器对象,并且当它稍后(发送后)尝试处理它时,会引发异常。这发生在邮件成功放置在分拣目录后,因此邮件将被发送

解决办法:

  • 将localhost指定为SMTP服务器。它不会被使用,但会阻止异常

  • 盲目尝试/捕获发送方法(错误的解决方案)


  • 这是发送例程中的一个错误-即使未指定smtp服务器对象,它也会创建一个smtp服务器对象,并且当它稍后(在发送之后)尝试处理它时,会抛出一个异常。这发生在邮件成功放置在分拣目录后,因此邮件将被发送

    解决办法:

  • 将localhost指定为SMTP服务器。它不会被使用,但会阻止异常

  • 盲目尝试/捕获发送方法(错误的解决方案)


  • 谢谢戴夫,但我不明白最后一句话“并将其写入收件目录。没有网络通信。”魔法在哪里?它必须通过smtp服务器发送?您好,SmtpClient将直接将电子邮件写入收件目录。一旦它被写入,IIS SMTP服务将通过,分析邮件,如果它被接受,它将被移动到队列目录。从那里,消息被发送到智能主机或收件人的邮件服务器。干杯davei当我说“从那里”,我的意思是IIS SMTP服务将尝试删除邮件。如果邮件无法传递,它将留在队列中,等待可能的传递重试。或者,如果传递完全失败,它将被移动到死信目录--DaveSo为什么microsoft允许在用户设置拾取选项时不使用smtp服务器的情况下在smtpclient的创建中放置smtp服务器…谢谢Dave,但我不理解最后一句话“并将其写入拾取目录。不会发生网络通信”。魔力何在?它必须通过smtp服务器发送?您好,SmtpClient将直接将电子邮件写入收件目录。一旦它被写入,IIS SMTP服务将通过,分析邮件,如果它被接受,它将被移动到队列目录。从那里,消息被发送到智能主机或收件人的邮件服务器。干杯davei当我说“从那里”,我的意思是IIS SMTP服务将尝试删除邮件。如果邮件无法传递,它将留在队列中,等待可能的传递重试。或者,如果传递完全失败,它将被移动到死信目录--DaveSo为什么在用户设置拾取选项时,如果不使用smtpclient,microsoft允许在smtpclient的创建中放置smtp服务器。。。。