使用C#,。net 4.0
我正在使用HttpUtility.ParseQueryString来解析mailto URI,如下所示:
MailMessage message = new MailMessage();
NameValueCollection mailTo = System.Web.HttpUtility.ParseQueryString(mailToUri.OriginalString.Split('?')[1]);
message.Subject = mailTo["subject"];
URI可以有多个“to”参数,例如:
mailto://?to=address1@email.com&to=address2@email.com&to=address3@email.com&subject=test&body=this%20should%20be%20the%20body"
当单步执行代码时,我可以看到ParseQueryString创建了mailTo [“to”] NameValueCollection,它包含一个带有多个值的“to”键,它似乎是System.Collections.Specialized.NameObjectCollectionBase.NameObjectEntry类型的对象。
我确定我错过了一些简单的事情。我无法弄清楚如何迭代这个集合并获得每个单独的价值。我会找这样的东西,这显然不起作用:
foreach (String address in mailTo["to"])
{
message.To.Add(new MailAddress(address));
}
此外,如果你知道从mailto URI到SMTP消息的更好方法,我都是眼睛。
答案 0 :(得分:3)
要在不提供替代解决方案的情况下回答您的问题,请尝试以下方法:
foreach (var value in mailTo.GetValues("to"))
{
Debug.WriteLine(value);
}
答案 1 :(得分:2)
NameValueCollection的值部分是一个字符串。因此,对于“to”键,它将是逗号分隔的电子邮件地址字符串。
string s = "to=address1@email.com&to=address2@email.com&to=address3@email.com&subject=test";
var items = System.Web.HttpUtility.ParseQueryString(s);
foreach(string email in items["to"].Split(','))
{
Console.Out.WriteLine(email);
}
结果如下
address1@email.com
address2@email.com
address3@email.com
答案 2 :(得分:0)
mailTo [“to”]只是一个字符串,其中包含逗号分隔的地址,您可以像这样拆分和解析:
foreach (var address in mailTo["to"].Split(','))
{
message.To.Add(new MailAddress(address));
}