2017-09-25 34 views
0

這是我的應用程序,我需要發送電子郵件。它與gmail.is工作正常,可以用yahoo郵箱做同樣的事情嗎? (如果從文本框有@ ​​gmail.com它必須去控制器中的smtp.gmail.com步驟,如果從文本框有@ ​​yahoo.com它必須去smtp.mail.yahoo.com - 它是可能的? )如何使用mvc中的應用程序同時使用Gmail和雅虎發送郵件?

我的控制器:

using emailtest1.Models; 
    using System.IO; 
    using System.Net; 
    using System.Net.Mail; 
    using System.Web.Mvc; 
    namespace emailtest1.Controllers 
    { 

     public class HomeController : Controller 
     { 
      // GET: Home 
      public ActionResult Index() 
      { 
       return View(); 
      } 
      [HttpPost] 
      public ActionResult Index(EmailModel model) 
      { 
       using (MailMessage mm = new MailMessage(model.Email, model.To)) 
       { 
        mm.Subject = model.Subject; 
        mm.Body = model.Body; 
        if (model.Attachment.ContentLength > 0) 
        { 
         string fileName = Path.GetFileName(model.Attachment.FileName); 
         mm.Attachments.Add(new Attachment(model.Attachment.InputStream, fileName)); 
        } 
        mm.IsBodyHtml = false; 
        using (SmtpClient smtp = new SmtpClient()) 
        { 
         smtp.Host = "smtp.gmail.com"; 
         smtp.Host = "smtp.mail.yahoo.com"; 
         smtp.EnableSsl = true; 
         NetworkCredential NetworkCred = new NetworkCredential(model.Email, model.Password); 
         smtp.UseDefaultCredentials = false; 
         smtp.Credentials = NetworkCred; 
         smtp.Port = 587; 
         smtp.Port = 25; 
         smtp.Send(mm); 
         ViewBag.Message = "Email sent."; 
        } 
       } 
       return View(); 
      } 
     } 
    } 

我的模型:

using System.Web; 
namespace emailtest1.Models 
{ 
     public class EmailModel 
     { 
      public string To { get; set; } 
      public string Subject { get; set; } 
      public string Body { get; set; } 
      public HttpPostedFileBase Attachment { get; set; } 
      public string Email { get; set; } 
      public string Password { get; set; } 
     } 
} 

我的視圖:

@model emailtest1.Models.EmailModel 
@{ 
    Layout = null; 
} 
<!DOCTYPE html> 
<html> 
<head> 
    <meta name="viewport" content="width=device-width" /> 
    <title>Index</title> 
    <style type="text/css"> 
     body { 
      font-family: Arial; 
      font-size: 10pt; 
     } 

     table th, table td { 
      padding: 5px; 
     } 
    </style> 
</head> 
<body> 
    <div> 
     @using (Html.BeginForm("Index", "Home", FormMethod.Post, new { enctype = "multipart/form-data" })) 
     { 
      <table border="0" cellpadding="0" cellspacing="0"> 
       <tr> 
        <td style="width: 80px"> 
         To: 
        </td> 
        <td> 
         @Html.TextBoxFor(model => model.To) 
        </td> 
       </tr> 
       <tr> 
        <td> 
         Subject: 
        </td> 
        <td> 
         @Html.TextBoxFor(model => model.Subject) 
        </td> 
       </tr> 
       <tr> 
        <td valign="top"> 
         Body: 
        </td> 
        <td> 
         @Html.TextAreaFor(model => model.Body, new { rows = "3", cols = "20" }) 
        </td> 
       </tr> 
       <tr> 
        <td> 
         File Attachment: 
        </td> 
        <td> 
         @Html.TextBoxFor(model => model.Attachment, new { type = "file" }) 

        </td> 
       </tr> 
       <tr> 
        <td> 
         Gmail: 
        </td> 
        <td> 
         @Html.TextBoxFor(model => model.Email, new { htmlAttributes = new { id = "my_custom_id" } }) 
        </td> 
       </tr> 
       <tr> 
        <td> 
         Gmail Password: 
        </td> 
        <td> 
         @*@Html.TextBoxFor(model=>model.Password)*@ 
         @Html.TextBoxFor(model => model.Password, new { type = "password" }) 
        </td> 
       </tr> 
       <tr> 
        <td></td> 
        <td> 
         <input type="submit" value="Send" /> 
        </td> 
       </tr> 
      </table> 
      <br /> 
      <span style="color:green">@ViewBag.Message</span> 
     } 
    </div> 
</body> 
</html> 
+0

爲了澄清,是與雅虎發送電子郵件的問題,或者是問題「我該怎麼辦兩「?如果是這樣,你是否爲你寫的語句嘗試了一個if/else條件? ('如果從文本框有@ ​​gmail.com它必須去控制器中的smtp.gmail.com步驟,如果從文本框有@ ​​yahoo.com它必須去smtp.mail.yahoo.com')? –

+0

@ashwanth你能解決這個話題嗎? – GGO

+0

是的,我得到了解決方案@GGO謝謝 – ashwanth

回答

6

不能一個接一個地重寫Host和Port屬性。你必須把一個條件:

if(model.Email.contains("@gmail.com")){ 
    smtp.Host = "smtp.gmail.com"; 
    smtp.Port = 587; 
} else if(model.Email.contains("@yahoo.fr")) { 
    smtp.Host = "smtp.mail.yahoo.com"; 
    smtp.Port = 587; 
} 
1

是的,但不喜歡你做的方式,當你做:

smtp.Host = "smtp.gmail.com"; 
smtp.Host = "smtp.mail.yahoo.com"; 

你覆蓋SMTP。

你可以做的就是這個

smtp.Port = 587; 
    if (textbox.value.contains("@gmail.com")) 
      smtp.Host = "smtp.gmail.com"; 
    ELSE (textbox.value.contains("@yahoo.com")) 
      smtp.Host = "smtp.mail.yahoo.com"; 

該做的工作後...

相關問題