43

编辑:这个问题是毫无意义的,除了作为红鲱鱼的练习。这个问题原来是我的白痴(没有人收到电子邮件,因为没有指定主机并且在 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(new MailAddress("person@domain.com"))

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

啊。我认为这是一个相当大的陷阱!既然我回答了自己的问题,但我认为这在 stackoverflow 档案中很有价值,我仍然会问它。也许有人甚至对您可能陷入的其他陷阱有所了解。

4

9 回答 9

40

我无法复制您的错误:

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

转储 To: MailAddressCollection的内容:

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

用户 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 服务器没有其他问题吗?

于 2010-03-08T20:55:11.410 回答
11
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"));
于 2013-09-25T11:12:09.857 回答
10

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

于 2010-03-08T20:52:32.017 回答
6

您可以尝试将电子邮件放入逗号分隔的字符串 ( "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)
于 2010-03-08T20:58:14.983 回答
3

添加多个 System.MailAdress 对象以获得您想要的。

于 2010-03-08T20:47:30.513 回答
1

输入地址此代码:

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

于 2013-10-26T18:12:28.657 回答
0

感谢您发现这一点,我正要添加与您相同的字符串,它们将被添加到集合末尾。看来参数是:

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

根据参数类型略有不同的操作,我认为这是一种非常糟糕的形式,我更喜欢拆分方法 AddStringList 的东西。

于 2014-01-16T17:49:20.787 回答
0

我喜欢 Praveen 的回答,但是,我必须对其进行一些调整才能使其正常工作。

   public class SendmailHelper
   {
       ...
       myMail.From = from;
        string[] emails = FormatMultipleEmailAddresses(GlobalVariables.To_EMail);
        int email_counter = 0;
        while (email_counter < emails.Length)
        {
            myMail.To.Add(emails[email_counter]);
            email_counter++;
        }
        ...
    {

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

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

        return addresses;
    }
于 2021-08-25T19:20:47.763 回答
-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);
        }

    }
}``
于 2016-07-12T04:48:14.093 回答