1

我正在使用 CDO.Message 编写时事通讯应用程序。但是得到一个错误,我们有很多连接。似乎他们有 10 个同时连接的限制。

那么,有没有办法在一个连接上发送多条消息,或者更快地断开连接?有一个 cdo/configuration/smtpconnectiontimeout 参数,但我认为这更多的是关于发件人将尝试多长时间。

(如果我们发送失败,它会在几分钟后再次成功,可能意味着连接已断开)。

(我们使用 CDO 的部分原因是我们从网络服务器中提取 HTML 消息体)

编辑

Public Sub ipSendMail(ByVal toEmail As String, ByVal fromEmail As String, ByVal subject As String, ByVal url As String)
    Dim iMsg As Object
    Set iMsg = CreateObject("CDO.Message")
    iMsg.From = fromEmail
    iMsg.To = toEmail
    iMsg.Subject = subject
    iMsg.CreateMHTMLBody(url)
    iMsg.Configuration.Fields.Item _
        ("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
    iMsg.Configuration.Fields.Item _
        ("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "relay.wwwwwwwwww.net"
    iMsg.Configuration.Fields.Item_
        ("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25
    iMsg.Configuration.Fields.Item _ 
        ("http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout") = 0
    iMsg.Configuration.Fields.Update()
    iMsg.Send()
    Set iMsg = Nothing
End Sub
4

3 回答 3

1
  • 尝试使用 SMTP 而不是 CDO,System.Web.Mail.SmtpMail
  • 您可以实现一个由后台线程处理的队列。后台线程一次只会发送一条消息。
  • 您可以将电子邮件存储在由计划任务或存储过程处理的数据库表中。那些人可以一次再次发送一封邮件,并且如果出错了可以重试。
于 2009-03-12T09:34:44.657 回答
0

通常,无论您发送多少条消息,您都只需要一个连接。

也许你没有发布你应该发布的东西。

编辑:只是一个想法,您要发送到的 SMTP 服务器,可能出于测试原因,它不会恰好是 XP 机器上的主机?

编辑:好的,所以你的 SMTP 服务器很好。

提供 URL 结果的服务器是什么平台?

于 2009-03-12T09:32:11.793 回答
0

我知道 CDO 有时会很古怪,所以我可能会提出以下建议:

队列可能最适合您。之后,我会考虑设置一个没有入站连接限制的本地 SMTP 服务器,该服务器使用智能主机来排队您的出站消息。(这实际上可以很容易地写出来。“S”代表“简单”,实际上是。)

如果一切都失败了......您总是可以推出自己的邮件组件实现 RFC 2821 和 2822(或任何最新和最伟大的 RFC 用于 SMTP 和消息格式)

编辑:如果您发送的通讯对于所有收件人都是相同的,您可以将其发送给虚拟收件人(即 newsletter@yourdomain.com)并将其密送至收件人列表(或收件人列表的子集)。请注意不要被标记为未经请求的商业电子邮件。让您的提供者知道您在做什么。他们必须处理投诉,而您是支付账单的人。让他们知道投诉大多是没有根据的(而且很少而且相差甚远)将有助于缓解他们天生的风险厌恶情绪。

于 2009-03-20T17:23:56.583 回答