SPUtility.SendEmail() 总是返回 false。

4

我有一个应用程序,它会根据之前的级别批准情况为每个级别创建任务表单。在创建每个任务时,我必须向参与任务的用户发送电子邮件。为此,我使用SPUtility.SendEmail()方法。但不幸的是,迄今为止它没有起作用。调试器成功通过SendEmail方法而没有任何异常,但值始终为false。SMTP服务器适用于SP应用程序以外的应用程序。我的代码如下所示。

SPSecurity.RunWithElevatedPrivileges(delegate()
        {
            using (SPSite spSite = new SPSite(SiteURL))
            {
                using (SPWeb spWeb = spSite.OpenWeb())
                {
                    headers = new StringDictionary();
                    headers.Add("to", To);
                    headers.Add("from", From);
                    headers.Add("cc", CC);
                    headers.Add("bcc", BCC);
                    if (Priority.Equals("High"))
                    {
                        headers.Add("X-Priority", "1 (Highest)");
                        headers.Add("X-MSMail-Priority", "High");
                        headers.Add("Importance", "High");
                    }
                    headers.Add("subject", Subject);
                    headers.Add("content-type", "text/html");
                    Status = SPUtility.SendEmail(spWeb, true, true, To, Subject, Body);
                }
            }
        });

请帮我解决这个问题。欢迎各种建议。提前感谢。


你在SharePoint管理员中设置了外发电子邮件SMTP吗? - user3373870
@user3373870:是的,我做了。 - MAC
当你调试代码时,看看这个会给你什么结果。 当然,你需要将(web)更改为你的网站。 var IsEmailServerSet = SPUtility.IsEmailServerSet(web); - user3373870
@user3373870:IsEmailServerSet 正在返回 true。 - MAC
@MAC 你找到解决方案了吗? - Mahmoud Farahat
2个回答

0

看起来您正在使用错误的方法签名。您正在设置头文件作为StringDictionary,但是您正在使用不使用这些头文件的SPUtility.SendEmail()重载。 请尝试使用以下替代方法:

SPSecurity.RunWithElevatedPrivileges(delegate()
        {
            using (SPSite spSite = new SPSite(SiteURL))
            {
                using (SPWeb spWeb = spSite.OpenWeb())
                {
                    headers = new StringDictionary();
                    headers.Add("to", To);
                    headers.Add("from", From);
                    headers.Add("cc", CC);
                    headers.Add("bcc", BCC);
                    if (Priority.Equals("High"))
                    {
                        headers.Add("X-Priority", "1 (Highest)");
                        headers.Add("X-MSMail-Priority", "High");
                        headers.Add("Importance", "High");
                    }
                    headers.Add("subject", Subject);
                    headers.Add("content-type", "text/html");
                    Status = SPUtility.SendEmail(spWeb, headers, Body);
                }
            }
        });

0

我几分钟前遇到了同样的问题。 你可能有一个与smtp服务器RELAY相关的问题。

试试这个:

  1. 打开IIS 6。
  2. 进入SMTP虚拟服务器(打开属性)
  3. 选项卡常规:在下拉菜单中选择服务器的IP地址
  4. 选项卡访问

    4.1 在访问控制中确保启用匿名访问

    4.2 在中继限制中添加IP:127.0.0.1和服务器的IP地址

  5. 选项卡传递:点击“Outbound Connections”按钮,设置端口为587

就是这样。 希望对你有帮助。


没错!令人惊讶的是,“Internet Information Services (IIS) Manager” 没有用。当我启动了“Internet Information Services (IIS) 6.0 Manager”,并点击“本地计算机”时,我发现 [SMTP Virtual Server #1] 处于“停止”状态!很可能是因为上次重启 IIS 以来没有重新启动。 - jumxozizi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接