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
-
我现在将表单中的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 }
增加SmtpClient.Timeout不会起作用,因为它只适用于同步发送方法(请参阅此处(。
当我用GMail测试你的代码时,你的代码对我来说很好(就像这里解释的那样(。你能用GMail或其他SMTP服务器试试吗?我想也许你的SMTP服务器"表现得很滑稽"。也许你可以告诉我们你是如何调用SendEmail方法的?
旁注:
- 你的问题真的很有趣(至少对我来说(,但由于你编写代码的方式(属性和方法同名(,人们对它投了反对票(你应该解决这个问题(
- 另外,我能看到你得到的全部例外吗?(btw:catch(异常E(-不好,使用小写"E"作为异常参数名称(
- 确保您确切地了解它的异步性