首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >System.Net.Mail的性能问题

System.Net.Mail的性能问题
EN

Stack Overflow用户
提问于 2010-04-13 01:59:21
回答 2查看 518关注 0票数 0

我有一个不同寻常的问题,通过我的应用程序发送邮件。一开始它不工作(无法传递错误),不管怎样,我添加了正确的身份验证,它工作了。我现在的问题是,如果我尝试发送大约300封电子邮件(每封邮件都有500k的附件),应用程序会在整个过程中挂起大约95%的邮件。

下面是我要发送的每封邮件所调用的一些代码

代码语言:javascript
复制
 Using mail As New MailMessage()
            With mail
                .From = New MailAddress(My.Resources.EmailFrom)
                For Each contact As Contact In Contacts
                    .To.Add(contact.Email)
                Next
                .Subject = "Accounting"
                .Body = My.Resources.EmailBody
                'Back the stream up to the beginning orelse the attachment
                'will be sent as a zero (0) byte file.
                attachment.Seek(0, SeekOrigin.Begin)
                .Attachments.Add(New Attachment(attachment, String.Concat(Item.Year, Item.AttachmentType.Extension)))
            End With
            Dim smtp As New SmtpClient("192.168.1.2")
            With smtp
                .DeliveryMethod = SmtpDeliveryMethod.Network
                .UseDefaultCredentials = False
                .Credentials = New NetworkCredential("username", "password")
                .Send(mail)
            End With
        End Using
        With item
            .SentStatus = True
            .DateSent = DateTime.Now.Date
            .Save()
        End With
        Return

我在想,我是否可以准备好所有的邮件并将它们添加到一个集合中,然后打开一个SMTP连接并迭代这个集合,像这样调用send

代码语言:javascript
复制
Using mail As New MailMessage()
 ...
MailCollection.Add(mail)

End Using

...

                Dim smtp As New SmtpClient("192.168.1.2")
                With smtp
                    .DeliveryMethod = SmtpDeliveryMethod.Network
                    .UseDefaultCredentials = False
                    .Credentials = New NetworkCredential("username", "password")

                     For Each mail in MainCollection
                          .Send(mail)
                     Next

                End With
EN

回答 2

Stack Overflow用户

发布于 2010-04-13 02:03:19

您遇到的限制很可能是由SMTP服务器强制执行的,而不是您的代码。SMTP服务器很容易受到垃圾邮件的滥用,因此具有防止此类滥用的机制。

单独发送每封电子邮件并不总是有效的,你正在与其他更复杂的机制竞争。

但从技术上讲,是的,你可以写一段代码来单独发送它们。

票数 1
EN

Stack Overflow用户

发布于 2010-04-13 02:08:21

对于您所讨论的大小和数量,我的建议是将它们放在SMTP可访问的文件夹中,并让SMTP服务器从该文件夹中交付。这会更快更理智。

内存中的500K附件是资源密集型的,一次为300个附件分配RAM大约是200MB RAM (占用资源、每次创建一条新消息、打开库等开销)。所以第二个问题是你的服务器能处理这个问题吗?这只是个观察。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2624199

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档