2014-04-17 51 views
0

標題沒有明智的意義,但本質上我想使用會話變量並將它們包含在c#代碼中的電子郵件正文中。發送沒有會話變量的電子郵件可以正常工作。是否有可能做我想做的事?如何在電子郵件中使用會話變量

修改後的代碼:

public partial class Success : System.Web.UI.Page 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 
     MembershipUser userName = Membership.GetUser(User.Identity.Name); 

     ListBox order = (ListBox)(Session["order"]); 

     string name = (String)(Session["name"]); 
     string addressLine1 = (String)(Session["addressLine1"]); 
     string addressLine2 = (String)(Session["addressLine2"]); 
     string addressLine3 = (String)(Session["addressLine3"]); 
     string county = (String)(Session["county"]); 
     string postCode = (String)(Session["postcode"]); 

     SmtpClient SmtpServer = new SmtpClient("smtp.live.com"); 

     var mail = new MailMessage(); 
     mail.From = new MailAddress("my email"); 
     mail.To.Add("recipient email"); 
     mail.Subject = "Your Reciept"; 
     mail.IsBodyHtml = true; 

     string htmlBody; 
     htmlBody = "Hi "+ userName + Environment.NewLine + Environment.NewLine + 
        "Here's your details: " + Environment.NewLine + Environment.NewLine 
        + order + Environment.NewLine + Environment.NewLine 
        + name + Environment.NewLine 
        + addressLine1 + Environment.NewLine 
        + addressLine2 + Environment.NewLine 
        + addressLine3 + Environment.NewLine 
        + county + Environment.NewLine 
        + postCode + Environment.NewLine + Environment.NewLine; 

     mail.Body = htmlBody; 
     SmtpServer.Port = 587; 
     SmtpServer.UseDefaultCredentials = false; 
     SmtpServer.Credentials = new System.Net.NetworkCredential("my email", "password"); 
     SmtpServer.EnableSsl = true; 
     SmtpServer.Send(mail); 
    } 
} 

也要注意,Environment.NewLine不起作用。 您的幫助將是非常讚賞

+0

糾正了這個請告訴我問題呢? –

+0

@ Smith.h.Neil問題是,我想使用的會話變量不會出現在電子郵件 – Lemons

+0

我看起來像我正確地從會話中獲取值。你確定他們在得到他們後不是空的嗎? –

回答

0

對於那些幫助我的人,抱歉浪費你的時間。我想到了......真的很愚蠢,但我之前在之前的webform中錯誤地設置了會話變量,因此會話變量爲空。

沒有錯誤的原因是(我的猜測),我在button_click函數上設置了會話變量,但也有一個postbackurl。 postbackurl必須重寫button_click函數。

所以,以備將來參考。我原本

string name = Session["name"].ToString(); 
lblName.Text = name; //this didnt work 

我通過

Session["name"] = lblName.Text; 
0

目前尚不清楚,從你的問題其中您試圖訪問Session,但它是從在Web工作進程(see my answer here)上運行任何代碼。但是,我更喜歡將電子郵件邏輯放在單獨的類中,甚至是單獨的項目中。

該類可以將輸入值作爲字符串或表示數據的類型。

// good 
public void SendMail(string name, string address, etc etc) 
{ 
    // mail code here 
} 

// better 
public void SendMail(UserInfo info) 
{ 

} 

// best 
public void SendMail(UserInfo info, string template) 
{ 
    // insert the user values into a template of some sort...no hardcoding format/HTML 
} 

關於Environment.NewLine。您的字符串名稱是htmlBody,這意味着您要發送HTML電子郵件。您應該使用適當的標記而不是換行符。

+0

我已經在問題中修改了我的代碼,如果它更有意義。我瞭解你的方法,但我想知道是否有可能以我嘗試過的方式嘗試這種方式? – Lemons

+0

是的,該代碼應該工作得很好(假設會話已啓用,並且有相應的值)。 –

相關問題