我在电子邮件正文中创建查询字符串时遇到问题。你能帮我吗?
方案是用户收到我的电子邮件,然后我需要在此电子邮件中添加“取消订阅”链接,该链接将用户重定向到他/她可以取消订阅的页面。我将这些电子邮件发送给已经注册的用户。
我用来发送这些批量电子邮件的代码如下:
- 使用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 = "xxx@xxxxxx.xxx"
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("xxx@xxxxxx.xxx", "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 :(得分:0)
根据您的问题,我认为您希望用户无论何时想要取消订阅该消息,都应该在电子邮件正文中获取该链接。您可以尝试这样: -
msg.Body = "<a href='http://www.yoursite.com/SignUp.aspx?nyckel=" + uniqueid + "'></a>";
或者从这里获取参考并根据您的需要进行自定义
答案 1 :(得分:0)
我发现了如何做到这一点:
发送简报:
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)
并取消订阅:
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 Id=@Id"
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
由于