带引号的C#Outlook邮件

时间:2017-07-19 06:53:40

标签: c# outlook

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

var url = "mailto:foo@bar.com?subject=Foobar [ID_01] P1&body=somerandomtext";
Process.Start(url);

当我替换"某些随机文本"使用,让我们说TextBox1.Text并且在TextBox1中有双引号("),Outlook响应为:

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

我可以做TextBox1.Text.Replace("\"", "'"),但必须有办法发送/自动填充双引号。

1 个答案:

答案 0 :(得分:0)

最初的建议是使用UrlEncoding

link

  

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

这适用于双引号,但如果正文中有空格将转换为“+”

例如,如果字符串是:

this is for "testing"

使用UrlEncode,它将转换为:

this+is+for+%22testing%22

enter image description here

以上看起来不太好。

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

var changedText = body.Replace("\"", "%22");

这会将输出显示为:

enter image description here

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

  

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

     

Space()%20

     

逗号(,)%2C

     

问号(?)%3F

     

期间(。)%2E

     

感叹号(!)%21

     

冒号(:)%3A

     

分号(;)%3B

mailto handler的MSDN页面包含以下其他详细信息:

  

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

     

有关mailto协议的详细信息,请参阅RFC2368:mailto URL方案。

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

handles所有必要的转化。