web-dev-qa-db-ja.com

C#を使用して複数のアドレス/受信者にメールを送信できません

私は以下のコードを使用していますが、1つのメールのみを送信します-複数のアドレスにメールを送信する必要があります。

私が使用する複数のメールを取得するには:

string connectionString = ConfigurationManager.ConnectionStrings["email_data"].ConnectionString;
OleDbConnection con100 = new OleDbConnection(connectionString);
OleDbCommand cmd100 = new OleDbCommand("select top 3 emails  from bulk_tbl", con100);
OleDbDataAdapter da100 = new OleDbDataAdapter(cmd100);
DataSet ds100 = new DataSet();
da100.Fill(ds100);

    for (int i = 0; i < ds100.Tables[0].Rows.Count; i++)
    //try
    {
        string all_emails = ds100.Tables[0].Rows[i][0].ToString();
        {
            string allmail = all_emails + ";";
            Session.Add("ad_emails",allmail);
            Response.Write(Session["ad_emails"]);
            send_mail();
        }
    }

そして私が使用する電子メールを送信するために:

string sendto = Session["ad_emails"].ToString();

MailMessage message = new MailMessage("[email protected]", sendto, "subject", "body");
SmtpClient emailClient = new SmtpClient("mail.smtp.com");
System.Net.NetworkCredential SMTPUserInfo = new System.Net.NetworkCredential("abc", "abc");
emailClient.UseDefaultCredentials = true;
emailClient.Credentials = SMTPUserInfo;
emailClient.Send(message);
21
azeem

問題は、単一のアドレスを表す文字列のみを取る場合、セミコロンで区切られたアドレスのリストをMailMessageコンストラクターに提供することです。

電子メールメッセージの受信者のアドレスを含む文字列。

または、コンマで区切られたリスト(以下を参照)。

ソース

複数のアドレスを指定するには、 To プロパティである MailAddressCollection を使用する必要がありますが、これらのページの例には示されていません非常に明確に:

message.To.Add("[email protected], [email protected]"));

MailAddressCollectionに追加する電子メールアドレス。複数の電子メールアドレスは、コンマ文字( "、")で区切る必要があります。

MSDNページ

そのため、カンマで区切られたリストを使用してMailMessageを作成する必要があります。

60
ChrisF

これは私のために働いたものです。 (受信者は文字列の配列です)

//Fuse all Receivers
var allRecipients = String.Join(",", recipients);

//Create new mail
var mail = new MailMessage(sender, allRecipients, subject, body);

//Create new SmtpClient
var smtpClient = new SmtpClient(hostname, port);

//Try Sending The mail
try
{
    smtpClient.Send(mail);
}
catch (Exception ex)
{
    Log.Error(String.Format("MailAppointment: Could Not Send Mail. Error = {0}",ex), this);
    return false;
}
8
VRC

この関数は、電子メールアドレスのコンマまたはセミコロンで区切られたリストを検証します。

public static bool IsValidEmailString(string emailAddresses)
{
    try
    {
        var addresses = emailAddresses.Split(',', ';')
            .Where(a => !string.IsNullOrWhiteSpace(a))
            .ToArray();

        var reformattedAddresses = string.Join(",", addresses);

        var dummyMessage = new System.Net.Mail.MailMessage();
        dummyMessage.To.Add(reformattedAddresses);
        return true;
    }
    catch
    {
        return false;
    }
}
6
Matt

複数の受信者に送信するには、区切り文字としてカンマを使用して受信者文字列を設定します。

string recipient = "[email protected],[email protected],[email protected]";

次に、受信者をMailMessageオブジェクトに追加します。

string[] emailTo = recipient.Split(',');
for (int i = 0; i < emailTo.GetLength(0); i++)
    mailMessageObject.To.Add(emailTo[i]);
4
Zach M

To、bcc、ccに複数のメールを送信するために使用するこのコード

MailMessage email = new MailMessage();
Attachment a = new Attachment(attach);
email.From = new MailAddress(from);//De
string[] Direcciones;
char[] deliminadores = { ';' };

//Seleccion de direcciones para el parametro to
Direcciones = to.Split(deliminadores);
foreach (string d in Direcciones)
email.To.Add(new MailAddress(d));//Para

//Seleccion de direcciones para el parametro CC
Direcciones = CC.Split(deliminadores);
foreach (string d in Direcciones)
email.CC.Add(new MailAddress(d));

//Seleccion de direcciones para el parametro Bcc
Direcciones = Bcc.Split(deliminadores);
foreach (string d in Direcciones)
enter code here`email.Bcc.Add(new MailAddress(d));
0
Daniel Alvarado

MailMessage.To.Add() a 有効なRFC 822電子メールアドレスのコンマ区切りリスト を渡すことも許可されています。

Nathaniel Borenstein <[email protected]>, Ned Freed <[email protected]>

したがって、コードは次のようになります。

message.To.Add("Nathaniel Borenstein <[email protected]>, Ned Freed <[email protected]>");

:パブリックドメインにリリースされたコード。帰属は必要ありません。

0
Ian Boyd