crm plugin smtpclient = new smtpclient()获取类型'System.Net.Mail.SmtpPermission

时间:2016-05-26 14:52:14

标签: c# email dynamic plugins crm

我正在尝试创建一个通过SMTP发送电子邮件的插件。当代码到达SmtpClient client = new SmtpClient(sever);行时,我收到异常。例外是:

  

请求获得类型'System.Net.Mail.SmtpPermission,System,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089'的权限失败。

我测试了SMTP发送电子邮件,它运行正常。 测试代码是:

private void button1_Click(object sender, EventArgs e)
{
    string server = "smtp.mail.ex.com";
    string to = "ex@ex.com";
    string from = "donotreply@ex.com";
    MailMessage message = new MailMessage(from, to);
    message.Subject = "Using the new SMTP client.";
    message.Body = @"Using this new feature, you can send an e-mail message from an application very easily.";
    SmtpClient client = new SmtpClient(server);
    client.UseDefaultCredentials = false ;

    try
    {
        client.Send(message);
        MessageBox.Show("mail Send");
    }
    catch (Exception ex)
    {
        Console.WriteLine("Exception caught in CreateTestMessage2(): {0}",
                    ex.ToString());
    } 
}             

这个运行正常,我可以收到电子邮件。为什么它在CRM插件中运行时有安全请求?

2 个答案:

答案 0 :(得分:0)

您有可能遇到CRM沙盒行为。

  

在这个孤立的环境中,也称为沙箱,插件或   自定义活动可以充分利用Microsoft的强大功能   Dynamics CRM SDK用于访问组织Web服务。 访问   文件系统,系统事件日志,某些网络协议,   注册表,在沙箱中阻止更多

如果您在内部运行,可以尝试在沙箱外注册插件(插件注册工具中的一个选项)。

如果不能在CRM中创建电子邮件记录,并使用现成的行为来发送电子邮件。

Plug-in isolation, trusts, and statistics

答案 1 :(得分:0)

Hu Lydia,在这种情况下,您可以做的就是移动代码将电子邮件发送到Web服务,然后从您的插件调用该Web服务即使插件已在沙箱中注册也应该有效。希望这是有道理的。