在这篇文章中,我们将为您详细介绍c#–System.Net.Mail和MailMessage不立即发送消息的内容,并且讨论关于sendmessagec#的相关问题。此外,我们还会涉及一些关于.net–
在这篇文章中,我们将为您详细介绍c# – System.Net.Mail和MailMessage不立即发送消息的内容,并且讨论关于sendmessage c#的相关问题。此外,我们还会涉及一些关于.net – MailMessage,Sender和From属性之间的差异、.net – MailMessage.IsBodyHtml做什么?、.NET发送电子邮件的最佳方法(System.Net.Mail有问题)、asp.net – .Net System.Mail.Message添加多个“To”地址的知识,以帮助您更全面地了解这个主题。
本文目录一览:- c# – System.Net.Mail和MailMessage不立即发送消息(sendmessage c#)
- .net – MailMessage,Sender和From属性之间的差异
- .net – MailMessage.IsBodyHtml做什么?
- .NET发送电子邮件的最佳方法(System.Net.Mail有问题)
- asp.net – .Net System.Mail.Message添加多个“To”地址
c# – System.Net.Mail和MailMessage不立即发送消息(sendmessage c#)
public static void SendMessage(string smtpServer,string mailFrom,string mailFromdisplayName,string[] mailTo,string[] mailCc,string subject,string body) { try { string to = mailTo != null ? string.Join(",",mailTo) : null; string cc = mailCc != null ? string.Join(",mailCc) : null; MailMessage mail = new MailMessage(); SmtpClient client = new SmtpClient(smtpServer); mail.From = new MailAddress(mailFrom,mailFromdisplayName); mail.To.Add(to); if (cc != null) { mail.CC.Add(cc); } mail.Subject = subject; mail.Body = body.Replace(Environment.NewLine,"<BR>"); mail.IsBodyHtml = true; client.Send(mail); } catch (Exception ex) { logger.Error("Failure sending email.",ex); }
谢谢,
标记
解决方法
using (SmtpClient client = new SmtpClient(smtpServer)) { MailMessage mail = new MailMessage(); // your code here. client.Send(mail); }
这将废弃您的客户端实例,使其使用QUIT协议元素包装其SMTP会话.
如果您遇到早期的dotnet版本,请尝试安排为程序发送的每条消息重复使用相同的SmtpClient实例.
当然,请记住,电子邮件本质上是一个存储转发系统,并且没有任何关于从smtp SEND到接收的延迟同步(甚至可以正式预测).
.net – MailMessage,Sender和From属性之间的差异
它们是否相同,如果没有,有没有理由使用发送方与From?
例如:
Using m As New System.Net.Mail.MailMessage() m.Sender = New System.Net.Mail.MailAddress("test@test.com","Name here") m.From = New System.Net.Mail.MailAddress("test@test.com","Name here") m.Subject = "Test" m.Body = "Test" Dim client As New System.Net.Mail.SmtpClient("mymailserver.com") client.Send(m) End Using
标题字段:
消息头应至少包括以下字段:
发件人:电子邮件地址,以及作者的姓名。在许多电子邮件客户端不可更改,除非通过更改帐户设置。
另请注意,“发件人:”字段不必是电子邮件的真实发件人。一个原因是,很容易伪造“From:”字段,并让一条消息似乎来自任何邮件地址。有可能对电子邮件进行数字签名,这是很难伪造的,但这种签名需要额外的编程,通常需要外部程序来验证。一些ISP不中继声称来自他们不托管的域的电子邮件,但很少(如果有的话)检查以确保该人或甚至在“From:”字段中命名的电子邮件地址是一个与连接相关联。一些ISP将电子邮件认证系统应用于通过其MTA发送的电子邮件,以允许其他MTA检测可能来自他们的伪造垃圾邮件。
发件人:代表作者在From:字段(秘书,列表管理器等)中列出的实际发件人的地址。
http://en.wikipedia.org/wiki/Email的详细信息
例如,gmail使用from / sender字段发送来自与您的gmail帐户(验证后)不同的电子邮件地址的电子邮件。
.net – MailMessage.IsBodyHtml做什么?
注意:我可以通过创建一个内容类型为“text / html”的AlternateView发送一个HTML电子邮件,我只是想了解如何设置身体应该工作.
解决方法
public bool SendMail(string strTo,string strFrom,string strCc,string strBcc,string strBody,string strSubject) { bool isComplete = true; SmtpClient smtpClient = new SmtpClient(); MailMessage message = new MailMessage(); try { //Default port will be 25 smtpClient.Port = 25; message.From = new MailAddress(smtpEmailSource); message.To.Add(strTo); message.Subject = strSubject; if (strCc != "") { message.Bcc.Add(new MailAddress(strCc)); } if (strBcc != "") { message.Bcc.Add(new MailAddress(strBcc)); } message.IsBodyHtml = true; string html = strBody; //I usually use .HTML files with tags (e.g. {firstName}) I replace with content. This allows me to edit the emails in VS by opening a .HTML file and it's easy to do string replacements. AlternateView htmlView = AlternateView.CreatealternateViewFromString(html,new ContentType("text/html")); message.AlternateViews.Add(htmlView); // Send SMTP mail smtpClient.Send(message); } catch { isComplete = false; } return isComplete; }
[UPDATE]
关键点,我最初离开了…
> IsBodyHtml声明您的邮件是HTML格式的.如果你只发送一个HTML视图,这就是你需要的.
> AlternateView用于存储我的HTML,这不是发送HTML消息所必需的,但如果要发送包含HTML和纯文本的消息(如果接收方无法呈现HTML),则需要此功能.
我拿出了我以上的plainView,这不是很明显,对不起…
这里的关键是,如果要发送HTML格式的消息,您需要使用IsBodyHtml = true(默认为false)将您的内容呈现为HTML.
.NET发送电子邮件的最佳方法(System.Net.Mail有问题)
System.Net.Mail看起来很可怕。 SmtpClient不会发出Quit命令(这可能是因为Microsoft(R)对以下规范不感兴趣),因此连接将保持打开状态。因此,如果有人尝试在该连接终止之前发送电子邮件,则可以从SMTP服务器收到有关打开的连接数太多的错误信息。这是Microsoft(R)完全不感兴趣的错误。看这里:
http://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=146711
另外,如果你环顾一些建议使用这个代码来解决这个问题:
smtpClient.ServicePoint.MaxIdleTime = 1; smtpClient.ServicePoint.ConnectionLimit = 1;
好的,是的,“解决”连接被打开的问题。但是,如果您愿意,可以在服务器上尝试这样做,导致进程(在这种情况下为w3wp.exe)正在运行的cpu跳转并保持100%,直到应用程序池被回收为止。无论什么原因,运行mscorwks.dll!的线程是CreateApplicationContext的罪魁祸首。
这具有非常好的副作用,如果您运行在持续100%cpu使用率的Web主机上,您将使您的应用程序池被禁用。所以这不像一些建议那么微不足道。
所以我的问题是怎么办?我需要做的是如此简单;然而,让这些“连接打开太多”的错误是不可接受的,100%的cpu使用率也是不可接受的。我不想购买第三方组件,而不是因为我很便宜,但是我购买了足够的组件和MSDN订阅,似乎很疯狂,为了简单的SMTP功能,需要支出$ 100- $ 300。
我看到设置MaxIdleTime更高可以帮助,但我怀疑。我不想让我的应用程序池被禁用,因为Microsoft不想遵循SMTP规范。
编辑:我查看了quiksoft.com组件,但它不支持SMTP身份验证,费用为$ 500。必须要解决这个问题。
解决方法
asp.net – .Net System.Mail.Message添加多个“To”地址
因此,我不是采取适当的步骤在受控的环境中重现问题,而是依赖于用户信息和“它在我的机器上工作”的心态。
好的提醒我自己和任何人在那里有时是一个白痴。
我只是碰到我认为不一致的东西,想看看我做错了什么,如果我是个白痴,或者…
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.Add(new MailAddress(“person@domain.com”))
如果你只使用一个字符串,它会取代它在它的列表中的一切。
编辑:其他人已经测试,没有看到这种行为。这是我的特定版本的框架中的错误,或者更可能是我的白痴操作。
啊。我认为这是一个相当大的骗子!因为我回答了我自己的问题,但我认为这是有价值的在stackoverflow存档,我仍然会问。也许有人甚至有一个想法,你可以陷入其他陷阱。
解决方法
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 items)
displayName User Host Addressuser 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服务器没有发生其他问题吗?
今天关于c# – System.Net.Mail和MailMessage不立即发送消息和sendmessage c#的分享就到这里,希望大家有所收获,若想了解更多关于.net – MailMessage,Sender和From属性之间的差异、.net – MailMessage.IsBodyHtml做什么?、.NET发送电子邮件的最佳方法(System.Net.Mail有问题)、asp.net – .Net System.Mail.Message添加多个“To”地址等相关知识,可以在本站进行查询。
本文标签: