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 ответа

  • Попробуйте использовать SMTP вместо CDO, System.Web.Mail.SmtpMail
  • Вы можете реализовать очередь, которая обрабатывается фоновым потоком. Фоновый поток будет отправлять только одно сообщение за раз.
  • Вы можете сохранить электронную почту в таблице базы данных, которая обрабатывается запланированной задачей или хранимой процедурой. Они могут снова отправлять одно письмо за раз, и имеют преимущество в том, что они могут повторить попытку, если это пойдет не так.

Я знаю, что время от времени CDO может показаться странным, поэтому я могу сделать следующие предложения:

Очередь, вероятно, будет работать лучше для вас. После этого я хотел бы рассмотреть вопрос о настройке локального SMTP-сервера без ограничений на входящие подключения, который использует смарт-хост для постановки в очередь ваших исходящих сообщений. (Это может быть написано довольно легко. "S" для "Simple", и это на самом деле.)

Если все остальное терпит неудачу... Вы всегда можете свернуть свой собственный почтовый компонент, реализующий RFC 2821 и 2822 (или любой другой, самый последний и лучший RFC для SMTP и формата сообщений).

РЕДАКТИРОВАТЬ: Если рассылка, которую вы отправляете, идентична для всех получателей, вы можете адресовать ее фиктивному получателю (например, newsletter@yourdomain.com) и BCC в список получателей (или подмножество списка получателей). Только будьте осторожны, чтобы не быть помеченным как нежелательная коммерческая электронная почта. Сообщите вашему провайдеру, что вы делаете. Они должны иметь дело с жалобами, и вы тот, кто оплачивает счет. Сообщение им о том, что жалобы будут в основном необоснованными (и лишь немногие и далеко друг от друга), поможет смягчить их естественное неприятие риска.

Обычно вам нужно только одно соединение, независимо от того, сколько сообщений вы отправляете.

Возможно, вы не выпускаете то, чем должны быть.

Изменить: Просто мысль, SMTP-сервер, который вы отправляете, не может быть размещен на XP-сервере, возможно, по причинам тестирования?

Изменить: Хорошо, так что ваш SMTP-сервер в порядке.

На какой платформе сервер предоставляет результат URL?

Другие вопросы по тегам