Дублированное электронное письмо, отправленное отправителю и получателю при попытке отправки нескольких электронных писем одновременно

#c# #asp.net #gmail

#c# #asp.net #gmail

Вопрос:

Я пытаюсь отправить все электронные письма одновременно с помощью службы gmail, электронное письмо было отправлено успешно. Однако и отправитель, и получатель получают одно и то же электронное письмо.

Когда я пытаюсь отправить одно электронное письмо (не несколько), только получатель, который получает электронное письмо (что правильно).

Почему это так?

Вот код, который я сейчас использую:

Допустим, в пользовательском хранилище есть 11 пользователей, которым требуется система для отправки электронного письма.

  1. Получатель получает только одно электронное письмо. <— Правильно
  2. Несколько электронных писем, полученных обеими сторонами (отправителем и получателем) <— Неверно

Класс отправки электронной почты:

 IEnumerable<UserRepository> multipleModels;
UserRepository model;

protected void SingleEmail_Click(object sender, EventArgs e)
{
    SendSingleEmail(model);
}

protected void MultipleEmail_Click(object sender, EventArgs e)
{
    SendMultipleEmail(multipleModels);
}

private void SendSingleEmail(UserRepository repository)
{
    string email = File.ReadAllText(HttpContext.Current.Server.MapPath(string.Format("~/Email/Languages/{0}/Email.html", repository.EmailLanguage)));
    UserManager.SendSingleEmail(repository, email);
}

private void SendMultipleEmail(IEnumerable<UserRepository> repository)
{
    foreach (var models in repository)
    {
        string email = File.ReadAllText(HttpContext.Current.Server.MapPath(string.Format("~/Email/Languages/{0}/Email.html", models.EmailLanguage)));
        UserManager.SendMultipleEmail(models, email);
    }
}
  

Код для отправки электронного письма в классе UserManager:

 public static void SendSingleEmail(UserRepository repository)
{
    string toEmail = ConfigurationManager.AppSettings["DevEmail"].ToString();
    string toName = "Email";
    string subject = "Single Subject Email";   
    EmailHelper.SendEmail(0, repository.Email, repository.Name, toEmail, toName, subject, repository.Description);
}

public static void SendMultipleEmail(UserRepository repository, string description)
{
    string fromEmail = ConfigurationManager.AppSettings["DevEmail"].ToString();
    string fromName = "Nies";
    string subject = "Multiple Subject Email";
    EmailHelper.SendEmail(1, fromEmail, fromName, repository.Email, repository.Name, subject, description);
}
  

Класс EmailHelper:

 public static void SendEmail(int id, string fromEmail, string fromName, string toEmail, string toName, string subject, string description)
    {
        var fromAddress = new MailAddress(fromEmail, fromName);
        var toAddress = new MailAddress(toEmail, toName);
        string address = (id == 0 ? toAddress.Address : fromAddress.Address);
        var smtp = new SmtpClient
        {
            Host = ConfigurationManager.AppSettings["Mail"].ToString(),
            Port = 587,
            EnableSsl = true,
            DeliveryMethod = SmtpDeliveryMethod.Network,
            UseDefaultCredentials = false,
            Credentials = new NetworkCredential(address, ConfigurationManager.AppSettings["DevPassword"].ToString())
        };
        using (var message = new MailMessage(fromAddress, toAddress)
        {
            Subject = subject,
            Body = description,
            Priority = MailPriority.High,
            IsBodyHtml = true
        })    
        {
            smtp.Send(message);
        }
    }
  

Любая помощь будет оценена.

Комментарии:

1. Что показала отладка?

2. Почему sendsingle Mail и SendMultipleEmail отличаются внутри? Я бы пересмотрел дизайн. Имейте один IEnumerable из UserRepo и один метод, который отвечает за отправку электронного письма. Позвольте ему перебирать репозиторий и отправлять, сколько их есть.