我正在尝试通过Outlook
发送电子邮件。我正在使用这个有效的代码。
var url = "mailto:foo@bar.com?subject=Foobar [ID_01] P1&body=somerandomtext";
Process.Start(url);
当我替换"某些随机文本"使用,让我们说TextBox1.Text
并且在TextBox1中有双引号("),Outlook响应为:
命令行参数无效。检查您正在使用的命令。
我可以做TextBox1.Text.Replace("\"", "'")
,但必须有办法发送/自动填充双引号。
答案 0 :(得分:0)
最初的建议是使用UrlEncoding
URL编码将URL中不允许的字符替换为由十六进制转义序列组成的字符实体等效项。
这适用于双引号,但如果正文中有空格将转换为“+”
例如,如果字符串是:
this is for "testing"
使用UrlEncode
,它将转换为:
this+is+for+%22testing%22
以上看起来不太好。
因此,更好的解决方案是手动用%22替换双引号。
var changedText = body.Replace("\"", "%22");
这会将输出显示为:
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所有必要的转化。