1

私は新しい ASP.NET 開発者で、管理者/システムがユーザーに電子メールを送信できるプロジェクトに取り組んでいます。システムがメールを送信するまで管理者を待たせたくないので、SendAsync メソッドを使用する予定です。

ただし、非常に奇妙なエラーが発生します。

「SmtpExecption がキャッチされました: メールの送信に失敗しました。」

解決できなかったこと。

参考までに、私は .NET Framework 4 を使用しています。

protected void btnSend_Click(object sender, EventArgs e)
    {
    try
            {
                Mailer mail = new Mailer();
                string senderE = ConfigurationManager.AppSettings["EmailID"].ToString();
                string senderName = "Test User"
                string recipientName = "TestSender";
                string subject = txtSubject.Text;
                string body = txtMessage.Text;
                mail.SendAsync(senderE, senderName, recipient, recipientName, subject, body);

                lblInfo.Text = "sent successfully :)";
                Response.Redirect("Test.aspx");
            }
            catch
            {
                lblInfo.Text = "Error!!!";
            }}

カスタム Mailer クラスの SendAsync メソッドのコードは次のとおりです。

    public void SendAsync(string sender, string senderName, string recipient, string recipientName, string subject, string body)
        {
            var message = new MailMessage()
            {
                From = new MailAddress(sender, senderName),
                Subject = subject,
                Body = body,
                IsBodyHtml = true
            };
            message.To.Add(new MailAddress(recipient, recipientName));

            try
            {
                var client = new SmtpClient();
                client.SendCompleted += new SendCompletedEventHandler(MailDeliveryComplete);
                string userState = "Test";
                client.SendAsync(message, userState);
            }
            catch (Exception ex)
            {
                //handle exeption
                throw ex;
            }
            finally
            {
                //clean up.
                message.Dispose();
            }
        }

public static void MailDeliveryComplete(object sender, AsyncCompletedEventArgs e)
    {
        string message = "";
        // Get the unique identifier for this asynchronous operation.
        MailMessage mail = e.UserState as MailMessage;

        if (e.Error != null)
        {
            //handle error
            message = "Error " + e.Error.ToString() + " occurred";
        }
        else if (e.Cancelled)
        {
            //handle cancelled
            message = "Send canceled for mail with subject " + mail.ToString();
        }
        else
        {
            //handle sent email
            message = "Mail sent successfully";
        }

    }

どうすれば修正できますか?

更新#1:

ところで、すべての SMTP 構成を Web.Config ファイルに保存しています。設定は次のとおりです。

<system.net>
    <mailSettings>
      <smtp from="My Gmail Account" deliveryMethod="Network">
        <network enableSsl="true" host="smtp.gmail.com" port="587" userName="Username" password="Password" defaultCredentials="false"/>
      </smtp>
    </mailSettings>
  </system.net>

更新 #2: さまざまな提案を試した後、Async=True を Page ディレクティブに追加したところ、次のような新しいエラー メッセージが表示されました。

非同期操作がまだ保留中に、非同期モジュールまたはハンドラーが完了しました。

コードをデバッグしたところ、今回はデバッガーが MailDeliveryMethod 内に入り、次のブロックからこのエラーがスローされました。

if (e.Error != null)
        {
            //handle error
            message = "Error " + e.Error.ToString() + " occurred";
        }

この種のエラーが発生する理由について何か考えはありますか?

4

0 に答える 0