电子邮件地址编码问题

4

我有以下字符串需要用作确认电子邮件“发件人”地址。这是西班牙语翻译,在网络客户端中查看时会出现问题。如下所示。

model.FromAddresses = new EmailAddress
{
  Address = fromAddressComponents[0],
  DisplayName = fromAddressComponents[1]
};

从资源字符串中获取的值,如下所示

  <data name="BookingConfirmation_FromAddress" xml:space="preserve">
    <value>Confirmación@test.com</value>
  </data>

在电子邮件客户端中,该值变为(应该是 Confirmación@test.com)。

=?utf-8?Q?Confirmaci=C3=B3n

您能看到如何避免这个问题吗?我知道这是由于ó引起的,但我不确定如何避免这个问题!

谢谢, 詹姆斯

更新

下面是完整代码:

public void Send(MailAddress to, MailAddress from, string subject, string body)
    {
        var message = new MailMessage
                          {
                              BodyEncoding = new System.Text.UTF8Encoding(true),
                              From = from,
                              Subject = subject,
                              Body = body,
                              IsBodyHtml = true
                          };


        message.To.Add(to.Address);

        var smtp = new SmtpClient() { Timeout = 100000 };
        try
        {
            smtp.Send(message);
        }
        finally
        {
            if (smtp.DeliveryMethod == SmtpDeliveryMethod.Network)
                smtp.Dispose();
        }

    }





// New Version
// --------------------------


    public override void Handle(SendEmailEmailCommand emailCommand)
    {
        if(!_config.SendEmail)
        {
            return;
        }

        var to = new MailAddress(emailCommand.To.Address, emailCommand.To.DisplayName);
        var from = new MailAddress(emailCommand.From.Address, Uri.UnescapeDataString(emailCommand.From.DisplayName));

        try
        {
            var msgBody = _compressor.Decompress(emailCommand.Body);
            _emailClient.Send(to, from, emailCommand.Subject, msgBody);
        }       
        catch (Exception ex)
        {
            _logger.Error("An error occurred when trying to send an email", ex);
            throw;
        }
    }



    public void Send(MailAddress to, MailAddress from, string subject, string body)
    {
        var message = new MailMessage
                          {
                              BodyEncoding = new System.Text.UTF8Encoding(true),
                              From = from,
                              Subject = subject,
                              Body = body,
                              IsBodyHtml = true
                          };


        message.To.Add(to.Address);

        if (!string.IsNullOrWhiteSpace(_config.BccEmailRecipents))
        {
            message.Bcc.Add(_config.BccEmailRecipents);
        }


        SendEmail(message);

        if (_config.BackupEmailsEnabled)
        {
            SendBackupEmail(message);
        }
    }



    private void SendEmail(MailMessage message)
    {
        var smtp = new SmtpClient() { Timeout = 100000 };
        try
        {
            smtp.Send(message);
        }
        finally
        {
            if (smtp.DeliveryMethod == SmtpDeliveryMethod.Network)
                smtp.Dispose();
        }
    }

谢谢,但我尝试了编码/解码,但它没有起作用。 - James Radford
你能展示一下从资源字符串中获取值的代码吗? - Ram Singh
这个电子邮件地址是否是有效的? - Steen Tøttrup
是 ó 导致了问题。我在 Microsoft Outlook 薄型(浏览器)客户端中查看电子邮件。 - James Radford
你还没有粘贴代码,从哪里设置电子邮件ID为TO? - Ram Singh
@raman,完整列表在上面,如果我还漏掉了什么,请说明您需要什么!!!非常感谢。 - James Radford
1个回答

3
请看下面的例子,使用System.Uri类方法,希望对您有所帮助。
string email = "Confirmación@test.com";

string escaped = 
       System.Uri.EscapeDataString(email); // Confirmaci%C3%B3n%40test.com
string unescaped = 
       System.Uri.UnescapeDataString(email); //Confirmación@test.com

我在运行时收到以下错误消息(我尝试过EscapeDataString和UnescapeDataString):“指定的字符串不符合电子邮件地址所需的格式。” - James Radford
@JamesRadford 你是这样使用的吗 System.Uri.method(email); - HatSoft
请查看我的问题更新,其中包括我使用它的位置。如果我使用escapeDataString方法,则会发生运行时错误,指出电子邮件地址无效。如果我使用UnescapeDataString,则可以成功接收电子邮件,尽管DisplayName中的字符不正确。 - James Radford
我注意到在你的新版本中,你没有对这行代码中的To.Address进行反转义:var to = new MailAddress(emailCommand.To.Address, emailCommand.To.DisplayName); - HatSoft
让我们在聊天中继续这个讨论:http://chat.stackoverflow.com/rooms/14330/discussion-between-james-radford-and-hatsoft - James Radford

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接