【问题标题】:How to respect spaces when passing body to an mailto in C#在 C# 中将正文传递给 mailto 时如何尊重空格
【发布时间】:2019-05-26 11:45:33
【问题描述】:

我有一个模板样式页面,它构建了一个 mailto 链接以在用户默认邮件客户端中打开预构建的电子邮件

我意识到默认情况下使用 URLencode 会将空格替换为 + (并且 pathencode 将替换为 %20 )-但是是否可以在尊重内容中的空格的同时传递正文和主题? - 例如,在 javascript 中使用 encodeURIComponent(yourMessage) 将保留“yourmessage”变量中的空格

   private void SubmitEmail(object sender, RoutedEventArgs e)
    {
    string txt = "text that is an example";
    string rnt = "this is also an example";
    string PrioStr = "this is an example, of text that will come from a radio buttons contents";
    var yourMessage = txt;
    var subject =$"firstvariable:{Rnt}     secondvariable:{PrioStr}";

    var url =$"mailto:test@test.com.com?subject={HttpUtility.UrlEncode(subject)}&body={HttpUtility.UrlEncode(yourMessage)}"; 

     Process.Start(url);
     }
  • 这是我已经使用 javascript 构建的东西的转换,它在 javascript 中按预期工作,但是当将逻辑应用于 C# 时,它会用“+”符号替换主题/正文中的空格

【问题讨论】:

  • 嗨@NineBerry 抱歉,我错过了运行实际 URL 的 process.start!我的错 - 我做了一些修改以使其更完整这作为按钮的一部分发生在 WPF 表单中单击,如果有帮助?
  • 您正在测试什么电子邮件应用程序? Outlook (2015) 似乎能够处理转义为 %20 的空格。
  • 我使用了 Outlook 2013,并且 Windows 10 的默认“邮件”客户端已连接到 gmail 帐户

标签: c# url mailto


【解决方案1】:

使用Uri.EscapeDataString,它将空格转义为%20

private void SubmitEmail(object sender, RoutedEventArgs e)
{
    string txt = "text that is an example";
    string rnt = "this is also an example";
    string PrioStr = "this is an example, of text that will come from a radio buttons contents";
    var yourMessage = txt;
    var subject =$"firstvariable:{Rnt}     secondvariable:{PrioStr}";

    var url = $"mailto:test@test.com.com?subject={Uri.EscapeDataString(subject)}&body={Uri.EscapeDataString(yourMessage)}";
}

【讨论】:

  • 这完全符合我的需要!非常感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-12-23
  • 2012-07-15
  • 2023-03-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-10
相关资源
最近更新 更多