使用C#代码检查默认邮件客户端

如何使用C#查找默认邮件客户端? 我检查了一些贴在这里,但它没有帮助我..

我用过这段代码

object mailClient = Microsoft.Win32.Registry.GetValue(@"HKEY_LOCAL_MACHINE\SOFTWARE\Clients\Mail", "", "none"); 

在我的计算机中,两个窗口都安装了邮件和Outlook,而defualt客户端是windows live mail,但是如果我打印mailclient,它将显示defualt邮件客户端作为outlook。

但如果我使用System.Diagnostics.Process.Start("mailto:")那么它将在Windows Live mail中打开,这是正确的。

我需要一种通过C#代码找到defualt客户端的方法…..

注册表项是:

机:
HKEY_CLASSES_ROOT\mailto\shell\open\command

用户:
HKEY_CURRENT_USER\Software\Classes\mailto\shell\open\command

这些键的值是执行的命令行,它们在mailto:之后的mailto:包含%1 。 因此,您可能需要进行一些额外的解析才能获得可执行文件的路径:

例:
"C:\PROGRA~2\MICROS~4\Office14\OUTLOOK.EXE" -c IPM.Note /m "%1"需要成为"C:\PROGRA~2\MICROS~4\Office14\OUTLOOK.EXE"

要打开已填写“收件人”的邮件,请尝试

 string target = "joe.doe@doecontry.dc"; string mailtoCommand = (string) Registry.GetValue(@"HKEY_CURRENT_USER\Software\Classes\mailto\shell\open\command", @"", @"none"); mailtoCommand = mailtoCommand.Replace("\"", string.Empty).Replace("%1", target); string arguments = mailtoCommand.Substring(mailtoCommand.ToLower().IndexOf(@".exe", StringComparison.Ordinal) + 4); string fileName = mailtoCommand.Substring(0, mailtoCommand.Length - arguments.Length); Process.Start(fileName, arguments);