CDO.Message - ко многим связям - PullRequest
1 голос
/ 12 марта 2009

Я пишу приложение для рассылки новостей с использованием 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 ]

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

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

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

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

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

0 голосов
/ 12 марта 2009

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

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

Редактировать : Просто подумайте, сервер SMTP, на который вы отправляете, не может быть хостом на компьютере с XP, возможно, по причинам тестирования?

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

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

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