2017-07-19 52 views
1

我想通过Outlook发送电子邮件。我正在使用这个工作的代码。C#Outlook邮件与行情

var url = "mailto:[email protected]?subject=Foobar [ID_01] P1&body=somerandomtext"; 
Process.Start(url); 

当我更换“somerandomtext”有,比方说TextBox1.Text并有双引号(“)内TextBox1中,Outlook中的响应与:

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

我只是做TextBox1.Text.Replace("\"", "'"),但必须有发送/自动填充双引号的方式。

+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可here

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

空间()%20

逗号(,)%2C

问号(?)%3F

句号(。)%2E

感叹号(!)%21

冒号(:)%3A

分号(;)%3B

mailto handler的MSDN页具有这些额外的细节:

视窗Internet Explorer 7和后来。您必须对邮件地址中的所有URL保留字符进行百分比编码。例如,数字符号(#)被用作URL中的片段标识符。在处理诸如[email protected]之类的地址时,Internet Explorer仅将数字符号部分复制到邮件客户端;包括数字符号的片段部分被忽略。此行为是设计使然。

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

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

handles所有必要的转换。