VB.Net MailMessage文本编码问题

时间:2010-03-08 21:20:49

标签: asp.net vb.net encoding character-encoding smtp

我有一个ASP.Net应用程序,允许用户将文本写入Telerik RadEditor控件,然后发送电子邮件。

出于某种原因,我有时会在生成的电子邮件中显示奇怪的字符。

例如,如果我将单词 Test's 放入RadEditor框并发送它......电子邮件会显示,文本更改为: Test's

似乎用'字符代替',因为如果我使用后者,文本就会显示得很好。如果我在ASP.Net应用程序界面中提取已保存的记录,它看起来很好。当我在存储的MS SQL表的记录中查看文本时,它看起来也很好。

我正在使用MailMessage创建电子邮件。我在使用SmtpClient发送消息之前检查了发送的字符串,它看起来很好。一旦电子邮件消息出现,我就会收到奇怪的文本(Test)。

我猜我有编码/解码问题,但我不确定如何解决这个问题。

有人有什么想法吗?

谢谢!。

续--->

我试图将它添加到我的电子邮件类的构造函数中,有/没有mybase但是没有效果。

  Public Sub New(ByVal EmailDate As DateTime, ByVal LogoPath As String)
        MyBase.New()
        MyBase.BodyEncoding = Encoding.GetEncoding("iso-8859-1")

        ‘BodyEncoding = Encoding.GetEncoding("iso-8859-1")
        Me.EmailDate = EmailDate
        Me.LogoPath = LogoPath
    End Sub

我还尝试将其添加到我创建新的SmtpClient之前调用电子邮件类的表单后面的代码中,但这似乎也不正确。

Try
    returnEmail.BodyEncoding = Encoding.GetEncoding("iso-8859-1")
    Dim smtpCli As New SmtpClient
    smtpCli.Send(returnEmail)
Catch ex As Exception
    ScriptManager.RegisterStartupScript(Me, Me.GetType, "smtpError", "alert('There was an error sending the email:\n* " & ex.Message & "');", True)
End Try

2 个答案:

答案 0 :(得分:2)

您遇到的问题是您使用的是非ascii字符。该引用不是单引号(您已经确定),它通常是后引用,或其他一些字符(最常用于MS Word环境)。这些通常也可以在ISO-8859-1字符集中找到。

尝试在MailMessage对象上设置BodyEncoding属性。

例如:

msg.BodyEncoding = Encoding.GetEncoding("iso-8859-1")

答案 1 :(得分:1)

根据dave wanta的答案,您应该将BodyEncoding的{​​{1}}属性设置为您的控件使用的编码(可能是MailMessage),或者使用System.Text.Encoding.Unicode

将文本转换为MailMessage对象使用的编码