Mam wielu odbiorców wiadomości e-mail przechowywanych w programie SQL Server. Kiedy kliknę wyślij na stronie internetowej, powinna wysłać e-mail do wszystkich odbiorców. Oddzieliłem e-maile za pomocą ;
.
Poniżej znajduje się kod pojedynczego odbiorcy.
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
źródło
źródło
MailMessage
iSmtpClient
instancje muszą znajdować się wusing
blokach.using
blokach” nie równa się „musi zostać usunięty”. Po drugie, w kodzie produkcyjnym, takim jak aplikacje internetowe, zazwyczaj iSendAsync
tak będziesz chciał użyć , co działa zgodnie z przeznaczeniem, bez konieczności usuwaniaSnmpClient
instancji.Odpowiedzi:
Łatwy!
Po prostu podziel listę adresów przychodzących na „;” znak i dodaj je do wiadomości e-mail:
foreach (var address in addresses.Split(new [] {";"}, StringSplitOptions.RemoveEmptyEntries)) { mailMessage.To.Add(address); }
W tym przykładzie
addresses
zawiera „[email protected];[email protected]
”.źródło
Zgodnie z sugestią Adama Millera w komentarzach dodam jeszcze jedno rozwiązanie.
Konstruktor MailMessage (String from, String to) akceptuje listę adresów oddzielonych przecinkami. Jeśli więc masz już listę oddzieloną przecinkami („,”), użycie jest tak proste, jak:
MailMessage Msg = new MailMessage(fromMail, addresses);
W tym konkretnym przypadku możemy zastąpić ';' dla ',' i nadal używaj konstruktora.
MailMessage Msg = new MailMessage(fromMail, addresses.replace(";", ","));
Niezależnie od tego, czy wolisz tę, czy zaakceptowaną odpowiedź, zależy od Ciebie. Prawdopodobnie pętla sprawia, że intencja jest wyraźniejsza, ale to jest krótsze i nie niejasne. Ale jeśli masz już listę oddzieloną przecinkami, myślę, że jest to właściwy sposób.
źródło
to
parametr jako „Ciąg zawierający adres odbiorcy wiadomości e-mail”. Chcę go używać, ale nie chcę, aby jego wspornik został usunięty.Zgodnie z dokumentacją:
Właściwość MailMessage.To - zwraca MailAddressCollection zawierającą listę adresatów tej wiadomości e-mail
Tutaj MailAddressCollection ma wbudowaną metodę o nazwie
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 (",").
W Twoim przypadku :
po prostu wymień wszystkie; z ,
Msg.To.Add(toEmail.replace(";", ","));
Na przykład :
źródło
Przetestowałem to za pomocą następującego skryptu PowerShell i używając (,) między adresami. U mnie zadziałało!
$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);
źródło
C#
, które w ogóle nie jest związane z PowerShell.NET Framework
ale tylkoC#
. Gdyby wszyscy robili to samo, mielibyśmy również odpowiedzi w VB.NET, F # lub nawet C ++ na wszystkie pytania związane z.NET Framework
. W końcu to ten sam Framework, to tylko kwestia tłumaczenia ... Widzisz, o co mi chodzi? StackOverflow stałby się naprawdę