У меня возникла ошибка, возникающая спорадически. Когда я столкнулся с этой ошибкой, если я попробую еще раз, отправит электронное письмо. Я не могу достоверно воспроизвести ошибку, но она достаточно часто бывает достаточно, чтобы быть проблемой.System.Net.Mail.SmtpException: таймаут команды SMTP - закрытие соединения
System.Net.Mail.SmtpException: обслуживание недоступно, закрытие канала передачи. Ответ сервера был: [Servername]: Команда SMTP таймаут - закрытие соединения
Трассировка стека:
на System.Net.Mail.MailCommand.CheckResponse (SmtpStatusCode StatusCode, ответ строки) в System.Net.Mail.MailCommand.Send (SmtpConnection conn, Byte [] command, String from) в System.Net.Mail.SmtpTransport.SendMail (отправитель MailAddress, получатели MailAddressCollection, исключение String deliveryNotify, исключение SmtpFailedRecipientException &) в System.Net. Mail.SmtpClient.Send (сообщение MailMessage)
Вот код, о котором идет речь. Он использует шаблон HTML (база данных, управляемая резервной копией по умолчанию для веб-url) для ввода значений и создания электронной почты html.
public void AccountActivationEmail(Common.Request.Email.AccountActivation request)
{
var profile = profileRepository.GetOne(new ProfileByUsername(request.Username, request.SiteId));
var options = siteService.GetOptions(new GatewayOptionsRequest()
{
SiteId = request.SiteId
});
var site = options.Site;
ExpiringHMAC hmac = new ExpiringHMAC(request.ExpireOn, new string[] { request.AccountId.ToString(), request.AccountKey.ToString(), request.Username });
Dictionary<string, string> data = new Dictionary<string, string>();
data.Add("{{logourl}}", String.IsNullOrEmpty(options.FullyHostedGateway.LogoUrl) ? UrlHelper.ConvertRelativeToAbsolute("/content/images/spacer.png") : options.FullyHostedGateway.LogoUrl);
data.Add("{{name}}", profile.Name.DisplayName);
data.Add("{{sitename}}", site.Name.DisplayName);
data.Add("{{activationlink}}", String.Format(ActivationUrlFormat, options.UrlFriendlyName, Encryption.EncryptQueryString(request.Username), hmac.ToString()));
MailDefinition template = new MailDefinition();
MailMessage message = null;
var emailTemplate = options.GetEmailTemplate(EmailTemplateType.ActivateAccount);
string defaultSubject = "Activate Account";
bool hasTemplate = false;
if (emailTemplate != null)
{
hasTemplate = !String.IsNullOrEmpty(emailTemplate.Template);
}
if (!hasTemplate)
{
template.BodyFileName = activationDefaultTemplateUrl;
message = template.CreateMailMessage(request.EmailAddress, data, new System.Web.UI.LiteralControl());
message.IsBodyHtml = true;
message.Subject = defaultSubject;
}
else
{
message = template.CreateMailMessage(request.EmailAddress, data, emailTemplate.Template, new System.Web.UI.LiteralControl());
message.IsBodyHtml = emailTemplate.IsHtml;
if (!String.IsNullOrEmpty(emailTemplate.Subject))
message.Subject = emailTemplate.Subject;
else
message.Subject = defaultSubject;
}
if (options.ContactDetails != null)
{
if (!String.IsNullOrEmpty(options.ContactDetails.EmailAddress))
message.From = new MailAddress(options.ContactDetails.EmailAddress);
}
SmtpClient client = new SmtpClient();
client.Send(message);
}
Этот код является частью класса, который генерируется как одноэлементный, с использованием Structuremap. Я думал, может быть, это может вызвать проблему, но каждый раз, когда вызывается метод, создается новый объект SmtpClient, который должен устранить проблемы, которые я видел о том, как использовать одно и то же соединение для отправки нескольких сообщений электронной почты.
У нас нет ничего, что блокировало бы или ограничивало бы соединение, что является официальной позицией, на которой наш хостинг электронной почты принимает эту проблему. Я хочу посмотреть, есть ли способ сделать это лучше, поэтому я не получаю эти ошибки.
EDIT:
У меня есть мой почтовый сервер определен в моем web.config. Я подтвердил с моим почтовым хостингом, что мои настройки верны.
<system.net>
<mailSettings>
<smtp deliveryMethod="Network" from="[email protected]">
<network host="smtp.emailhost.com" userName="[email protected]"
password="myPassword1" port="2500" />
</smtp>
</mailSettings>
</system.net>
Мы столкнулись с таким же вопросом, и мы используем AWS SMTP, но все то же проблему, после использования этого решения. Не уверен, что делать с этим. Есть ли другие способы избавиться ...? – sbmandav
@sbmandav Я также испытываю эту проблему с AWS SMTP, и я также могу проверить, что это решение не помогло. – Mike
Я также испытываю ту же проблему с AWS SMTP. Кто-нибудь видел разрешение для этого специально с AWS? – agarcian