将通知邮件发送给起诉SMTP的多个用户,每个用户都有不同的消息

时间:2016-02-22 15:32:48

标签: c# smtp

我必须向收件人中的一组用户发送通知,并且每个用户都有一个不同的邮件正文,该邮件正文存储在另一个数组中。 当我尝试使用多次调用SMTP.send()将通知发送给每个用户(我尝试测试2个用户)时,逐个使用各自的消息体,我得到Exception就像 " {"连接尝试失败,因为连接方在一段时间后没有正确响应,或者建立的连接失败,因为连接的主机未能响应10.1.11.16:25"}" ;

如果在单个SMTP.send调用我所拥有的&#39 ;;'分隔的收件人和相同的邮件正文。 我该如何解决它。

控制器代码以数组形式发送用户数组和消息。

string[] emailBodyList = FormatedEmail.ToArray(); 
string[] emailIdList = emailIDs.ToArray(); DMS.Common.Encyptor.NotificationSend(FromEmail, ToEmail, CCEmail, BCCEmail, model.MailSubject, emailBodyList, emailIdList);

在Encryptor.cs中使用SMTP方法:

public static void NotificationSend(string FromEmail, string ToEmail, string CCEmail, string BCCEmail, string EmailSubject, string[] EmailBody = null, string[] emailID =null)
{
    for(int i = 0; i < EmailBody.Length ; i++)
    {
        string notificationBody = EmailBody[i];
        string notificationTo = emailID[i];
        EmailSend(FromEmail, notificationTo, null, null, EmailSubject, notificationBody);

    }
}

public static void EmailSend(string FromEmail, string ToEmail, string           CCEmail, string BCCEmail, string EmailSubject, string EmailBody= null, string emailID = null)
{
    var email = new MailMessage();

    email.From = new MailAddress(FromEmail);

    string[] toemails = ToEmail.Split(';');
    foreach (string str in toemails)
    {
        if (!String.IsNullOrEmpty(str) && str.Contains('@'))
        {
            email.To.Add(new MailAddress(str.TrimEnd(new char[] { ',' })));
        }
    }

    //email.Headers.Add("Reply-To", "saeed.badar@unibetonrm.com");

    // Add CC
    if (!String.IsNullOrEmpty(CCEmail))
    {
        string[] ccemails = CCEmail.Split(';');
        foreach (string str in ccemails)
        {
            if (!String.IsNullOrEmpty(str) && str.Contains('@'))
            {
                email.CC.Add(new MailAddress(str.TrimEnd(new char[] { ',' })));
            }
        }
    }
    // Add BCC
    if (!String.IsNullOrEmpty(BCCEmail))
    {
        string[] bccemails = BCCEmail.Split(';');
        foreach (string str in bccemails)
        {
            if (!String.IsNullOrEmpty(str) && str.Contains('@'))
            {
                email.Bcc.Add(new MailAddress(str.TrimEnd(new char[] { ',' })));
            }
        }
    }

    email.IsBodyHtml = true;
    email.Body = EmailBody;
    email.Subject = EmailSubject;

    SmtpClient smtpClient = new SmtpClient();
    smtpClient.Host = AppConfig.GetValue("SmtpHost").ToString();
    smtpClient.Port = int.Parse(AppConfig.GetValue("SmtpPort").ToString());
    //smtpClient.EnableSsl = true;
    smtpClient.Credentials = CredentialCache.DefaultNetworkCredentials;
    smtpClient.Credentials = new System.Net.NetworkCredential(AppConfig.GetValue("SmtpServerUserName").ToString(), AppConfig.GetValue("SmtpServerPassword").ToString());
    smtpClient.Send(email);
}

1 个答案:

答案 0 :(得分:0)

错误消息似乎是说该错误与您尝试发送的电子邮件类型无关。

您的SMTP是否需要Windows凭据才能登录?你似乎试图做到这两点。由于您要指定用户名和密码,请尝试设置

smtpClient.UseDefaultCredentials = false;

smtpClient.Credentials = new System.Net.NetworkCredential(AppConfig.GetValue("SmtpServerUserName").ToString(), AppConfig.GetValue("SmtpServerPassword").ToString());

此外,您需要决定是否要使用CredentialCache.DefaultNetworkCredentials

确保您的防火墙不会阻止与SMTP服务器的连接,并确保您的凭据正确无误。