CDO.Message - 对很多连接

时间:2009-03-12 09:27:45

标签: vb6 cdo.message

我正在使用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

3 个答案:

答案 0 :(得分:1)

  • 尝试使用SMTP而不是CDO,System.Web.Mail.SmtpMail
  • 您可以实现由后台线程处理的队列。后台线程一次只发送一条消息。
  • 您可以将电子邮件存储在数据库表中,该表由计划任务或存储过程处理。那些可以再次发送一封邮件,并且如果出错则具有重试的优势。

答案 1 :(得分:0)

通常,无论您发送的邮件数量多少,您都只需要一个连接。

也许你没有发布你应该做的事情。

编辑:只是想一想,你要发送的SMTP服务器,它可能不会出现在XP机箱上,也许是出于测试原因?

修改:确定您的SMTP服务器正常。

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

答案 2 :(得分:0)

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

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

如果所有其他方法都失败了......您可以随时推出自己的邮件程序组件,实现RFC 2821和2822(或者最新和最好的RFC用于SMTP和邮件格式)

编辑:如果您发送的简报对所有收件人都是相同的,您可以将其发送给虚拟收件人(即newsletter@yourdomain.com)并将其发送到收件人列表(或收件人列表的子集) 。请注意不要被标记为未经请求的商业电子邮件。让您的提供商知道您在做什么。他们必须处理投诉,而你是支付账单的人。让他们知道投诉大多是没有根据的(而且很少和很少)将有助于缓和他们的自然风险规避。