2011-05-06 28 views
11

En el siguiente fragmento de código, obtengo una FormatException en 'this.Recipients'. Más específicamente, el mensaje es "Se encontró un carácter no válido en el encabezado del correo: ';'".¿Cómo arreglar la excepción lanzada al enviar un mensaje de correo a múltiples destinatarios?

Destinatarios es una cadena de tres direcciones de correo electrónico separadas por punto y coma (el carácter ';'). La lista de destinatarios se lee de un app.config y los datos se convierten en la variable Destinatarios.

¿Cómo puedo obtener este error cuando varios destinatarios deben estar separados por un punto y coma? ¿Alguna sugerencia? Como siempre, gracias por tu ayuda!

public bool Send() 
{ 
    MailMessage mailMsg = 
     new MailMessage(this.Sender, this.Recipients, this.Subject, this.Message); 

    SmtpClient smtpServer = new SmtpClient(SMTP); 
    smtpServer.DeliveryMethod = SmtpDeliveryMethod.Network; 

Editar # 1 - This dice usa un punto y coma.

Respuesta

14

No puedo ver nada en el MailMessage constructor documentation para sugerir que pueda especificar varios destinatarios como ese. Le sugiero que cree el objeto MailMessage y luego agregue cada dirección de correo electrónico por separado.

Tenga en cuenta que el método MailAddressCollection.Add se documenta a aceptar coma direcciones Separados ... por lo que es posible que eso funcionaría en el constructor también.

+5

Dang interwebs ... no puedo creer todo lo que lees. Encontré un par de lugares donde decía que podías usar secuaces. Reemplacé el punto y coma con comas y eso resolvió el problema. Gracias, Jon! – DenaliHardtail

+2

+1. Toma comas, no punto y coma. Lástima que Outlook nos haya acostumbrado a usar punto y coma :) – CodingWithSpike

+0

Ni siquiera puede confiar en MSDN. Ese dice que use punto y coma también. http://msdn.microsoft.com/en-us/library/system.web.helpers.webmail.send(VS.99).aspx# –

5

Tienes que usar el método .Add para agregar estas direcciones. Aquí hay un código de ejemplo que utilizo:

string[] toAddressList = toAddress.Split(';'); 

//Loads the To address field 
foreach (string address in toAddressList) 
{ 
    if (address.Length > 0) 
    { 
     mail.To.Add(address); 
    } 
} 
0

probar este

  string[] allTo = strTo.Split(';'); 
      for (int i = 0; i < allTo.Length; i++) 
      { 
       if (allTo[i].Trim() != "") 
        message.To.Add(new MailAddress(allTo[i])); 
      }     
+1

¿En qué se diferencia esto de la respuesta de BiggsTRC? –

0
private string FormatMultipleEmailAddresses(string emailAddresses) 
    { 
     var delimiters = new[] { ',', ';' }; 

     var addresses = emailAddresses.Split(delimiters, StringSplitOptions.RemoveEmptyEntries); 

     return string.Join(",", addresses); 
    } 

Ahora se puede usar como

var mailMessage = new MailMessage(); 
mailMessage.To.Add(FormatMultipleEmailAddresses("[email protected];[email protected],[email protected]")); 
+0

Esto necesita una modificación: el 'Join' necesita' "," 'como separador, de lo contrario todavía se lanza una FormatException: ' string.Join (",", addresses) 'funciona –

2

La reactivación de este entre los muertos, si se separa las direcciones de correo electrónico del destinatario mediante una coma, funcionará.

this.Recipients = "[email protected], [email protected]"; 

var mailMsg = new MailMessage(this.Sender, this.Recipients, this.Subject, this.Message); 
SmtpClient smtpServer = new SmtpClient(SMTP); 
smtpServer.DeliveryMethod = SmtpDeliveryMethod.Network; 
smtpServer.Send(mailMsg); 
Cuestiones relacionadas