SendEmail方法不起作用

Rod*_*cia 1 c# sharepoint sharepoint-2007

我正在编写一个应用程序,它在整个应用程序的生命周期中发送大量电子邮件.

用户抱怨该应用程序确实没有响应并且通常很慢.我唯一可以提出的原因是发送的电子邮件很重.所以我认为我可以通过在不同的线程中发送电子邮件来解决问题!

我在SPUtility助手类中使用SendEmail方法.现在,我有一个看起来像这样的方法:

public static void SendEmail(SPWeb web, string to, string subject, string body)
{

    //Some logic goes here
    System.Threading.ThreadPool.QueueUserWorkItem(o =>
    {
        SPUtility.SendEmail(web, false, false, to, subject, body, false);
    });
}
Run Code Online (Sandbox Code Playgroud)

此方法在DLL中定义,并且它是从许多不同的webpart调用的.

但这不起作用.如果我删除了QueueUserWorkItem位,并让它在一个线程之外发送电子邮件,它就像一个魅力,但再次,它很慢.

我怎么解决这个问题?

Mik*_*keM 5

我怀疑你最好使用MailMessage Class(System.Net.Mail)

MailMessage mess = 
    new MailMessage(
        SPContext.Current.Site.WebApplication.OutboundMailReplyToAddress, 
        sendTo, 
        subject, 
        message);  
mess.IsBodyHtml = true;  
SmtpClient smtp = 
    new SmtpClient(
        SPContext.Current.Site.WebApplication.OutboundMailServiceInstance.Server.Address);  
smtp.Send(mess);
Run Code Online (Sandbox Code Playgroud)

此MSDN帖子与您的情况类似,使用SPUtility.SendEmail发送电子邮件的速度很慢


小智 5

还有一个选项可以做这样的事情:

public static void SendEmail(SPWeb web, string to, string subject, string body)
{
    var siteId = Web.Site.ID;

    System.Threading.ThreadPool.QueueUserWorkItem(o =>
    {
        using (var site = new SPSite(siteId))
        using (var myWeb = site.OpenWeb())
        {
            SPUtility.SendEmail(myWeb, false, false, to, subject, body);
        }
    });
}
Run Code Online (Sandbox Code Playgroud)

也许某人会感兴趣.