提问人:hagru 提问时间:10/18/2023 最后编辑:Yehor Androsovhagru 更新时间:10/20/2023 访问量:44
SmtpClient.Send() 在发送几封邮件后超时
SmtpClient.Send() times out after sending a couple of mails
问:
我使用 RazorPages 为狩猎组织制作了一个网上商店。每个星期四,他们都会进行抽签,用户在周六或周日预订的每个地形都会进入抽奖。每个用户可以赢得一个地形,并且每个地形每天只有一个赢家。
我设置了程序,以便每个中奖者都会收到一封电子邮件,告诉他们他们在彩票中赢得了哪个地形。用户多于地形,所以会有人没有赢得任何地形。我在每个日期收集每个地形的所有赢家和输家,并将它们放在赢家和输家列表中。然后,我从输家列表中删除每个赢家,这样用户就只能收到通知他们获胜的邮件,或者收到通知他们输钱的邮件。
获奖者的邮件很顺利,每个人都收到了他们的邮件。
然后,我运行此代码向每个失败者发送一封邮件:
public void SendLoserMails(List<string> distinctLosers){
foreach (string loserMail in distinctLosers)
{
_mailSender.SetRecipient(loserMail);
_mailSender.SetSubject("Du har dessverre ikke blitt tildelt jakt!");
_mailSender.SetContents("<html><body> <h1>Jaktdag ikke tildelt.</h1>" +
"Du har dessverre ikke blitt tildelt noen jaktdager i trekningen " + DateTime.Today.ToString("dd.MM.yyyy")
+ "<br /> <br />"
+ "Jaktkortet ditt vil bli lagt tilbake på profilen din og kan brukes ved neste bestilling"
+ "<br /> <br />"
+ "Med vennlig hilsen <br/> - Telemark Jeger- og Fiskerforening <br />" + loserMail
+ "</body></html>");
_mailSender.SendMail();
}
}
每次尝试时,我都会经历 2 次迭代,这意味着前两次收到一封邮件,然后操作超时,其余的失败者永远不会收到他们的邮件,因为每次都超时。
这是我使用的 MailSender 类:
public class MailSender
{
private string Recipient;
private string Subject;
private string Contents;
private string SenderName;
private string SenderMail;
private string SmtpUsername;
private string SmtpPassword;
private string SmtpMail;
private SmtpClient smtpClient;
public MailSender() { }
public void SetRecipient(string recipient) => Recipient = recipient;
public void SetSubject(string subject) => Subject = subject;
public void SetContents(string contents) => Contents = contents;
public void SetSecrets(IConfiguration config)
{
SenderName = config.GetValue<string>("SMTP_SENDER_NAME");
SenderMail = config.GetValue<string>("SMTP_SENDER_MAIL");
SmtpUsername = config.GetValue<string>("SMTP_CRED_USERNAME");
SmtpPassword = config.GetValue<string>("SMTP_CRED_PASSWORD");
SmtpMail = config.GetValue<string>("SMTP_CRED_MAIL");
}
public void SendMail()
{
if (Recipient == default || Subject == default || Contents == default)
return;
try
{
var newMail = new MailMessage();
smtpClient = new SmtpClient(SmtpMail);
newMail.From = new MailAddress(SenderMail, SenderName);
newMail.To.Add(Recipient);
newMail.Subject = Subject;
newMail.IsBodyHtml = true;
newMail.Body = Contents;
smtpClient.EnableSsl = false;
smtpClient.Port = 587;
smtpClient.Timeout = 100000;
smtpClient.Credentials = new NetworkCredential(
SmtpUsername,
SmtpPassword);
smtpClient.Send(newMail);
}
catch (Exception ex)
{
Console.WriteLine("Error - " + ex.Message);
}
}
}
有什么原因为什么在向失败者发送了几封电子邮件后总是超时?
请记住,所有获奖者每次都会收到他们的电子邮件。因此,MailSender在一定程度上可以工作。
答: 暂无答案
评论
SmtpClient
MailMessage
smtpClient.Dispose()
smtpClient.Send()
smtpClient.Dispose()
SendMail
smtpClient
MailSender