2014-01-31 5 views
1

У меня есть метод, возвращающий адрес электронной почты в виде строки в кусок кода, который отправляет электронное письмо, но я получаю сообщение об ошибке: «Указанная строка не в форме, необходимой для адрес электронной почты ».пытается отправить электронное письмо из значения базы данных

Вот метод, который возвращает адрес электронной почты:

public static string getSignerByID(int signerID) 
{ 
    using (dbPSREntities10 myEntities = new dbPSREntities10()) 
    { 
     var thisId = myEntities.refAuthSigners.Where(x => x.refAuthSignerID == signerID).Select(x => x.NetworkEmail).ToList(); 

     var formattedValue = thisId.ToString(); 

     return formattedValue; 

    } 
} 

Вот код, который отправляет электронную почту:

//method to send approved email 
    public static void sendApprovedEmail(string contactFirstName, string contactLastName, string contactEmail, int signer) 
    { 
     //Email one 
     string fileName = HttpContext.Current.Server.MapPath("~/App_Data/ApprovedEmail.txt"); 
     string mailBody = File.ReadAllText(fileName); 

     mailBody = mailBody.Replace("##ContactFirstName##", contactFirstName); 
     mailBody = mailBody.Replace("##ContactLastName##", contactLastName); 

     MailMessage myMessage = new MailMessage(); 
     myMessage.Subject = "PSR has been approved"; 
     myMessage.Body = mailBody; 

     string signerEmailAddress = getSignerByID(signer); 

     myMessage.From = new MailAddress("[email protected]", "[email protected]"); 
     myMessage.To.Add(new MailAddress(contactEmail)); 
     myMessage.To.Add(new MailAddress(signerEmailAddress));// this is the email address from the database that errors out. 

     SmtpClient mySmtpClient = new SmtpClient(); 
     mySmtpClient.Send(myMessage); 
    } 

любая идея, почему переменная «signerEmailAddress» не будет работать? Значение int he database - это varchar (50) и, безусловно, действительный адрес электронной почты. Благодаря!

+1

Возвращаемое значение из 'getSignerById' не является допустимым адресом электронной почты. Возможно, что-то связано с тем, что он извлекается с помощью 'List.ToString()', что не имеет смысла. Научитесь отлаживать и проверять значение. http://www.codeproject.com/Articles/79508/Mastering-Debugging-in-Visual-Studio-2010-A-Beginn –

ответ

3

thisId будет relturn список сетевых писем:

var thisId = myEntities.refAuthSigners 
         .Where(x => x.refAuthSignerID == signerID) 
         .Select(x => x.NetworkEmail) 
         .ToList(); 

Вызов ToString() возвратит вам имя типа списка. Что-то вроде:

"System.Collections.Generic.List`1[Namespace.NetworkEmail]" 

Какой конкретно не выглядит адрес электронной почты. Возможно, вы хотите использовать FirstOrDefault() вместо ToList(). Это вернет вам сетевой адрес первого подписчика с предоставленным идентификатором. Вы должны проверить, не вернулось ли возвращаемое значение, а затем вызвать ToString() (если у вас есть ToString(), переопределенный по типу электронной почты сети).