2014-11-14 37 views
0

我在创建电子邮件正文中的查询字符串时遇到问题。你可以帮我吗?asp.net电子邮件正文中的查询字符串

这种情况是,用户收到我的电子邮件,然后我需要在此电子邮件中添加一个“取消订阅”链接,将用户重定向到他/她可以取消订阅的页面。我将这些电子邮件发送给已经注册的用户。

我使用发送这些大量电子邮件的代码如下:

- 该显示使用的SqlCommand,DataSet和SqlDataAdapter的从AspnetUser表取出的数据:

Protected Sub btnBind_Click(sender As Object, e As EventArgs) 
    Try 
     conn.Open() 
     Dim cmd As New SqlCommand("Select Id,FirstName,LastName,Newsletter,Email from AspNetUsers Where Newsletter=1", conn) 
     Dim adp As New SqlDataAdapter(cmd) 
     Dim ds As New DataSet() 
     adp.Fill(ds) 
     grvCustomers.DataSource = ds 
     grvCustomers.DataBind() 
     lbltotalcount.Text = grvCustomers.Rows.Count.ToString() 
    Catch ex As SqlException 
     ' Display your error messages ' 
     FailureText.Text = "Something went wrong with your sql server database" 
     ErrorMessage.Visible = True 
    Finally 
     conn.Close() 
    End Try 
    btnBind.Visible = False 
End Sub 

我然后检索数据并将其放入gridview中,然后发送批量电子邮件:

Protected Sub btnSend_Click(sender As Object, e As EventArgs) 
    Try 
     lbltotalcount.Text = String.Empty 
     For Each grow As GridViewRow In grvCustomers.Rows 
      Dim Id As String = grow.Cells(0).Text.Trim() 
      Dim FirstName As String = grow.Cells(1).Text.Trim() 
      Dim LastName As String = grow.Cells(2).Text.Trim() 
      Dim Newsletter As String = grow.Cells(3).Text.Trim() 
      Dim Email As String = grow.Cells(4).Text.Trim() 

      Dim filename As String = Server.MapPath("mytemplates/email.html") 
      Dim mailbody As String = System.IO.File.ReadAllText(filename) 
      mailbody = mailbody.Replace("##NAME##", FirstName) 
      Dim [to] As String = Email 
      Dim from As String = "[email protected]" 
      Dim message As New MailMessage(from, [to]) 
      message.Subject = "Test" 
      message.Body = mailbody 
      message.BodyEncoding = Encoding.UTF8 
      message.IsBodyHtml = True 
      Dim client As New SmtpClient("xxxx.xxxxxx.xxx", 25) 
      Dim basicCredential As New System.Net.NetworkCredential("[email protected]", "xxxxxxx") 
      client.UseDefaultCredentials = True 
      client.Credentials = basicCredential 
      Try 

       client.Send(message) 
       emailrecepients.Visible = False 
       emailsent.Visible = True 
      Catch ex As Exception 
       ' Display your error messages ' 
       FailureText.Text = "Emails did't go through for some reasons" 
       ErrorMessage.Visible = True 
      End Try 
     Next 
    Catch ex As SqlException 
     ' Display your error messages ' 
     FailureText.Text = "Something went wrong with your connection to sql server database" 
     ErrorMessage.Visible = True 
    Finally 
     conn.Close() 
    End Try 
End Sub 

电子邮件已正确发送给所有已注册并决定接收我的电子邮件的用户,但是如何在此电子邮件中添加查询字符串以允许用户在不需要登录的情况下取消订阅?

预先感谢您与我分享一些代码。

回答

0

我发现如何实现这一目标:

In send newsletter:

 Dim url As String = String.Format("http://localhost:53972/Newsletter/unsubscribe?Id={1}&Email={2}", Request.Url.Authority, Id, Server.UrlEncode(Email)) 
      mailbody = mailbody.Replace("##UNSUBSCRIBE##", url) 

and in unsubscribe:

Protected Sub Unsubbtn_Click(sender As Object, e As EventArgs) Handles Unsubbtn.Click 
    Dim conn As New SqlConnection(ConfigurationManager.ConnectionStrings("DefaultConnection").ConnectionString) 
    'Create Command object 
    Dim nonqueryCommand As SqlCommand = conn.CreateCommand() 
    Try 
     Dim updateSql As String = "UPDATE AspNetUsers SET Newsletter=0 WHERE [email protected]" 
     Dim UpdateCmd As New SqlCommand(updateSql, conn) 
     UpdateCmd.Parameters.Add("@Newsletter", SqlDbType.Bit).Value = newslettercheckbox.Checked 
     UpdateCmd.Parameters.Add("@Id", SqlDbType.NVarChar, 128).Value = Request.QueryString("Id") 
     conn.Open() 
     UpdateCmd.ExecuteNonQuery() 
    Catch ex As System.Data.SqlClient.SqlException 
     ' Display your error messages ' 
     FailureText.Text = "Something went wrong with your sql server database" 
     ErrorMessage.Visible = True 
    Finally 
     conn.Close() 
     conn.Dispose() 
    End Try 
End Sub 

感谢

0

根据您的问题,我认为您希望用户每当他想取消订阅邮件时,他都应该在电子邮件正文中获得该链接。你可以尝试这样的: -

msg.Body = "<a href='http://www.yoursite.com/SignUp.aspx?nyckel=" + uniqueid + "'></a>"; 

否则,从这里乘坐基准并定制按你想要的,

Unsubscribe link

+0

感谢您的反馈。该解决方案仍然无法正常工作,因为message.Body已经按照我上面的代码使用html模板。 – Kevin 2014-11-16 16:15:50

相关问题