Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/275.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在邮件客户机';邮件链接?_C#_Email - Fatal编程技术网

C# 如何在邮件客户机';邮件链接?

C# 如何在邮件客户机';邮件链接?,c#,email,C#,Email,我有一个ASP.NET/C应用程序,其中一部分将WWW链接转换为HTML电子邮件中的mailto链接 例如,如果我有一个链接,例如: www.site.com 它被改写为: 邮寄地址:my@address.com?主题=www.site.com 这非常有效,直到我遇到带有符号的URL,这会导致主题被截断 例如,链接: www.site.com?val1=a&val2=b 显示为: 邮寄地址:my@address.com?Subject=www.site.com?val1=a&val2=b 这正是

我有一个ASP.NET/C应用程序,其中一部分将WWW链接转换为HTML电子邮件中的mailto链接

例如,如果我有一个链接,例如:

www.site.com

它被改写为:

邮寄地址:my@address.com?主题=www.site.com

这非常有效,直到我遇到带有符号的URL,这会导致主题被截断

例如,链接:

www.site.com?val1=a&val2=b

显示为:

邮寄地址:my@address.com?Subject=www.site.com?val1=a&val2=b

这正是我想要的,但当单击时,它会创建一条带有以下内容的消息:

subject=www.site.com?val1=a

它删除了
&val2
,这与mailto命令中的分隔符一样有意义。
因此,我尝试了其他各种方法来解决这个问题,但没有成功。
我尝试过隐式引用
subject='
部分,但没有任何效果

I(在C#中)用
替换“&”哪些Live Mail和Thunderbird刚刚返回:

www.site.com?val1=a&val2=b

我将“&”替换为“%26”,结果是:

邮寄地址:my@address.com?Subject=www.site.com?val1=a%26amp;val2=b

在主题为的邮件中:

www.site.com?val1=a&;val2=b


编辑: 为了响应URL是如何构建的,这一点被大大减少了,但这是它的要点。代替att.Value.Replace,我尝试了System.Web.HtmlUtility.URLEncode调用,这也会导致失败

HtmlAgilityPack.HtmlNodeCollection nodes =doc.DocumentNode.SelectNodes("//a[@href]");
foreach (HtmlAgilityPack.HtmlNode link in nodes)
{
  HtmlAgilityPack.HtmlAttribute att = link.Attributes["href"];
  att.Value = att.Value.Replace("&", "%26");
}

尝试mailto:my@address.com?Subject=www.site.com?val1=a%26val2=b

&
是HTML转义码,而
%26
是URL转义码。因为它是一个URL,所以这就是您所需要的

编辑:我想这就是你建立URL的方式不要那样构建URL您需要先将
%26
放入其中,然后才能让任何其他内容解析或转义它。如果您确实必须这样做(您确实应该尽量避免),那么您应该搜索
“&;”
,而不是只搜索
“&”
,因为此时字符串已被HTML转义


因此,理想情况下,您可以在HTML转义之前正确构建URL。如果不能正确执行,至少要搜索正确的字符串,而不是错误的字符串<代码>“&”
是错误的。

您不能将任何字符作为主题。您可以尝试对主题的值使用System.Web.HttpUtility.URLEncode函数…

使用URL转义码
%26
是正确的方法


不幸的是,这在Android操作系统上仍然不起作用,因为

我最终为我的案例所做的是取消了
&

www.site.com/mytest.php?val1=a=b=c
。其中第二个和第三个
=
相当于
www.site.com?val1=a&val2=b&val3=c

在mytest.php中,我在
上分解,然后在
=
上再次分解


我知道这是一个完全的黑客攻击,但它确实对我有用。

我尝试过,在电子邮件中,链接显示为val1=A%26amp;Live Mail/Thunderbird中的val2=b,然后在生成新邮件时,主题呈现为?val1=a&;瓦尔2=b@Serapth:那没有任何意义。您的问题中有一个场景,您尝试了“%26amp;”,这将显示您所说的输出,但我的URL不应该有这个问题。你到底是如何建立你的URL的?@Welbog,编辑了主要帖子来回答你的问题,因为在评论中,代码格式很糟糕。虽然我同意,结果毫无意义,但在添加最后一次替换调用后,它的格式是“www.site.com?val1=a%26amp;val2=b'在my mail client.ARG中!我真不敢相信我看了这么久都没有考虑到这一点(一个%26amp;的结果应该是出了什么问题的一个明确指标。不幸的是,有时你太专注于一个问题,以至于忘记了你的输入可能是原因,特别是当调试器向你显示一切正常时。非常感谢。单独工作意味着没有同行评议,这可能是最大的问题我错过了一件事。你的洞察力对我来说是天赐良机。我本来打算悬赏解决这个问题,因为我没有看到你的编辑。我仍然会尽我所能,完全信任你。谢谢!我尝试了这个,但没有成功,邮件客户端在通过UrlEncode后无法读取链接。