编辑:这个问题毫无意义,除了作为红鲱鱼的练习。问题结果是我的愚蠢(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存档中很有价值,我仍然会问它。也许有人甚至会想到你可以陷入的其他陷阱。
答案 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);
}
}
}``