C#SMTP SendAsync无法正常工作

时间:2016-10-21 17:19:48

标签: c# smtp

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

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

  1. 我现在从一个按钮的onClick事件调用sendEmail。 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
        }
    

1 个答案:

答案 0 :(得分:1)

增加SmtpClient.Timeout不会起作用,因为它只适用于同步Send方法(参见here)。

当我使用GMail进行测试时,您的代码对我来说运行正常(如解释here)您可以尝试使用GMail或其他SMTP服务器吗?我想也许你的SMTP服务器是&#34;表现得很有趣&#34;。也许你可以告诉我们你是如何调用SendEmail方法的?

旁注:

  1. 你的问题非常有趣(至少对我来说)但是由于你编写代码的方式(属性与方法同名),人们已经对它进行了投票(你应该修复它)。
  2. 另外,我能看到你得到的完整例外情况吗? (顺便说一句:catch(例外E) - 不好,使用小写&#34; e&#34;作为异常参数名称)。
  3. 确保您完全理解how asynchronous it really is