C#使用System.Threading发送SMTP

scn*_*iro 6 c# multithreading smtp

我开发了一个主要使用SMTP发送电子邮件的应用程序.一个接一个地发送消息很好,但是我希望加快这个过程.我创建了多个SmtpClient以及消息的实例,以避免彼此之间的冲突.由于单独的实例,我假设.Send()在多个线程上执行会很好.但是,Thread单独使用我的代码不能正常工作,因为我无法使用此代码在一个线程上发送一封电子邮件.我只是收到一个模糊的"Failure sending mail"例外.我将发布有效的代码,Thread但这不起作用.有人可以分享他们认为可能是原因吗?

注意我目前不打算使用更新的async功能,而是利用它Thread

工作宣言和方法电话:

var SMTP = new SmtpClient
    {
        Host = txtBxSenderHost.Text,
        Port = 587,
        EnableSsl = true,
        DeliveryMethod = SmtpDeliveryMethod.Network,
        UseDefaultCredentials = false,
        Credentials = new NetworkCredential(strSenderAddress, strSenderPassword)
    };

using (var message = new MailMessage(senderAdrress, toAddress)
    {
        Subject = strSubject,
        Body = strBody
    })

    {
        SMTP.Send(message);
    }
Run Code Online (Sandbox Code Playgroud)

NOT Working Thread声明和方法调用:

var SMTP = new SmtpClient
    {
        Host = txtBxSenderHost.Text,
        Port = 587,
        EnableSsl = true,
        DeliveryMethod = SmtpDeliveryMethod.Network,
        UseDefaultCredentials = false,
        Credentials = new NetworkCredential(strSenderAddress, strSenderPassword)
    };

using (var message = new MailMessage(senderAdrress, toAddress)
    {
        Subject = strSubject,
        Body = strBody
    })

    {
        Thread T1 = new Thread(delegate() { SMTP.Send(message); } );
        T1.Start();
    }
Run Code Online (Sandbox Code Playgroud)

小智 12

解决了:

var SMTP = new SmtpClient
        {
            Host = txtBxSenderHost.Text,
            Port = 587,
            EnableSsl = true,
            DeliveryMethod = SmtpDeliveryMethod.Network,
            UseDefaultCredentials = false,
            Credentials = new NetworkCredential(strSenderAddress, strSenderPassword)
        };

        Thread T1 = new Thread(delegate()
        {
            using (var message = new MailMessage(senderAdrress, toAddress)
            {
                Subject = strSubject,
                Body = strBody
            })
            {
                {
                    SMTP.Send(message);
                }
            }
        });

        T1.Start();
Run Code Online (Sandbox Code Playgroud)