C#带引号的Outlook邮件

C#带引号的Outlook邮件,c#,outlook,C#,Outlook,我正在尝试通过Outlook发送电子邮件。我正在使用这个代码,它确实有效 var url = "mailto:foo@bar.com?subject=Foobar [ID_01] P1&body=somerandomtext"; Process.Start(url); 当我将“somerandomtext”替换为,比如说TextBox1.Text,并且TextBox1中有双引号(“),Outlook的响应为: 命令行参数无效。请检查正在使用的命令 我可以只做TextBox1.Text.

我正在尝试通过Outlook发送电子邮件。我正在使用这个代码,它确实有效

var url = "mailto:foo@bar.com?subject=Foobar [ID_01] P1&body=somerandomtext";
Process.Start(url);
当我将“somerandomtext”替换为,比如说
TextBox1.Text
,并且TextBox1中有双引号(“),Outlook的响应为:

命令行参数无效。请检查正在使用的命令


我可以只做
TextBox1.Text.Replace(“\”,“””)
,但必须有一种方法来发送/自动填充双引号。

最初的建议是使用
UrlEncoding

URL编码将URL中不允许的字符替换为由十六进制转义序列组成的等效字符实体

这对于双引号很好,但是如果正文文本中有空格将转换为“+”

例如,如果字符串为:

this is for "testing"
使用
UrlEncode
,它将转换为:

this+is+for+%22testing%22

以上这些看起来不太好

因此,更好的解决方案是手动将双引号替换为%22

var changedText = body.Replace("\"", "%22");
这将给出如下输出:

Outlook的“mailto”处理程序的替换字符串的完整列表可用:

以下变量用于表示常用字符:

空格()%20

逗号(,)%2C

问号(?)%3F

周期(.%2E)

感叹号(!)%21

冒号(:)%3A

分号(;)%3B

的MSDN页面包含以下附加详细信息:

Windows Internet Explorer 7及更高版本。您必须对mailto:地址中的所有URL保留字符进行百分比编码。例如,数字符号(#)用作URL中的片段标识符。当处理地址时,例如某些#one@example.com,Internet Explorer只将数字签名之前的部分复制到邮件客户端;忽略包含数字符号的片段部分。这种行为是故意的

有关mailto协议的更多信息,请参阅:mailto URL方案

经过一些额外的测试和谷歌搜索,似乎有了一个更简单的使用
Uri.EscapeDataString


这是所有必要的转换。

谢谢,它正在工作。