У нас есть приложение, которое работает на компьютере с Windows Server 2008. Он отправляет электронные письма, используя учетную запись smtp relay office365. Однако не все электронные письма успешно отправляются. Мы случайным образом получаем эти два исключения для электронных писем, отправляемых по вызову smtp.Send:
- System.Net.Mail.SmtpFailedRecipientsException: невозможно отправить всем получателям. ---> System.Net.Mail.SmtpFailedRecipientException: Почтовый ящик недоступен. Ответ сервера был: 5.7.64 TenantAttribution; Доступ к передаче закрыт
- System.Net.Mail.SmtpFailedRecipientException: недостаточно системного хранилища. Ответ сервера был: 4.5.3 Слишком много получателей
Пока нам не удалось выяснить, почему это происходит. Любые идеи приветствуются.
Код электронной почты использует пространство имен System.Net.Mail — .Net framework 4.0. Мы передаем имя пользователя и пароль для NetworkCredential.
public void Send(string from, string[] to, string[] cc, string[] bcc, string subject, string body, string[] attachmentArr, Boolean isBodyHtml, string smtpServerName, int port = 25, bool enableSsl = true, string userName = null, string password = null, string domain = null, int timeoutMilliSec = 100000)
{
MailMessage objEmail = new MailMessage();
try
{
foreach (string toItem in to)
{
objEmail.To.Add(toItem);
}
if (cc != null)
{
foreach (string toItem in cc)
{
objEmail.CC.Add(toItem);
}
}
if (bcc != null)
{
foreach (string toItem in bcc)
{
objEmail.Bcc.Add(toItem);
}
}
objEmail.From = new MailAddress(from);
objEmail.Subject = subject;
objEmail.Body = body;
objEmail.IsBodyHtml = isBodyHtml;
objEmail.Priority = MailPriority.High;
if (attachmentArr != null)
{
foreach (String s1 in attachmentArr)
{
objEmail.Attachments.Add(new Attachment(s1));
}
}
using (SmtpClient smtp = new SmtpClient(smtpServerName))
{
if (string.IsNullOrEmpty(userName) == false && string.IsNullOrEmpty(password) == false)
{
NetworkCredential credential = (string.IsNullOrEmpty(domain)) ? new NetworkCredential(userName, password) : new NetworkCredential(userName, password, domain);
smtp.Credentials = credential;
}
smtp.Timeout = timeoutMilliSec;
smtp.Port = port;
smtp.EnableSsl = enableSsl;
smtp.Send(objEmail);
}
}
catch (Exception ex)
{
throw ex;
}
finally
{
if (attachmentArr != null && objEmail.Attachments != null)
{
foreach (Attachment a1 in objEmail.Attachments)
{
a1.Dispose();
}
}
}
}