如何在电子邮件中使用会话变量

时间:2014-04-17 00:10:29

标签: c# asp.net email session session-variables

标题没有明确的意义,但基本上我想使用会话变量并将它们包含在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不起作用。 非常感谢您的帮助

2 个答案:

答案 0 :(得分:0)

您在尝试访问Session的问题 中并不清楚,但可以从Web工作进程中运行的任何代码中获取它({{3} })。但是,我更喜欢将电子邮件逻辑放在单独的类中,甚至是单独的项目。

然后,类可以将输入值作为字符串或表示数据的类型。

// 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电子邮件。您应该使用适当的标记而不是换行符。

答案 1 :(得分:0)

对于那些帮助我的人,抱歉浪费你的时间。我想通了......非常愚蠢,但我之前在以前的webform中设置了会话变量,因此会话变量为null。

没有错误的原因是(我的猜测),我在button_click函数上设置了会话变量,但也有一个postbackurl。 postbackurl必须覆盖button_click函数。

所以,以备将来参考。本来我有

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

我通过

更正了这个问题
Session["name"] = lblName.Text;