asp.net - recipients - .Net System.Mail.Message que agrega varias direcciones "A"
mail.to.add multiple addresses c# (8)
EDITAR: Esta pregunta no tiene sentido, excepto como un ejercicio de pistas falsas. El problema resultó ser una combinación de mi idiotez (NADIE estaba siendo enviado por correo electrónico ya que el host no se especificaba y era incorrecto en web.config) y los usuarios me decían que algunas veces recibían los correos electrónicos y otras veces no, cuando en realidad NUNCA recibían los correos electrónicos.
Entonces, en lugar de tomar los pasos adecuados para reproducir el problema en un entorno controlado, confié en la información del usuario y la mentalidad de "funciona en mi máquina". Un buen recordatorio para mí y para todos los que a veces son idiotas.
Acabo de golpear algo que creo que es inconsistente, y quería ver si estoy haciendo algo mal, si soy un idiota, o ...
MailMessage msg = new MailMessage();
msg.To.Add("[email protected]");
msg.To.Add("[email protected]");
msg.To.Add("[email protected]");
msg.To.Add("[email protected]");
Realmente solo envía este correo electrónico a 1 persona, el último.
Para agregar múltiplos, tengo que hacer esto:
msg.To.Add("[email protected],[email protected],[email protected],[email protected]");
No lo entiendo Pensé que estaba agregando varias personas a la colección de direcciones To
, pero lo que estaba haciendo fue reemplazarlo.
Creo que acabo de darme cuenta de mi error: para agregar un elemento a la colección, use .To.Add (nueva MailAddress ("[email protected]"))
Si usa solo una string
, reemplaza todo lo que tenía en su lista. EDITAR: Otras personas han probado y no están viendo este comportamiento. Esto es un error en mi versión particular del marco o, más probablemente, una maniobra idiota por mí.
Ugh. ¡Consideraría que es un juego bastante grande! Dado que respondí mi propia pregunta, pero creo que es valioso tener esto en el archivo stackoverflow, aún así lo preguntaré. Tal vez alguien incluso tenga una idea de otras trampas en las que te puedes caer.
Agregue múltiples objetos System.MailAdress para obtener lo que desea.
Escriba en direcciones este código:
objMessage.To.Add(***addresses:=***"[email protected] , [email protected] , [email protected]")
Gracias por detectar esto, estaba a punto de agregar cadenas pensando lo mismo que usted que se agregarían al final de la colección. Parece que los params son:
msg.to.Add (<MailAddress>) agrega MailAddress al final de la colección
msg.to.Add (<cadena>) agrega una lista de correos electrónicos a la colección
Acciones ligeramente diferentes dependiendo del tipo de param, creo que esto es bastante malo. Hubiera preferido los métodos de división AddStringList de algo.
No pude replicar tu error:
var message = new MailMessage();
message.To.Add("[email protected]");
message.To.Add("[email protected]");
message.From = new MailAddress("[email protected]");
message.Subject = "Test";
message.Body = "Test";
var client = new SmtpClient("localhost", 25);
client.Send(message);
Volcado del contenido de To: MailAddressCollection :
MailAddressCollection (2 artículos)
DisplayName User Host Addressuser example.com [email protected]
usuario2 ejemplo.com [email protected]
Y el correo electrónico resultante captado por smtp4dev :
Received: from mycomputername (mycomputername [127.0.0.1])
by localhost (Eric Daugherty''s C# Email Server)
3/8/2010 12:50:28 PM
MIME-Version: 1.0
From: [email protected]
To: [email protected], [email protected]
Date: 8 Mar 2010 12:50:28 -0800
Subject: Test
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: quoted-printable
Test
¿Estás seguro de que no hay otro problema con tu código o servidor SMTP?
Podría tratar de poner los correos electrónicos en una cadena delimitada por comas ( "[email protected], [email protected]"
):
DO#:
ArrayList arEmails = new ArrayList();
arEmails.Add("[email protected]");
arEmails.Add("[email protected]");
string strEmails = string.Join(", ", arEmails);
VB.NET si estás interesado:
Dim arEmails As New ArrayList
arEmails.Add("[email protected]")
arEmails.Add("[email protected]")
Dim strEmails As String = String.Join(", ", arEmails)
Puede hacer esto con múltiples objetos System.Net.Mail.MailAddress
o puede proporcionar una sola cadena que contenga todas las direcciones separadas por comas
private string FormatMultipleEmailAddresses(string emailAddresses)
{
var delimiters = new[] { '','', '';'' };
var addresses = emailAddresses.Split(delimiters, StringSplitOptions.RemoveEmptyEntries);
return string.Join(",", addresses);
}
Ahora puedes usarlo como
var mailMessage = new MailMessage();
mailMessage.To.Add(FormatMultipleEmailAddresses("[email protected];[email protected],[email protected]"));
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net.Mail;
using System.Web;
namespace HMS.HtmlHelper
{
public class SendmailHelper
{
//Created SendEMail method for sendiing mails to users
public bool SendEMail(string FromName, string ToAddress, string Subject, string Message)
{
bool valid =false;
try
{
string smtpUserName = System.Configuration.ConfigurationManager.AppSettings["smtpusername"].ToString();
string smtpPassword = System.Configuration.ConfigurationManager.AppSettings["smtppassword"].ToString();
MailMessage mail = new MailMessage();``
mail.From = new MailAddress(smtpUserName, FromName);
mail.Subject = Subject;
mail.To.Add(FormatMultipleEmailAddresses(ToAddress));
//mail.To.Add(ToAddress);
mail.Body = Message.ToString();
mail.IsBodyHtml = true;
SmtpClient smtp = new SmtpClient();
smtp.Port = Convert.ToInt32(System.Configuration.ConfigurationManager.AppSettings["smtpserverport"]);
smtp.Host = System.Configuration.ConfigurationManager.AppSettings["SmtpServer"]; /
smtp.Credentials = new System.Net.NetworkCredential(smtpUserName, smtpPassword);
smtp.EnableSsl = Convert.ToBoolean(System.Configuration.ConfigurationManager.AppSettings["ssl"]); ;
smtp.Send(mail);
valid = true;
}
catch (Exception ex)
{
valid =false ;
}
return valid;
}
public string FormatMultipleEmailAddresses(string emailAddresses)
{
var delimiters = new[] { '','', '';'' };
var addresses = emailAddresses.Split(delimiters, StringSplitOptions.RemoveEmptyEntries);
return string.Join(",", addresses);
}
}
}``