当mailto协议处理程序不存在时的故障转移

时间:2015-03-17 10:42:59

标签: c# .net mailto linklabel

我在标签中遇到了一个小问题。

事实上,我添加了一个包含mailto链接的标签,并且以原生方式尝试使用用户定义的默认程序打开它。

但实际上,当没有此协议的默认程序时,它不起作用并引发Win32Exception

所以我强迫它打开浏览器,但它也不起作用......

以下是我的代码示例:

private void linkLabel1_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
{
    // Specify that the link was visited.
    this.linkLabelContactEmail.LinkVisited = true;
    try
    {
        // Open the default program to send an email.
        System.Diagnostics.Process.Start("mailto:contact@mysite.fr");
    }
    catch (Win32Exception)
    {
        // Force opening in a browser
        System.Diagnostics.Process.Start("http://mailto:contact@mysite.fr");
    }
}

但它不起作用:/(如果默认程序链接到该协议,它就有效)

有谁知道我怎么能解决这个问题? 像强制添加默认协议到mailto链接?


编辑:

我试过这个,效果很好!但是它仍然没有处理linux浏览器:/而且它在Unix操作系统下不是.exe,我应该怎么做呢? (我知道firefox是默认安装的,它会被处理吗?)

private void linkLabel1_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
{
    // Specify that the link was visited.
    this.linkLabelContactEmail.LinkVisited = true;

    try
    {
        // Open the default program to send an email.
        System.Diagnostics.Process.Start("mailto:contact@mysite.fr");
    }
    catch (Win32Exception)
    {
        try
        {
            // Force opening in Firefox
            System.Diagnostics.Process.Start("firefox", "mailto:contact@mysite.fr");
        }
        catch (Win32Exception)
        {
            try
            {
                // Force opening in IE
                System.Diagnostics.Process.Start("chrome", "mailto:contact@mysite.fr");
            }
            catch (Win32Exception)
            {
                try
                {
                    // Force opening in IE
                    System.Diagnostics.Process.Start("iexplore", "mailto:contact@mysite.fr");
                }
                catch (Win32Exception)
                {
                    MessageBox.Show(
                        "Vous n'avez aucun programme par défaut de configuré pour envoyer un mail, ni aucun des 3 navigateurs (Firefox, Chrome, Internet Explorer). Nous ne pouvons donc vous aidez à envoyer ce mail...",
                        "Erreur à l'envoi du mail",
                        MessageBoxButtons.OK,
                        MessageBoxIcon.Warning,
                        MessageBoxDefaultButton.Button1
                    );
                }
            }
        }
    }
}

1 个答案:

答案 0 :(得分:0)

您可以简单地启动浏览器,而不是添加http://协议前缀。您的网址语法无效,我怀疑它是否有效(Chrome不确定,只是对其进行了测试)。

System.Diagnostics.Process.Start("iexplore", "mailto:contact@mysite.fr");

此代码打开Internet Explorer以执行mailto: