【问题标题】:how to use session variables in email如何在电子邮件中使用会话变量
【发布时间】:2014-04-18 02:46:52
【问题描述】:

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

【问题讨论】:

  • @Smith.h.Neil 问题是我想使用的会话变量没有出现在电子邮件中
  • 在我看来,您从会话中正确获取了值。你确定他们拿到后不为空吗?
  • 不要使用Environment.NewLine,而是使用<br />(HTML 换行符),因为您正在发送 HTML 电子邮件而不是纯文本。
  • @Smith.h.Neil 很抱歉浪费了您的时间,但我想出了一个解决方案(请参阅我的答案)。你说得对,因为我从一开始就没有设置它们,所以在得到它们之后它们是空的。无论如何感谢您的宝贵时间

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


【解决方案1】:

您的问题在哪里不清楚您尝试访问Session,但它可以从运行在网络工作进程(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 电子邮件。您应该使用适当的标记而不是换行符。

【讨论】:

  • 我已经修改了问题中的代码,如果它更有意义的话。我了解您的方法,但是我想知道是否可以按照我尝试过的方式进行尝试?
  • 是的,该代码应该可以正常工作(假设会话已启用并且有相应的值)。
【解决方案2】:

对于那些帮助过我的人,很抱歉浪费了您的时间。我想通了......真的很愚蠢,但我之前在以前的网络表单中错误地设置了会话变量,因此会话变量为空。

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

所以,供将来参考。原来我有

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

我更正了这个

Session["name"] = lblName.Text;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-20
    • 1970-01-01
    • 2017-06-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多