C# SMTP SendAsync not working

本文关键字:working not SendAsync SMTP | 更新日期: 2023-09-27 18:14:09

我在使用SendMailAsync时遇到问题。当我将其更改为普通Send时,它可以正常工作。当我使用SendMailAsync时,我得到一个连接超时,并且没有发送邮件。我是不是设置错了?

编辑:1.我更改了变量名!!!2.确切的错误发生在这里await smtpClient.SendMailAsync(mailMessage);它只是挂起,直到连接超时,我得到了"连接超时"的错误描述。返回的状态码是General Error

  1. 我现在将表单中的sendEmail称为按钮的onClick事件。await unitOfWork.Instance.SendEmail(...)它是onclick事件中的一行代码

    public async Task SendEmail(List<string> notificationList, string emailSubject, string emailMessage)
            {
                var message = new MailMessage()
                {
                    IsBodyHtml = true,
                    BodyEncoding = System.Text.Encoding.UTF8,
                    Subject = emailSubject,
                    From = new MailAddress(FromEmailAddress),
                    Body = emailMessage
                };
                 try
                {
                    foreach (var emailAddress in notificationList)
                    {
                        message.To.Add(emailAddress);
                    }
                    var people = string.Join(Environment.NewLine, message.To);
                    MessageBox.Show(@"from: " + unitOfWork.CurrentSystemUser.Person.Email + "To: " + people);
                    await SendMessage(message);
                }
                catch (Exception E)
                {
                 ...
                }
                finally
                {
                  ...
                }
            }
        private async Task SendMessage(MailMessage mailMessage)
        {
            if (!CanSendSmtpEmail) return;
            await SendSmtpMail(mailMessage);
        }
        public async Task SendSmtpMail(MailMessage mailMessage)
        {
            SmtpClient smtpClient = new SmtpClient(SmtpClientHost, int.Parse(SmtpClientPort));
            smtpClient.SendCompleted += (s, e) => {
                smtpClient.Dispose();
                mailMessage.Dispose();
            };
            await smtpClient.SendMailAsync(mailMessage);
            //smtpClient.Send(mailMessage) works fine
        }
    

C# SMTP SendAsync not working

增加SmtpClient.Timeout不会起作用,因为它只适用于同步发送方法(请参阅此处(。

当我用GMail测试你的代码时,你的代码对我来说很好(就像这里解释的那样(。你能用GMail或其他SMTP服务器试试吗?我想也许你的SMTP服务器"表现得很滑稽"。也许你可以告诉我们你是如何调用SendEmail方法的?

旁注:

  1. 你的问题真的很有趣(至少对我来说(,但由于你编写代码的方式(属性和方法同名(,人们对它投了反对票(你应该解决这个问题(
  2. 另外,我能看到你得到的全部例外吗?(btw:catch(异常E(-不好,使用小写"E"作为异常参数名称(
  3. 确保您确切地了解它的异步性