www.91084.com

GVKun编程网logo

c# – System.Net.Mail和MailMessage不立即发送消息(sendmessage c#)

16

在这篇文章中,我们将为您详细介绍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#)

c# – System.Net.Mail和MailMessage不立即发送消息(sendmessage c#)

当我使用System.Net.Mail发送邮件时,似乎邮件不会立即发送.他们在到达我的收件箱之前需要一两分钟.一旦我退出应用程序,所有消息都会在几秒钟内收到.是否有某种邮件消息缓冲区设置可以强制SmtpClient立即发送消息?
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);
    }

谢谢,

标记

解决方法

试试这个,如果你使用的是Dotnet 4.0
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属性之间的差异

.net – MailMessage,Sender和From属性之间的差异

自从我们从.NET Framework 1.1切换到3.5框架以来,我一直在使用System.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做什么?

.net – MailMessage.IsBodyHtml做什么?

我正在测试通过C#发送一些电子邮件,但我无法确定IsBody Html的真正效果设置.不管价值如何,无论我在Body中发送的内容类型为“text / plain”,我的HTML都显示了我的电子邮件客户端(gmail)中的所有标签.这个国旗实际上应该做什么?

注意:我可以通过创建一个内容类型为“text / html”的AlternateView发送一个HTML电子邮件,我只是想了解如何设置身体应该工作.

解决方法

这是我每天使用的SMTP帮助器的摘录….
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有问题)

.NET发送电子邮件的最佳方法(System.Net.Mail有问题)

这似乎很简单。我需要从一些ASP.NET应用程序发送电子邮件。我需要做到这一点,没有奇怪的错误,没有cpu利用率通过屋顶。我不是在说大量的电子邮件,只是偶尔的电子邮件。

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。必须要解决这个问题。

解决方法

我遇到与所描述的设置相同的cpu利用率问题。我最终用微软打开一张机票来确定问题的原因。 cpu利用率问题在于ServicePoint类。在ServicePoint类内部,有一个运行每个(MaxIdleTime / 2)毫秒的计时器。看到问题?通过将MaxIdleTime值更改为2,cpu利用率将下降到正常水平。

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

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

编辑:这个问题是无意义的,除了作为一个练习在红色herrings。这个问题结果是我的愚蠢的组合(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.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 Address

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

今天关于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”地址等相关知识,可以在本站进行查询。

本文标签: