2014-12-04 20 views
-2

我有一個MVC應用程序,我試圖在用戶填寫應用程序後發送電子郵件。用戶從包含管理員列表的應用程序頁面上的下拉列表中進行選擇。該電子郵件應發送給從列表中選擇的人。我有一個包含表單信息的應用程序表和一個包含電子郵件的用戶表。如何通過郵箱發送郵件給下拉特定用戶

我在我的帖子中有以下內容索引操作方法,以便在應用程序發佈後發送電子郵件。 (注:這個,如果我只是一個靜態的郵件傳遞到mailMessage.To.Add法正常工作)

SmtpClient client = new SmtpClient("myserver.net"); 
MailMessage mailMessage = new MailMessage(); 


mailMessage.From = new MailAddress("[email protected]"); 
mailMessage.To.Add(**need to pass in whoever's email is chosen from the dropdown here**); 
mailMessage.Subject = "You've Received a New Application"; 
mailMessage.Body = "Please log in to view your new application. Thanks!"; 

client.Send(mailMessage); 

這是我需要做什麼,我已經試過:

  1. 抓鬥的applicationID從剛發佈
  2. 加入該從用戶表中的用戶ID匹配的應用
  3. 從用戶表中獲取電子郵件
  4. 將電子郵件傳遞到mailMessage.Add()方法。

我想這個內部聯接查詢,並試圖通過sendEmail到mailMessage.Add()方法:

var sendEmail = from c in db.Applications 
          join a in db.Users 
          on c.FullName equals a.Id 
          select a.Email; 

這給我的錯誤:「最好的超載有一些無效的參數。」不知道我是否以正確的方式開展這項工作。

經過一些試用,錯誤和幫助...工作查詢。

var sendEmail = (from c in db.Applications 
          join a in db.Users 
          on c.FullName equals a.Id 
          where a.Id == application.FullName 
          select a.Email).FirstOrDefault(); 
if (sendEmail != null) 
      { 
       SmtpClient client = new SmtpClient("smtpout.myserver.net"); 
       MailMessage mailMessage = new MailMessage(); 

       mailMessage.From = new MailAddress("website.com"); 
       mailMessage.To.Add(sendEmail); 
       mailMessage.Subject = "You've Received a New Application"; 
       mailMessage.Body = "Please log into to view your new application. Thanks!"; 

       client.Send(mailMessage); 

      } 

回答

0

您需要獲得第一或默認的LINQ表達式。 linq結果很可能是IQueryable,這是一個無效的參數,我假設電子郵件字符串類型。

var sendEmail = (from c in db.Applications 
          join a in db.Users 
          on c.FullName equals a.Id 
          select a.Email).FirstOrDefault(); 

這增加了一個在哪裏過濾您的查詢並獲得您需要的電子郵件。我不確定你的數據結構,所以我只是假設沒有太多的想法。

var sendEmail = (from c in db.Applications 
           join a in db.Users 
           on c.FullName equals a.Id 
           // where a.id = userIdValueFromDropDown 
           select a.Email).FirstOrDefault(); 
+0

不錯,不知道FirstOrDefault。 Newb的問題,但我怎麼做一個字符串的結果,所以我可以在我的mailMessage.To.Add()方法中使用它? – dc922 2014-12-04 02:12:20

+0

結果是一個字符串。 – 2014-12-04 02:15:39

+0

謝謝。那麼所有的邏輯顯示正確,沒有錯誤,但電子郵件沒有被髮送。 – dc922 2014-12-04 02:22:27

1

不確定您的數據庫結構,但您的查詢不是基於所選用戶篩選結果。如果表單有管理員的下拉這是User和返回的值是User.ID,然後懷疑你只需要查詢Users表得到他們email財產

var userID = // the value from the post 
var email = (from u in db.Users select u.Email where u.ID == userID).FirstOrDefault(); 
if (email != null) 
{ 
    // create and send the email 
}