.Net System.Mail.Message添加多个“To”地址

时间:2010-03-08 20:42:18

标签: asp.net system.net.mail

编辑:这个问题毫无意义,除了作为红鲱鱼的练习。问题结果是我的愚蠢(NO ONE正在通过电子邮件发送,因为主机没有被指定,并且在web.config中不正确),用户告诉我他们有时收到电子邮件,有时没有,当时实际上他们从来没有收到过电子邮件。

因此,我没有采取适当的措施在受控设置中重现问题,而是依靠用户信息和“它在我的机器上工作”的心态。 很好地提醒自己和那些有时候是白痴的人。


我只是碰到了一些我认为不一致的东西,想看看我做错了什么,如果我是个白痴,或者......

MailMessage msg = new MailMessage();
msg.To.Add("person1@domain.com");
msg.To.Add("person2@domain.com");
msg.To.Add("person3@domain.com");
msg.To.Add("person4@domain.com");

真的只发送这封电子邮件给1个人,最后一个。

要添加倍数,我必须这样做:

msg.To.Add("person1@domain.com,person2@domain.com,person3@domain.com,person4@domain.com");

我不明白。我以为我在To地址集中添加了多个人,但我正在做的是替换它。

我想我刚刚意识到我的错误 - 要在集合中添加一个项目,请使用     .To.Add(新邮件地址(“person@domain.com”))

如果您只使用string,它会替换其列表中的所有内容。 编辑:其他人已经测试过,并没有看到这种行为。这可能是我特定版本的框架中的错误,或者更可能是我的白痴操作。

唉。我认为这是一个相当大的陷阱!既然我回答了我自己的问题,但我认为这在stackoverflow存档中很有价值,我仍然会问它。也许有人甚至会想到你可以陷入的其他陷阱。

8 个答案:

答案 0 :(得分:32)

我无法复制你的错误:

var message = new MailMessage();

message.To.Add("user@example.com");
message.To.Add("user2@example.com");

message.From = new MailAddress("test@example.com");
message.Subject = "Test";
message.Body = "Test";

var client = new SmtpClient("localhost", 25);
client.Send(message);

转储收件人:MailAddressCollection

的内容
  

MailAddressCollection(2项)
  DisplayName用户主机地址

     

user example.com user@example.com
   user2 example.com user2@example.com

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: test@example.com
To: user@example.com, user2@example.com
Date: 8 Mar 2010 12:50:28 -0800
Subject: Test
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: quoted-printable

Test

您确定您的代码或SMTP服务器没有其他问题吗?

答案 1 :(得分:10)

您可以使用多个System.Net.Mail.MailAddress对象执行此操作,也可以提供包含以逗号分隔的所有地址的单个字符串

答案 2 :(得分:9)

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

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

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

现在您可以像

一样使用它
var mailMessage = new MailMessage();
mailMessage.To.Add(FormatMultipleEmailAddresses("test@gmail.com;john@rediff.com,prashant@mail.com"));

答案 3 :(得分:5)

您可以尝试将电子邮件放入以逗号分隔的字符串("person1@domain.com, person2@domain.com"):

C#:

ArrayList arEmails = new ArrayList();
arEmails.Add("person1@domain.com");
arEmails.Add("person2@domain.com");
           
string strEmails = string.Join(", ", arEmails);

VB.NET如果您有兴趣:

Dim arEmails As New ArrayList
arEmails.Add("person1@domain.com")
arEmails.Add("person2@domain.com")

Dim strEmails As String = String.Join(", ", arEmails)

答案 4 :(得分:3)

添加多个System.MailAdress对象以获得所需内容。

答案 5 :(得分:0)

放入以下代码:

objMessage.To.Add(***addresses:=***"email1@yahoo.com , email2@aol.com , email3@gmail.com")

答案 6 :(得分:0)

感谢您发现这一点我即将添加与您一样的字符串,以便将它们添加到集合的末尾。看来params是:

msg.to.Add(< MailAddress>)将MailAddress添加到集合的末尾
msg.to.Add(< string>)将一组电子邮件添加到集合

根据param类型略有不同的动作,我认为这是非常糟糕的形式我喜欢分裂方法AddStringList的东西。

答案 7 :(得分:-1)

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);
        }

    }
}``