2009-03-12 11 views
1

J'écris une application de newsletter en utilisant CDO.Message. Mais récupérons une erreur que nous avons à beaucoup de connexions. Il semble qu'ils ont une limite de 10 connexions simultanées.CDO.Message - à plusieurs connexions

Alors, existe-t-il un moyen d'envoyer plusieurs messages sur une connexion ou de se déconnecter plus rapidement? Il existe un paramètre cdo/configuration/smtpconnectiontimeout, mais je pense que cela dépend davantage de la durée d'essai de l'expéditeur.

(Si nous envoyons, il échoue, il réussira à nouveau après quelques minutes, ce qui signifie probablement que la connexion est déconnectée).

(Nous utilisons CDO en partie parce que nous retirons le corps du message HTML à partir d'un serveur Web)

Modifier:

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

Serait utile de nous dire au moins avec quelle langue vous écrivez ceci, aussi. –

+0

Public Sub ipSendMail (ByVal toEmail As String, ByVal fromEmail As String, sous réserve ByVal As String, url ByVal As String) Dim IMsg As Object = CreateObject ("CDO.Message") iMsg.From = fromEmail iMsg.To = toEmail iMsg.Subject = sujet 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

Répondre

0

Ordinairement vous seulement besoin d'une connexion indépendamment du nombre de messages que vous êtes envoi.

Peut-être que vous ne libérez pas quelque chose que vous devriez être.

Modifier: Juste une idée, le serveur SMTP que vous envoyez, il ne serait pas héberger sur une boîte XP peut-être pour des raisons de test?

Modifier: Ok, votre serveur SMTP fonctionne correctement.

Sur quelle plate-forme le serveur fournit-il le résultat de l'URL?

+1

Tous les exemples que j'ai vus commencent par un CreateObject ("CDO.Message"). et se termine par un .Send, je ne vois pas comment je peux réutiliser une connexion. (Comment libérer est la question) – Olav

+0

Eh bien un objet Message CDO ne représente pas nécessairement une connexion, et il n'y a aucune raison pour laquelle vous ne pouvez pas réutiliser l'objet CDO.Message. Comme je l'ai commenté sur la question, montrez-nous du code et nous pouvons vous aider. J'ai fait beaucoup de travail avec CDO envoyant plusieurs messages que je n'ai jamais eu ce problème. – AnthonyWJones

+0

Le SMTP est chez le fournisseur. J'espère que le code que j'ai posté dans les commentaires ci-dessus est lisible. Bien que je pense que la seule chose que je pourrais essayer en ce qui concerne le flux de travail est de garder un objet, et de définir les champs pour chaque message. (A propos de XP - aucune idée, mais il est chez un fournisseur, donc je pense qu'il devrait être professionnel) – Olav

1
  • Essayez d'utiliser SMTP au lieu de CDO, System.Web.Mail.SmtpMail
  • Vous pouvez mettre en œuvre une file d'attente, qui est traité par un fil d'arrière-plan. Le thread d'arrière-plan n'envoie qu'un seul message à la fois.
  • Vous pouvez stocker l'e-mail dans une table de base de données, qui est traitée par une tâche planifiée ou une procédure stockée. Ceux-ci peuvent à nouveau envoyer un mail à la fois, et ont l'avantage de pouvoir réessayer, si ça ne va pas.
+0

Je connais System.Web.Mail.SmtpMail, puisque c'est un objet, il est plus probable que je puisse réutiliser une connexion. Je ne sais pas si je peux faire iMsg.CreateMHTMLBody (url) (il inclut des graphiques dans le message). (Le problème principal est de pouvoir envoyer plus de mails, et ne pas bloquer les autres utilisateurs de notre smtp) – Olav

+0

Un corps HTML est juste une pièce jointe de type text/html. Vous pouvez l'ajouter à la collection de pièces jointes de SmtpMail. – Andomar

+0

Le point est que CDO convertit de sorte que les graphiques sont inclus directement dans l'e-mail – Olav

0

Je sais que CDO peut être bizarre parfois, donc ce sont les suggestions que je ferais:

Une file d'attente serait probablement le meilleur pour vous. Après cela, je considérerais la mise en place d'un serveur SMTP local sans limite de connexion entrante qui utilise un smarthost pour mettre en file d'attente vos messages sortants. (Le "S" est pour "Simple" et il l'est réellement.)

Si tout le reste échoue ... Vous pouvez toujours lancer votre propre composant mailer en implémentant les RFC 2821 et 2822 (ou EDIT: Si le bulletin que vous envoyez est identique pour tous les destinataires, vous pouvez l'adresser à un destinataire fictif (par exemple [email protected]) et à BCC. à la liste des destinataires (ou un sous-ensemble de la liste des destinataires). Faites juste attention à ne pas être signalé comme un email commercial non sollicité. Laissez votre fournisseur savoir ce que vous faites. Ils doivent traiter les plaintes, et vous payez la facture. Leur faire savoir que les plaintes seraient pour la plupart injustifiées (et peu nombreuses) aidera à apaiser leur aversion au risque naturel.

Questions connexes