2009-03-12 2 views
1

Я пишу заявку на рассылку новостей с помощью CDO.Message. Но верните ошибку, которую мы связываем со многими подключениями. Кажется, у них есть ограничение на 10 одновременных соединений.CDO.Message - для многих соединений

Итак, есть ли способ отправить несколько сообщений по одному соединению или быстрее отключиться? Существует параметр cdo/configuration/smtpconnectiontimeout, но я думаю, что это больше о том, как долго будет отправляться отправитель.

(Если мы отправим, ant оно не удастся, после нескольких минут это снова будет успешным, что, вероятно, означает, что соединение отключено).

(Мы используем CDO отчасти потому, что мы вытягивать тело HTML сообщение с веб-сервера)

Edit:

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 
+0

Было бы полезно, по крайней мере, рассказать нам, с какого языка вы это пишете. –

+0

Public Sub ipSendMail (ByVal toEmail As String, ByVal fromEmail As String, ByVal субъект As String, ByVal URL As String) Dim IMSG As Object = CreateObject ("CDO.Message") iMsg.From = fromEmail iMsg.To = toEmail iMsg.Subject = предмет iMsg.CreateMHTMLBody (URL) – Olav

+0

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 _ – Olav

ответ

0

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

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

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

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

Какая платформа является сервером, предоставляющим результат URL?

+1

Все примеры, которые я видел, начинаются с CreateObject («CDO.Message»). и заканчивается .Send, я не могу видеть, как я могу повторно использовать одно соединение. (Как освободить вопрос) – Olav

+0

Ну, объект сообщения CDO не обязательно представляет собой соединение, и нет причин, по которым вы не можете повторно использовать объект CDO.Message. Как я прокомментировал вопрос, покажите нам какой-то код, и мы можем помочь. Я проделал большую работу с CDO, отправляющей несколько сообщений. У меня никогда не было этой проблемы. – AnthonyWJones

+0

SMTP находится у провайдера. Код надежды, который я разместил в комментариях выше, можно прочитать. Хотя я думаю, что единственное, что я мог бы попробовать в отношении потока работы, - это сохранить один объект и повторно использовать поля для каждого сообщения. (О XP - не знаю, но это у провайдера, поэтому я думаю, что это должно быть профессионально) – Olav

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

Я знаю System.Web.Mail.SmtpMail, так как это один объект, более вероятно, что я смогу повторно использовать соединение. я не знаю, могу ли я сделать iMsg.CreateMHTMLBody (url) (он включает в себя графику в сообщении). (Основная проблема - отправлять больше писем, а не блокировать других пользователей нашего smtp). – Olav

+0

Тело HTML - это просто вложение типа text/html. Вы можете добавить его в коллекцию вложений SmtpMail. – Andomar

+0

Дело в том, что CDO конвертируется так, что графика включена непосредственно в адрес электронной почты. – Olav

0

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

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

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

EDIT: Если рассылка, которую вы отправляете, идентична для всех получателей, вы можете обратиться к фикчированному получателю (т.е. [email protected]) и BCC его в список получателей (или подмножество списка получателей). Просто будьте осторожны, чтобы не быть помечены как незапрашиваемая коммерческая электронная почта. Сообщите своему провайдеру, что вы делаете. Им приходится иметь дело с жалобами, и вы тот, кто платит счет. Предоставляя им знать, что жалобы будут в основном необоснованными (и мало и далеко друг от друга), помогут смягчить их естественное неприятие риска.

 Смежные вопросы

  • Нет связанных вопросов^_^