2017-01-09 60 views
0

有什麼不對的代碼 - 我只是想送succesfuld後重定向:MVC網核心1.1.0 Mailkit發送郵件的形式返回一個空白頁

公共異步任務SendEmailAsync(字符串電子郵件,字符串名稱,字符串消息) { var emailMessage = new MimeMessage();

 emailMessage.From.Add(new MailboxAddress("PAR OG SINGLER", "[email protected]")); 
     emailMessage.To.Add(new MailboxAddress("per", Email)); 
     emailMessage.Subject = "Test par og singler"; 
     emailMessage.Body = new TextPart("plain") { Text = Message }; 

     using (var client = new SmtpClient()) 
     { 
      var credentials = new NetworkCredential 
      { 
       UserName = "[email protected]", // replace with valid value 
       Password = "detteerentest" // replace with valid value 
      }; 
      //var mytask = Email + "" + Message; 

      client.LocalDomain = "parogsingler.dk"; 
      await client.ConnectAsync("smtp.gmail.com", 587, SecureSocketOptions.Auto).ConfigureAwait(false); 
      client.AuthenticationMechanisms.Remove("XOAUTH2"); 

      await client.AuthenticateAsync(credentials); 

      await client.SendAsync(emailMessage).ConfigureAwait(false); 
      await client.DisconnectAsync(true).ConfigureAwait(false); 

      RedirectToAction("Thanks"); 
     } 
    } 
    public IActionResult Thanks() 
    { 
     return View(); 
    } 

回答

0

我不知道你爲什麼會在那裏使用RedirectToAction。我不認爲它可以在不是行爲結果的方法中使用。該方法的目的是調用另一個動作方法,然後讓代碼運行。但是你不這樣做,所以你可以直接從你所在的任何action方法調用View(「謝謝」)。

你應該爲你創建一個單獨的類Email方法,然後從控制器調用該類。

這樣,您只需要在觸發它的actionmethod中的一行中調用您的電子郵件方法。它會節省很多工作。下面的示例調用郵件類EmailService和它的sendmail的方法:

Public async Task<IActionResult> Mail() 
{ 
    //maybe some validation or/and exeption handling 

    var emailService = new EmailService(); 
    await emailService.SendEmailAsync(); 
    return View("Thanks"); 

    //errormessage if not succeed 

} 
public IActionResult Thanks() 
{ 
    return View(); 
} 

最好要使用依賴injecton設立emailservice。 在您的控制器(或其他類)中,您可以通過在構造函數中實例化它來調用您的電子郵件類。