Tenho vários destinatários de email armazenados no SQL Server. Quando clico em enviar na página da Web, ele deve enviar e-mail para todos os destinatários. Separei e-mails usando ;
.
A seguir está o código do destinatário único.
MailMessage Msg = new MailMessage();
MailAddress fromMail = new MailAddress(fromEmail);
Msg.From = fromMail;
Msg.To.Add(new MailAddress(toEmail));
if (ccEmail != "" && bccEmail != "")
{
Msg.CC.Add(new MailAddress(ccEmail));
Msg.Bcc.Add(new MailAddress(bccEmail));
}
SmtpClient a = new SmtpClient("smtp server name");
a.Send(Msg);
sreader.Dispose();
c#
mailmessage
Chetan Goenka
fonte
fonte
MailMessage
eSmtpClient
precisam estar emusing
blocos.using
blocos" não é igual a "precisa ser eliminado". Em segundo lugar, em código de produção, como aplicativos da web, você geralmente desejará usar deSendAsync
qualquer maneira, o que funciona como pretendido, sem a necessidade de descartar aSnmpClient
instância.Respostas:
Fácil!
Apenas divida a lista de endereços de entrada no ";" caractere e adicione-os à mensagem de e-mail:
foreach (var address in addresses.Split(new [] {";"}, StringSplitOptions.RemoveEmptyEntries)) { mailMessage.To.Add(address); }
Neste exemplo,
addresses
contém "[email protected];[email protected]
".fonte
Conforme sugerido por Adam Miller nos comentários, adicionarei outra solução.
O construtor MailMessage (String from, String to) aceita uma lista de endereços separados por vírgulas. Então, se acontecer de você já ter uma lista separada por vírgulas (','), o uso é tão simples como:
MailMessage Msg = new MailMessage(fromMail, addresses);
Neste caso particular, podemos substituir o ';' para ',' e ainda usar o construtor.
MailMessage Msg = new MailMessage(fromMail, addresses.replace(";", ","));
Se você prefere esta ou a resposta aceita, depende de você. Indiscutivelmente, o loop torna a intenção mais clara, mas é mais curto e não obscuro. Mas se você já tiver uma lista separada por vírgulas, acho que esse é o caminho a percorrer.
fonte
to
parâmetro como "Uma String que contém o endereço do destinatário da mensagem de e-mail". Quero usá-lo, mas não se o suporte puder ser removido.De acordo com a documentação:
Propriedade MailMessage.To - Retorna MailAddressCollection que contém a lista de destinatários desta mensagem de e-mail
Aqui MailAddressCollection tem um método embutido chamado
public void Add(string addresses) 1. Summary: Add a list of email addresses to the collection. 2. Parameters: addresses: *The email addresses to add to the System.Net.Mail.MailAddressCollection. Multiple *email addresses must be separated with a comma character (",").
No seu caso :
simplesmente substitua todos os; com,
Msg.To.Add(toEmail.replace(";", ","));
Para referência :
fonte
Eu testei isso usando o seguinte script do PowerShell e usando (,) entre os endereços. Funcionou para mim!
$EmailFrom = "<[email protected]>"; $EmailPassword = "<password>"; $EmailTo = "<[email protected]>,<[email protected]>"; $SMTPServer = "<smtp.server.com>"; $SMTPPort = <port>; $SMTPClient = New-Object Net.Mail.SmtpClient($SmtpServer,$SMTPPort); $SMTPClient.EnableSsl = $true; $SMTPClient.Credentials = New-Object System.Net.NetworkCredential($EmailFrom, $EmailPassword); $Subject = "Notification from XYZ"; $Body = "this is a notification from XYZ Notifications.."; $SMTPClient.Send($EmailFrom, $EmailTo, $Subject, $Body);
fonte
C#
, não relacionada ao PowerShell de forma alguma.NET Framework
mas apenasC#
. Se todos estivessem fazendo o mesmo que você, também teríamos respostas em VB.NET, F # ou mesmo C ++ para todas as questões relacionadas ao.NET Framework
. Afinal é o mesmo Framework, é só uma questão de tradução ... Você entende o que quero dizer aqui? StackOverflow se tornaria uma fonte de informação realmente lixo