4

Visual Studioを使用してASP.NETプロジェクトから電子メールを送信するのは非常に高速です(1秒で完了します)が、同じマシン上のIIS 7で公開すると、50秒以上かかります。誰かが以前にこの速度の低下に遭遇したことがありますか?C#コードと設定をweb.configに貼り付けました。どうもありがとうございます。

public static bool EnviarMail(String eOrigen, String eDestino, String asunto, String cueMensaje)
    {
        Boolean EstadoEnvio;
        MailMessage eMail = new MailMessage();
        eMail.From = new MailAddress(eOrigen);
        eMail.To.Add(new MailAddress(eDestino));
        eMail.Subject = asunto;
        eMail.IsBodyHtml = true;
        cueMensaje = cueMensaje.Replace("\r\n", "<BR>");
        eMail.Body = cueMensaje;
        eMail.Priority = MailPriority.Normal;

        SmtpClient clienteSMTP = new SmtpClient();
        try
        {   
            clienteSMTP.Send(eMail);
            EstadoEnvio = true;
        }
        catch 
        {
            EstadoEnvio = false;
        }
        return EstadoEnvio;            
    }

そして私のweb.configで:

    <mailSettings>
        <smtp from="iso@hmoore.com.ar">
            <network host="174.120.190.6" port="25" userName="iso@hmoore.com.ar" password="-----" defaultCredentials="true"/>
        </smtp>
    </mailSettings>
4

1 に答える 1

1

ASP.NET アプリケーションで電子メールを送信するときに、電子メールが送信されるのを待つためだけにユーザー エクスペリエンスを遅くしたくない場合があります。以下のコード サンプルは、System.Net.Mail.MailMessage を非同期的に送信して、セカンダリ スレッドが電子メールを送信している間、現在のスレッドを続行できるようにする方法を示しています。

public static void SendEmail(System.Net.Mail.MailMessage m)
{
    SendEmail(m, true);
}



public static void SendEmail(System.Net.Mail.MailMessage m, Boolean Async)
{
    System.Net.Mail.SmtpClient smtpClient = null;
    smtpClient = new System.Net.Mail.SmtpClient("localhost");    
    if (Async)
    {
        SendEmailDelegate sd = new SendEmailDelegate(smtpClient.Send);
        AsyncCallback cb = new AsyncCallback(SendEmailResponse);
        sd.BeginInvoke(m, cb, sd);
    }
    else
    {
        smtpClient.Send(m);
    }
}

private delegate void SendEmailDelegate(System.Net.Mail.MailMessage m);
private static void SendEmailResponse(IAsyncResult ar)
{
    SendEmailDelegate sd = (SendEmailDelegate)(ar.AsyncState);

    sd.EndInvoke(ar);
}

これを使用するには、オブジェクトを指定してSendEmail()メソッドを呼び出すだけです。System.Net.Mail.MailMessage

于 2013-01-18T12:46:26.427 に答える