Skip to main content
 首页 » 编程设计

c#之如何发送邮件,邮件正文作为参数并使用线程之C#

2024年02月02日36落叶

我有一个问题,我正在尝试使用像这样的一种结构发送邮件:

private void SendMail() 
{ 
 
    var client = new SmtpClient("smtp.gmail.com", 587) 
    { 
        Credentials = new NetworkCredential("mymail@mail.com", "mypassword"), 
        EnableSsl = true 
    }; 
    client.Send("mymail@mail.com", "AdressClient@mail.com", "Subject", "Body"); 
} 

好吧,这个结构工作得很好,但会导致我的主程序延迟,因此我想在另一个线程中执行 SendMail 函数,如下所示:

private void ButtonTestSendMail_Click(object sender, EventArgs e) 
    { 
        //THREAD 
        Thread ThreadSendEmail = new Thread(new ThreadStart(this.SendMail)); 
        ThreadSendEmail .IsBackground = true; 
        ThreadSendEmail .Start(); 
    } 
 
 
private void SendMail() 
{    
   var client = new SmtpClient("smtp.gmail.com", 587) 
   { 
      Credentials = new NetworkCredential("mymail@mail.com", "mypassword"), 
      EnableSsl = true 
   }; 
   client.Send("mymail@mail.com", "AdressClient@mail.com", "Subject", "Body"); 
} 

此时我注意到我需要更改邮件的参数,例如 AdressClient@mail.com、主题和正文。

但我不知道怎么做:/

我怎样才能写一个接受参数的线程,像这样:

private void ButtonTestSendMail_Click(object sender, EventArgs e) 
        { 
            string Body = "BodyTest"; 
            string AdressMail = "AdressMail@test.com"; 
            string Subject = "SubjectTest"; 
        //THREAD 
        Thread ThreadSendEmail = new Thread(new ThreadStart(this.SendMail(Body,AdressMail,Subject)); 
        ThreadSendEmail .IsBackground = true; 
        ThreadSendEmail .Start(); 
    } 
 
 
    private void SendMail(string Body, string Adress, string Subject) 
    {    
       var client = new SmtpClient("smtp.gmail.com", 587) 
       { 
          Credentials = new NetworkCredential("mymail@mail.com", "mypassword"), 
          EnableSsl = true 
       }; 
       client.Send("mymail@mail.com", Adress, Subject, Body); 
    } 

我试过了但没有用,我有一个 MethodName Expected 和一个错误在这一行的通知:

Thread ThreadSendEmail = new Thread(new ThreadStart(this.SendMail(Body,AdressMail,Subject)); 

如何编写接受参数的线程? 谢谢你的帮助! 最好的问候!

请您参考如下方法:

你快到了:

Thread ThreadSendEmail = new Thread(() => this.SendMail(Body,AdressMail,Subject)); 

lambda 可以解决问题。您不能直接调用 SendMail,您希望将其作为未调用的函数传递。

请注意,如果您的 ASP.NET 进程回收(可能是因为您正在部署),线程将被粗鲁地中止。邮件将丢失。