无法创建多个收件人新邮件与邮寄地址URI [英] Unable to create a new mail with multiple recipients with mailto uri

查看:115
本文介绍了无法创建多个收件人新邮件与邮寄地址URI的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我使用创建的的Windows 8.1商店App 的在的WinRT



我无法用任何逗号或分号分隔每个电子邮件创建与这个mailto URI多个收件人一个新的邮件,既给了我同样的错误。

 无效的URI:主机无法解析。 



的mailto字符串看起来像这样

 电子邮件地址:用户名@ mail.com,USERNAME2 @ mail.com
至mailto:用户名@ mail.com,USERNAME2 @ mail.com,
电子邮件地址:username@mail.com,username2@mail.com
至mailto:username@mail.com; username2@mail.com
至mailto:username@mail.com; username2@mail.com ;
至mailto:username@mail.com; username2@mail.com



我有尝试了所有这些不同的方式在所有给我同样的错误,当newing了URI,是这样的。

  VAR的uri =新的URI(的String.Format(电子邮件地址:{0},邮件)); 



我不知道我做错了,或者如果它没有实现它为什么不会呢?



我创建了一些单元测试,看是否有变化会的工作,但没有。

  [TestClass中] 
公共类UriMailToTest
{
私人乌里CreateMailToUri(字符串的邮件)
{
如果(string.IsNullOrEmpty(邮件))抛出新的ArgumentNullException(邮件);

VAR uriMailTo =的String.Format(电子邮件地址:{0},邮件);
返回新的URI(uriMailTo);
}

[TestMethod的]
公共无效CreateMailToUriTest1()
{
常量字符串的mailto =username@mail.com;
变种的uri = CreateMailToUri(邮寄地址);
uri.Should()NotBeNull();
}

[TestMethod的]
公共无效CreateMailToUriTest2()
{
常量字符串的mailto =用户名@ mail.com,USERNAME2 @ mail.com
变种的uri = CreateMailToUri(邮寄地址);
uri.Should()NotBeNull();
}

[TestMethod的]
公共无效CreateMailToUriTest3()
{
常量字符串的mailto =用户名@ mail.com,USERNAME2 @ mail.com ;
变种的uri = CreateMailToUri(邮寄地址);
uri.Should()NotBeNull();
}

[TestMethod的]
公共无效CreateMailToUriTest4()
{
常量字符串的mailto =username@mail.com; username2@mail.com
变种的uri = CreateMailToUri(邮寄地址);
uri.Should()NotBeNull();
}

[TestMethod的]
公共无效CreateMailToUriTest5()
{
常量字符串的mailto =username@mail.com; username2@mail.com ;;
变种的uri = CreateMailToUri(邮寄地址);
uri.Should()NotBeNull();
}

[TestMethod的]
公共无效CreateMailToUriTest6()
{
常量字符串的mailto =username@mail.com,username2@mail.com
变种的uri = CreateMailToUri(邮寄地址);
uri.Should()NotBeNull();
}

[TestMethod的]
公共无效CreateMailToUriTest7()
{
常量字符串的mailto =username@mail.com; username2@mail.com
变种的uri = CreateMailToUri(邮寄地址);
uri.Should()NotBeNull();
}

[TestMethod的]
公共无效CreateMailToUriTest8()
{
VAR邮件=新[] {username@mail.com, username2@mail.com};
变种的mailto = mails.Select(WebUtility.UrlEncode).Aggregate((C,N)=>的String.Format({0},{1},C,N));
变种的uri = CreateMailToUri(邮寄地址);
uri.Should()NotBeNull();
}

[TestMethod的]
公共无效CreateMailToUriTest9()
{
VAR邮件=新[] {username@mail.com, username2@mail.com};
变种的mailto = mails.Select(WebUtility.UrlEncode).Aggregate((C,N)=>的String.Format({0} {1},C,N));
变种的uri = CreateMailToUri(邮寄地址);
uri.Should()NotBeNull();
}

[TestMethod的]
公共无效CreateMailToUriTest10()
{
VAR邮件=新[] {username@mail.com, username2@mail.com};
变种的mailto = mails.Aggregate((C,N)=>的String.Format({0},{1},C,N));
VAR urlEncodedMailTo = WebUtility.UrlEncode(邮寄地址);
变种的uri = CreateMailToUri(urlEncodedMailTo);
uri.Should()NotBeNull();
}

[TestMethod的]
公共无效CreateMailToUriTest11()
{
VAR邮件=新[] {username@mail.com, username2@mail.com};
变种的mailto = mails.Aggregate((C,N)=>的String.Format({0} {1},C,N));
VAR urlEncodedMailTo = WebUtility.UrlEncode(邮寄地址);
变种的uri = CreateMailToUri(urlEncodedMailTo);
uri.Should()NotBeNull();
}

[TestMethod的]
公共无效CreateMailToUriTest12()
{
VAR邮件=新[] {username@mail.com, username2@mail.com};
变种的mailto = mails.Select(WebUtility.UrlEncode).Aggregate((C,N)=>的String.Format({0},{1},C,N));
变种的uri = CreateMailToUri(邮寄地址);
uri.Should()NotBeNull();
}

[TestMethod的]
公共无效CreateMailToUriTest13()
{
VAR邮件=新[] {username@mail.com, username2@mail.com};
变种的mailto = mails.Select(WebUtility.UrlEncode).Aggregate((C,N)=>的String.Format({0} {1},C,N));
变种的uri = CreateMailToUri(邮寄地址);
uri.Should()NotBeNull();
}

[TestMethod的]
公共无效CreateMailToUriTest14()
{
VAR邮件=新[] {username@mail.com, username2@mail.com};
变种的mailto = mails.Aggregate((C,N)=>的String.Format({0},{1},C,N));
VAR urlEncodedMailTo = WebUtility.UrlEncode(邮寄地址);
变种的uri = CreateMailToUri(urlEncodedMailTo);
uri.Should()NotBeNull();
}

[TestMethod的]
公共无效CreateMailToUriTest15()
{
VAR邮件=新[] {username@mail.com, username2@mail.com};
变种的mailto = mails.Aggregate((C,N)=>的String.Format({0} {1},C,N));
VAR urlEncodedMailTo = WebUtility.UrlEncode(邮寄地址);
变种的uri = CreateMailToUri(urlEncodedMailTo);
uri.Should()NotBeNull();
}
}

使用Windows键+ R(运行)键入邮寄地址:username@mail.com; username2@mail.com的伟大工程,我只是不能够创建具有多个收件人的Uri对象...



据该至mailto:协议@ MSDN 我应该可以使用多个收件人mailto协议。



语法




至mailto:sAddress [sHeaders]




令牌



<预类=郎无prettyprint-覆盖> sAddress
用分号分隔的一个或多个有效的电子邮件地址。您必须使用Internet安全的字符,如20%的空格字符。
sHeaders
可选。的一个或多个名称值对。第一对应由前缀一个?和任何其他对应由前缀与&。该名称可以是下列字符串之一。

文本显示在邮件的主题行。

文字出现在邮件的正文。被列入CC的消息(抄送)部分
CC
类地址。
BCC
类地址被列入了BCC(密件抄送)邮件的部分。


解决方案

有一个黑客,使用 HyperLinkBut​​ton (对不起,这是一个肮脏的黑客):




  1. 加载一个 hyperlinkbutton 使用 XAmlReader

  2. 检索其的AutomationPeer

  3. 启动点击

      VAR uriString中=电子邮件地址:用户名@ mail.com,USERNAME2 @ mail.com 
    串xamlString =< HyperlinkBut​​ton
    +的xmlns = \http://schemas.microsoft.com/winfx/2006/xaml/presentation\
    + NavigateUri = \+ uriString中+\/>中;
    变种C =(HyperlinkBut​​ton)XamlReader.Load(xamlString);
    新HyperlinkBut​​tonAutomationPeer(C).Invoke();



I am using creating a Windows 8.1 Store App in WinRT.

I am unable to create a new mail with multiple recipients with the mailto uri by separating each email with either comma or semi colon, both gives me the same error.

Invalid URI: The hostname could not be parsed.

the mailto strings looks like this

"mailto:username@mail.com,username2@mail.com"
"mailto:username@mail.com,username2@mail.com,"
"mailto:username@mail.com, username2@mail.com"
"mailto:username@mail.com;username2@mail.com"
"mailto:username@mail.com;username2@mail.com;"
"mailto:username@mail.com; username2@mail.com"

I have tried all these variants an all give me the same error when newing up the uri, like this.

var uri = new Uri(string.Format("mailto:{0}", mails));

I have no idea what I am doing wrong, or in case its not implemented why it wouldn't be?

I created a few unit tests to see if any variations would work, but no..

[TestClass]
public class UriMailToTest
{
    private Uri CreateMailToUri(string mail)
    {
        if (string.IsNullOrEmpty(mail)) throw new ArgumentNullException("mail");

        var uriMailTo = string.Format("mailto:{0}", mail);
        return new Uri(uriMailTo);
    }

    [TestMethod]
    public void CreateMailToUriTest1()
    {
        const string mailto = "username@mail.com";
        var uri = CreateMailToUri(mailto);
        uri.Should().NotBeNull();
    }

    [TestMethod]
    public void CreateMailToUriTest2()
    {
        const string mailto = "username@mail.com,username2@mail.com";
        var uri = CreateMailToUri(mailto);
        uri.Should().NotBeNull();
    }

    [TestMethod]
    public void CreateMailToUriTest3()
    {
        const string mailto = "username@mail.com,username2@mail.com,";
        var uri = CreateMailToUri(mailto);
        uri.Should().NotBeNull();
    }

    [TestMethod]
    public void CreateMailToUriTest4()
    {
        const string mailto = "username@mail.com;username2@mail.com";
        var uri = CreateMailToUri(mailto);
        uri.Should().NotBeNull();
    }

    [TestMethod]
    public void CreateMailToUriTest5()
    {
        const string mailto = "username@mail.com;username2@mail.com;";
        var uri = CreateMailToUri(mailto);
        uri.Should().NotBeNull();
    }

    [TestMethod]
    public void CreateMailToUriTest6()
    {
        const string mailto = "username@mail.com, username2@mail.com";
        var uri = CreateMailToUri(mailto);
        uri.Should().NotBeNull();
    }

    [TestMethod]
    public void CreateMailToUriTest7()
    {
        const string mailto = "username@mail.com; username2@mail.com";
        var uri = CreateMailToUri(mailto);
        uri.Should().NotBeNull();
    }

    [TestMethod]
    public void CreateMailToUriTest8()
    {
        var mails = new[] { "username@mail.com", "username2@mail.com"};
        var mailto = mails.Select(WebUtility.UrlEncode).Aggregate((c, n) => string.Format("{0},{1}", c, n));
        var uri = CreateMailToUri(mailto);
        uri.Should().NotBeNull();
    }

    [TestMethod]
    public void CreateMailToUriTest9()
    {
        var mails = new[] { "username@mail.com", "username2@mail.com" };
        var mailto = mails.Select(WebUtility.UrlEncode).Aggregate((c, n) => string.Format("{0};{1}", c, n));
        var uri = CreateMailToUri(mailto);
        uri.Should().NotBeNull();
    }

    [TestMethod]
    public void CreateMailToUriTest10()
    {
        var mails = new[] { "username@mail.com", "username2@mail.com" };
        var mailto = mails.Aggregate((c, n) => string.Format("{0},{1}", c, n));
        var urlEncodedMailTo = WebUtility.UrlEncode(mailto);
        var uri = CreateMailToUri(urlEncodedMailTo);
        uri.Should().NotBeNull();
    }

    [TestMethod]
    public void CreateMailToUriTest11()
    {
        var mails = new[] { "username@mail.com", "username2@mail.com" };
        var mailto = mails.Aggregate((c, n) => string.Format("{0};{1}", c, n));
        var urlEncodedMailTo = WebUtility.UrlEncode(mailto);
        var uri = CreateMailToUri(urlEncodedMailTo);
        uri.Should().NotBeNull();
    }

    [TestMethod]
    public void CreateMailToUriTest12()
    {
        var mails = new[] { "username@mail.com", "username2@mail.com" };
        var mailto = mails.Select(WebUtility.UrlEncode).Aggregate((c, n) => string.Format("{0}, {1}", c, n));
        var uri = CreateMailToUri(mailto);
        uri.Should().NotBeNull();
    }

    [TestMethod]
    public void CreateMailToUriTest13()
    {
        var mails = new[] { "username@mail.com", "username2@mail.com" };
        var mailto = mails.Select(WebUtility.UrlEncode).Aggregate((c, n) => string.Format("{0}; {1}", c, n));
        var uri = CreateMailToUri(mailto);
        uri.Should().NotBeNull();
    }

    [TestMethod]
    public void CreateMailToUriTest14()
    {
        var mails = new[] { "username@mail.com", "username2@mail.com" };
        var mailto = mails.Aggregate((c, n) => string.Format("{0}, {1}", c, n));
        var urlEncodedMailTo = WebUtility.UrlEncode(mailto);
        var uri = CreateMailToUri(urlEncodedMailTo);
        uri.Should().NotBeNull();
    }

    [TestMethod]
    public void CreateMailToUriTest15()
    {
        var mails = new[] { "username@mail.com", "username2@mail.com" };
        var mailto = mails.Aggregate((c, n) => string.Format("{0}; {1}", c, n));
        var urlEncodedMailTo = WebUtility.UrlEncode(mailto);
        var uri = CreateMailToUri(urlEncodedMailTo);
        uri.Should().NotBeNull();
    }
}

with Windows Key + R (Run) typing in mailto:username@mail.com;username2@mail.com works great, I'm just not able to create an Uri object with multiple recipients...

According to the mailto:Protocol @ msdn i should be able to use the mailto protocol with multiple recipients.

Syntax

mailto:sAddress[sHeaders]

Tokens

sAddress
    One or more valid e-mail addresses separated by a semicolon. You must use Internet-safe characters, such as %20 for the space character.
sHeaders
    Optional. One or more name-value pairs. The first pair should be prefixed by a "?" and any additional pairs should be prefixed by a "&". The name can be one of the following strings.
subject
    Text to appear in the subject line of the message.
body
    Text to appear in the body of the message.
CC
    Addresses to be included in the "cc" (carbon copy) section of the message.
BCC
    Addresses to be included in the "bcc" (blind carbon copy) section of the message.

解决方案

There is a hack, using the HyperLinkButton (sorry, this is a dirty hack) :

  1. Load an hyperlinkbutton using a XAmlReader,
  2. Retrieve its AutomationPeer,
  3. Launch a click

      var uriString = "mailto:username@mail.com,username2@mail.com";
      string xamlString = "<HyperlinkButton "
         + "xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\" " 
         + "NavigateUri=\"" + uriString + "\"/>";
      var c = (HyperlinkButton)XamlReader.Load(xamlString);
      new HyperlinkButtonAutomationPeer(c).Invoke();
    

这篇关于无法创建多个收件人新邮件与邮寄地址URI的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆