CDO.Message [ERLEDIGT]

Nutzung, Komponenten, .NET

Moderator: Moderatoren

Benutzeravatar
Bertram Hansen
1000 working lines a day
1000 working lines a day
Beiträge: 703
Registriert: Di, 27. Sep 2005 8:55
Wohnort: 53902 Bad Münstereifel
Kontaktdaten:

CDO.Message [ERLEDIGT]

Beitrag von Bertram Hansen » Mo, 27. Jan 2014 16:29

Hallo zusammen,

ich suche gerade nach einer Alternative zu SMTPClient(). Wer kennt sich mit CDO.Message aus?

Ich kann das Objekt erzeugen und auch betanken, aber bei der Methode Send scheitere ich.

Code: Alles auswählen

oCdoMessage := CreateObject("CDO.Message")
oCdoConf    := CreateObject("CDO.Configuration")
oCdoConf:fields:setproperty("item","http://schemas.microsoft.com/cdo/configuration/sendusing",2)
oCdoConf:fields:setproperty("item","http://schemas.microsoft.com/cdo/configuration/smtpserver", "smtp.web.de")
oCdoConf:fields:setproperty("item","http://schemas.microsoft.com/cdo/configuration/smtpserverport", 25)
oCdoConf:fields:setproperty("item","http://schemas.microsoft.com/cdo/configuration/smtpusessl", 0)  
oCdoConf:fields:setproperty("item","http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout", 60)
oCdoConf:fields:setproperty("item","http://schemas.microsoft.com/cdo/configuration/smtpauthenticate", 1)  
oCdoConf:fields:setproperty("item","http://schemas.microsoft.com/cdo/configuration/sendusername", "username")
oCdoConf:fields:setproperty("item","http://schemas.microsoft.com/cdo/configuration/sendpassword", "passwort")
oCdoMessage:Configuration := oCdoConf
oCdoMessage:Subject := "Beispiel"
oCdoMessage:setproperty("From", "123@web.de")
oCdoMessage:setproperty("To", "456@web.de")
oCdoMessage:TextBody := "Bla bla bla."

// Fehler bei 
oCdoMessage:Send()

// und auch bei 
oCdoMessage:callMethod('send')
Zuletzt geändert von Bertram Hansen am Di, 28. Jan 2014 8:44, insgesamt 1-mal geändert.
:wave:
Gruß Bertram
http://www.tobax.de

Solange Kakaobohnen an Bäumen wachsen ist Schokolade Obst!

Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 14590
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Kontaktdaten:

Re: CDO.Message

Beitrag von brandelh » Mo, 27. Jan 2014 16:38

Hi,

hier hätte ich eine Variable mit dem tatsächlichen Inhalt erwartet ...

Code: Alles auswählen

oCdoConf:fields:setproperty("item","http://schemas.microsoft.com/cdo/configuration/sendusername", "username")
oCdoConf:fields:setproperty("item","http://schemas.microsoft.com/cdo/configuration/sendpassword", "passwort")
smtp Port und authenticate müssen zusammen passen, was bedeutet 1 ?

Code: Alles auswählen

oCdoConf:fields:setproperty("item","http://schemas.microsoft.com/cdo/configuration/smtpserverport", 25) // Standard unverschlüsslt
oCdoConf:fields:setproperty("item","http://schemas.microsoft.com/cdo/configuration/smtpauthenticate", 1)
// GMX meldete dauernd, dass sie nur noch mit SSL verschlüsselte Zugriffe erlauben ... wie ist das bei WEB.DE ?

Code: Alles auswählen

oCdoConf:fields:setproperty("item","http://schemas.microsoft.com/cdo/configuration/smtpusessl", 0) // KEIN SSL ?
Gibt es die Benutzer und functioniert SMTPClient() mit den genannten Werten ?

Und welcher Fehler wird ausgegeben ?
Gruß
Hubert

Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 14590
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Kontaktdaten:

Re: CDO.Message

Beitrag von brandelh » Mo, 27. Jan 2014 16:41

IMessage Interface

The IMessage interface defines methods and properties used to manage messages.
IID
CD000001-8B95-11D1-82DB-00C04FB1625D
Extends
IDispatch
wenn ich mich nicht irre untestützt Xbase++ kein IDispatch Interface, Jimmy hat aber vor kurzem auf Pablos Umsetzung in der OT4XB hingewiesen, vielleicht geht es damit.
Gruß
Hubert

Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 14590
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Kontaktdaten:

Re: CDO.Message

Beitrag von brandelh » Mo, 27. Jan 2014 16:49

Hier ist ein Auszug aus Pablos xfree.public (ich meine der Autor hatte sich hier auch angemeldet) ...
Subject Re: CDO.Message in xbase++
From eldhose <>
Date Thu, 29 Sep 2011 13:47:15 -0600
Newsgroups xfree.public

Thanks all

i found the solution myself

oconf:= ActiveXObject():create("CDO.Configuration")
oconf:Fields:Item("http://schemas.microsoft.com/cdo/config ... "):Value=2
oconf:Fields:update()
oSmtp:= ActiveXObject():create("CDO.Message")
oSmtp:Configuration =oconf
oSmtp:Subject="Subject"
oSmtp:setProperty("From","name@domain.com")
oSmtp:setProperty("To","xxx@gmail.com")
oSmtp:TextBody="Testing one two three."
oSmtp:Send()
oSmtp:Destroy()//

Thanks & Regards
Eldhose

eldhose <> Wrote:

> hi,
>
> i used "outlook.application" activex object to send email from my xbase++ application
> but it willnot send untill the user open the outlook express .
> i found "CDO.Message" and i send the mail from the configaration which is in the outlook express using
> oSmtp:= ActiveXObject():create("CDO.Message")
> oSmtp:Subject="Subject"
> oSmtp:setProperty("From","name@domain.com")
> oSmtp:setProperty("To","xxx@gmail.com")
> oSmtp:TextBody="Testing one two three."
> oSmtp:Send()
> oSmtp:Destroy()//
> but i cant change the smtp servername and other settings in oSmtp object
> i tried
> oSmtp:Configuration:Fields:Item("http://schemas.microsoft.com/cdo/config ... "):Value=2 but it
> is not working
> VB Syntax is
> oSmtp:Configuration:Fields:Item("http://schemas.microsoft.com/cdo/config ... dusing")=2 but it is
> giving compiler error "invalid value"
>
> How can I change the value of configaration settings
>
> Thanks
> Eldhose
Gruß
Hubert

Benutzeravatar
Bertram Hansen
1000 working lines a day
1000 working lines a day
Beiträge: 703
Registriert: Di, 27. Sep 2005 8:55
Wohnort: 53902 Bad Münstereifel
Kontaktdaten:

Re: CDO.Message

Beitrag von Bertram Hansen » Di, 28. Jan 2014 8:43

Hallo Hubert,

mittlerweile habe ich es hinbekommen. :blob8:

Code: Alles auswählen

oCdoMessage := CreateObject("CDO.Message")
oCdoConf    := CreateObject("CDO.Configuration")
oCdoConf:fields:setproperty("item","http://schemas.microsoft.com/cdo/configuration/sendusing",2)
oCdoConf:fields:setproperty("item","http://schemas.microsoft.com/cdo/configuration/smtpserver", "smtp.web.de")
oCdoConf:fields:setproperty("item","http://schemas.microsoft.com/cdo/configuration/smtpserverport", 25)
oCdoConf:fields:setproperty("item","http://schemas.microsoft.com/cdo/configuration/smtpusessl", 0) 
oCdoConf:fields:setproperty("item","http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout", 60)
oCdoConf:fields:setproperty("item","http://schemas.microsoft.com/cdo/configuration/smtpauthenticate", 1) 
oCdoConf:fields:setproperty("item","http://schemas.microsoft.com/cdo/configuration/sendusername", "username")
oCdoConf:fields:setproperty("item","http://schemas.microsoft.com/cdo/configuration/sendpassword", "passwort")
Der hat gefehlt und den hattest du auch in deinem Beispiel.

Code: Alles auswählen

oCdoConf:fields:callMethod("Update")

Code: Alles auswählen

oCdoMessage:Configuration := oCdoConf
oCdoMessage:Subject := "Beispiel"
oCdoMessage:setproperty("From", "123@web.de")
oCdoMessage:setproperty("To", "456@web.de")
oCdoMessage:TextBody := "Bla bla bla."
oCdoMessage:Send()
:wave:
Gruß Bertram
http://www.tobax.de

Solange Kakaobohnen an Bäumen wachsen ist Schokolade Obst!

Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 14590
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Kontaktdaten:

Re: CDO.Message [ERLEDIGT]

Beitrag von brandelh » Di, 28. Jan 2014 9:11

Ist für CDO Outlook erforderlich oder ist das direkt von Windows ?
Gruß
Hubert

Benutzeravatar
Bertram Hansen
1000 working lines a day
1000 working lines a day
Beiträge: 703
Registriert: Di, 27. Sep 2005 8:55
Wohnort: 53902 Bad Münstereifel
Kontaktdaten:

Re: CDO.Message [ERLEDIGT]

Beitrag von Bertram Hansen » Di, 28. Jan 2014 9:57

Man benötigt (angeblich) kein Outlook dafür. Ich benutze das zurzeit auf einem Rechner auf dem kein Outlook installiert ist.
:wave:
Gruß Bertram
http://www.tobax.de

Solange Kakaobohnen an Bäumen wachsen ist Schokolade Obst!

Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 13137
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Kontaktdaten:

Re: CDO.Message [ERLEDIGT]

Beitrag von Jan » Di, 28. Jan 2014 10:29

Ist das dann ein Ersatz für blat, oder was ist der Sinn von cdo?

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.

Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 14590
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Kontaktdaten:

Re: CDO.Message [ERLEDIGT]

Beitrag von brandelh » Di, 28. Jan 2014 10:46

Hast du zufällig einen LINK der die Parameter (einfach) erklärt ?
Gruß
Hubert

Benutzeravatar
Bertram Hansen
1000 working lines a day
1000 working lines a day
Beiträge: 703
Registriert: Di, 27. Sep 2005 8:55
Wohnort: 53902 Bad Münstereifel
Kontaktdaten:

Re: CDO.Message [ERLEDIGT]

Beitrag von Bertram Hansen » Di, 28. Jan 2014 11:00

Blat setzte ich nicht ein. Wie schon oben erwähnt suche ich nach einem Ersatz für SMTPClient() wegen der zukünftigen Authentifizierung. Und da ist mein Kollege auf dieses Objekt CDO.Message gestoßen. Und jetzt versuche ich das irgendwie in Alaska umzusetzten. Ich bin auch nur über google am suchen. Eventuell hilft dieser Link: http://msdn.microsoft.com/en-us/library ... 10%29.aspx
Ich habe es jetzt auch über den Port 465 hinbekommen.

Code: Alles auswählen

oCdoConf:fields:setproperty("item","http://schemas.microsoft.com/cdo/configuration/smtpserverport", 465)
oCdoConf:fields:setproperty("item","http://schemas.microsoft.com/cdo/configuration/smtpusessl", 1)
:wave:
Gruß Bertram
http://www.tobax.de

Solange Kakaobohnen an Bäumen wachsen ist Schokolade Obst!

Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 14590
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Kontaktdaten:

Re: CDO.Message [ERLEDIGT]

Beitrag von brandelh » Di, 28. Jan 2014 11:25

Ich habe versucht meine Konten einzutragen, zuerst WEB.DE, das ging wenn ich deine Zeilen direkt übernommen habe.
Nun wollte ich die Variablen Teile in Ein Array mit Objekten legen und erhalte beim senden ...

Code: Alles auswählen

Ein Objekt, das unter Verwendung von COM+ Admin SDK hinzugef³gt wurde, kann nicht verõndert oder gel÷scht werden.
Der Server hat die Absenderadresse zurckgewiesen. Die Serverantwort lautet: 550 Sender address is not allowed.
Meldet da WEB.DE dass die Absender eMail-Adresse falsch ist, oder was ?

Auch ich muss bei Gelegenheit weg von der AsiNet (keine Auth möglich) ...
Gruß
Hubert

Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 13137
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Kontaktdaten:

Re: CDO.Message [ERLEDIGT]

Beitrag von Jan » Di, 28. Jan 2014 11:36

Mit den Auth-Sachen kenne ich mich nicht wirklich aus. Aber blat kann AUTH Login und Portangabe. Natürlich wäre es super, wenn ich Mails auch mit Bordmitteln versenden könnte, ohne eine zusätzliche dll beipacken zu müssen. Aber ich habe den Mailversand mit blat halt bislang in mehreren Projekten so umgesetzt, und es läuft einwandfrei. Wenn CDO garantiert unter Xbase++ laufen würde könnte ich mir vorstellen, das umzuschreiben. Aber erst dann.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.

Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 14590
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Kontaktdaten:

Re: CDO.Message [ERLEDIGT]

Beitrag von brandelh » Di, 28. Jan 2014 11:48

Ich vermute BLAT ist schneller und einfacher zu bedienen ;-)
Allein wenn ich mir ansehe wie umfangreich die Beschreibung ist ...

Meinen Fehler habe ich auch gefunden, die FROM Adresse stand noch auf Textkonstante, der Rest schon auf Variablen, das geht natürlich nicht ;-)
Gruß
Hubert

Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 14590
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Kontaktdaten:

Re: CDO.Message [ERLEDIGT]

Beitrag von brandelh » Di, 28. Jan 2014 13:06

Dateianhänge ...

Code: Alles auswählen

With iMsg
 Set .Configuration = iConf
     .To          = "example@example.com, another@example.com"
     .From        = "exampleuser3@example.com, exampleuser4@example.com"
     .Sender      = "example@example.com"
     .Subject     = "Files for Monday's meeting."
     .TextBody    = "Please review the attached files for Monday's meeting.  Thanks." + vbLfCr + vbLfCr

  Set iBp =  .AddAttachment("c:\somefile.doc")
  iBp.ContentMediaType="application/msword"
  Set iBp =  .AddAttachment("c:\anotherfile.html")
  iBp.ContentMediaType="text/html"

  .Send
End With
wollte ich so einbauen:

Code: Alles auswählen

   oCdoBp      := CreateObject("CDO.IBodyPart")
   ...
   oCdoMessage:TextBody := "Hubert testet CDO"
   oCdoBp := oCdoMessage:AddAttachment("Test.DOC")
   oCdoBp:ContentMediaType := "application/msword"
das führt aber zu der Fehlermeldung:

Code: Alles auswählen

------------------------------------------------------------------------------
FEHLERPROTOKOLL von "D:\TEST\TestSmtpCDO\TEST.EXE" Datum: 28.01.2014 12:59:08

Xbase++ Version     : Xbase++ (R) Version 1.90.355
Betriebssystem      : Windows 7 06.01 Build 07601 Service Pack 1
------------------------------------------------------------------------------
oError:args         :
          -> VALTYPE: C VALUE: AddAttachment
          -> VALTYPE: C VALUE: Test.DOC
oError:canDefault   : J
oError:canRetry     : N
oError:canSubstitute: J
oError:cargo        : NIL
oError:description  : Das angegebene Protokoll ist unbekannt.

oError:filename     : NIL
oError:genCode      : NIL
oError:operation    : AddAttachment
oError:osCode       :          -2146697203
oError:severity     :          2
oError:subCode      :       6500
oError:subSystem    : Automation
oError:thread       :          1
oError:tries        : NIL
------------------------------------------------------------------------------
CALLSTACK:
------------------------------------------------------------------------------

Called from MAIN(68)
Hat das schon jemand gelöst ?
Gruß
Hubert

Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 14590
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Kontaktdaten:

Re: CDO.Message [ERLEDIGT]

Beitrag von brandelh » Di, 28. Jan 2014 13:22

Die Fehlermeldung ist irreführend ;-)

Die Datei muss man mit komplettem Pfad aufrufen, dann wird das auch gesendet.
Hier mal mein Code mit einer Klasse für die Verbindungsparameter, die in einem Array gesammelt werden.
GMX nutzt nun SSL Verschlüsselung, der Port wird in der Klasse automatisch bestimmt.
Natürlich habe ich alle Verweise auf meine Zugangsdaten gelöscht, die muss man selbst eingeben

Code: Alles auswählen

#include "Gra.ch"
#include "Xbp.ch"
#include "Common.ch"

#pragma library( "ascom10.lib" )

static cKW1, cKW2, cSendTO

procedure main()
   local nArt, aArt, x
   local oCdoMessage, oCdoConf, oCdoBp

   LoadSecretInfos() // setze cKW1, cKW2, cSendTO
   aArt := LoadMailInfo()

   cls
   nArt := 0
   @ 1,1 say "Test eMail mit CDO "
   for x := 1 to len(aArt)
       @ 2+x,1 say aArt[x]:Name+" => "+alltrim(str(x))
   next
   @ 3+x,1 say "Anbieter: " get nArt
   read

   if nArt < 1 .or. nArt > len(aArt)
      quit
   endif

   if nArt=3
      ? "Eingaben fehlt noch"
      inkey(5)
      quit
   endif

   @5+x,1 say "Senden ... "+str(nArt)

   ? "sendusing",             aArt[nArt]:SendUsing
   ? "smtpserver",            aArt[nArt]:SmtpServer
   ? "smtpserverport",        aArt[nArt]:SmtpServerPort
   ? "smtpusessl",            aArt[nArt]:SmtpUseSSL
   ? "smtpconnectiontimeout", aArt[nArt]:SmtpConTimeOut
   ? "smtpauthenticate",      aArt[nArt]:SmtpAuth
   ? "sendusername",          aArt[nArt]:UserName
   ? "sendpassword",          aArt[nArt]:UserKW

   oCdoMessage := CreateObject("CDO.Message")
   oCdoConf    := CreateObject("CDO.Configuration")
   oCdoBp      := CreateObject("CDO.IBodyPart")

   oCdoConf:fields:setproperty("item","http://schemas.microsoft.com/cdo/configuration/sendusing",             aArt[nArt]:SendUsing      )
   oCdoConf:fields:setproperty("item","http://schemas.microsoft.com/cdo/configuration/smtpserver",            aArt[nArt]:SmtpServer     )
   oCdoConf:fields:setproperty("item","http://schemas.microsoft.com/cdo/configuration/smtpserverport",        aArt[nArt]:SmtpServerPort )
   oCdoConf:fields:setproperty("item","http://schemas.microsoft.com/cdo/configuration/smtpusessl",            aArt[nArt]:SmtpUseSSL     )
   oCdoConf:fields:setproperty("item","http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout", aArt[nArt]:SmtpConTimeOut )
   oCdoConf:fields:setproperty("item","http://schemas.microsoft.com/cdo/configuration/smtpauthenticate",      aArt[nArt]:SmtpAuth       )
   oCdoConf:fields:setproperty("item","http://schemas.microsoft.com/cdo/configuration/sendusername",          aArt[nArt]:UserName       )
   oCdoConf:fields:setproperty("item","http://schemas.microsoft.com/cdo/configuration/sendpassword",          aArt[nArt]:UserKW         )
   oCdoConf:fields:callMethod("Update")

   oCdoMessage:Configuration := oCdoConf
   oCdoMessage:Subject := "Beispiel - HB - CDO"
   oCdoMessage:setproperty("From", aArt[nArt]:UserName )
   oCdoMessage:setproperty("TO",  cSendTO ) // "name1@xyz.la, name2@xxx.yy")
*   oCdoMessage:setproperty("CC",  "...")
*   oCdoMessage:setproperty("BCC", "...")
   oCdoMessage:TextBody := "Hubert testet CDO"

   oCdoBp := oCdoMessage:AddAttachment("D:\TEST\Test.DOC") // Anpassen
   oCdoBp:ContentMediaType := "application/msword"

   @22,10 say "senden ..."
   oCdoMessage:Send()
   oCdoMessage:destroy()
   oCdoConf:destroy()

   @22,10 say "ENDE"

return

class CDOobj
 exported
   var Name
   var SendUsing
   var SmtpServer
   var SmtpServerPort
   var SmtpUseSSL
   var SmtpConTimeOut
   var SmtpAuth
   var UserName
   var UserKW
   METHOD INIT
endclass

METHOD CDOobj:init()
   ::Name           := ""
   ::SendUsing      := 2
   ::SmtpServer     := ""
   ::SmtpServerPort := 25
   ::SmtpUseSSL     := .f.  // .t./1 => Port: 465
   ::SmtpConTimeOut := 60
   ::SmtpAuth       := .t.
   ::UserName       := ""
   ::UserKW         := ""
return self

function LoadMailInfo()
   local aArt := {}, oObj

   oObj := CDOobj():new()
   oObj:Name := "GMX - SSL - AUTH"
   oObj:SmtpServer     := "mail.gmx.net"
   oObj:SmtpUseSSL     := .t.
   if oObj:SmtpUseSSL
      oObj:SmtpServerPort := 465
   else
      oObj:SmtpServerPort := 25
   endif
   oObj:SmtpConTimeOut := 60
   oObj:SmtpAuth       := .t.
   oObj:UserName       := "...@gmx.de"
   oObj:UserKW         := cKW1
   aadd( aArt , oObj )
   oObj := NIL

   oObj := CDOobj():new()
   oObj:Name := "WEB - NO SSL - AUTH"
   oObj:SmtpServer     := "smtp.web.de"
   oObj:SmtpUseSSL     := .f.
   if oObj:SmtpUseSSL
      oObj:SmtpServerPort := 465
   else
      oObj:SmtpServerPort := 25
   endif
   oObj:SmtpConTimeOut := 60
   oObj:SmtpAuth       := .t.
   oObj:UserName       := "...@web.de"
   oObj:UserKW         := cKW2
   aadd( aArt , oObj )
   oObj := NIL

   oObj := CDOobj():new()
   oObj:Name := "NEW"
   oObj:SmtpServer     := ""
   oObj:SmtpUseSSL     := .f.
   if oObj:SmtpUseSSL
      oObj:SmtpServerPort := 465
   else
      oObj:SmtpServerPort := 25
   endif
   oObj:SmtpConTimeOut := 60
   oObj:SmtpAuth       := .t.
   oObj:UserName       := ""
   oObj:UserKW         := ""
   aadd( aArt , oObj )
   oObj := NIL

return aArt

function LoadSecretInfos()
   cKW1 :=  "..." // GMX
   cKW2 :=  "..." // WEB.DE
   cSendTO := "Name1@gmx.de, Name2@web.de"
return nil
Gruß
Hubert

Benutzeravatar
Bertram Hansen
1000 working lines a day
1000 working lines a day
Beiträge: 703
Registriert: Di, 27. Sep 2005 8:55
Wohnort: 53902 Bad Münstereifel
Kontaktdaten:

Re: CDO.Message [ERLEDIGT]

Beitrag von Bertram Hansen » Di, 28. Jan 2014 13:46

Richtig. Dateianhänge funktionierten, wenn vor dem Send()

Code: Alles auswählen

oCdoMessage:AddAttachment("f:\abc\def\Datei.TXT")
hinzugefügt wird.

Jetzt bin ich dabei eventuelle Fehler abzufangen und auszuwerten.
:wave:
Gruß Bertram
http://www.tobax.de

Solange Kakaobohnen an Bäumen wachsen ist Schokolade Obst!

Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 14590
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Kontaktdaten:

Re: CDO.Message [ERLEDIGT]

Beitrag von brandelh » Di, 28. Jan 2014 14:10

Bei meinem CRT Fenster wird immer Text ("Senden ...") ausgegeben (vermutlich STDOUT), was passiert wenn man reine GUI hat ?
Gruß
Hubert

manni1729
Cut&Paste-Entwickler
Cut&Paste-Entwickler
Beiträge: 30
Registriert: Mi, 04. Jun 2008 14:18
Wohnort: Nordhessen

Re: CDO.Message [ERLEDIGT]

Beitrag von manni1729 » Do, 30. Jan 2014 7:50

DANKE!
Das war genau das was ich gesucht habe.
Hier noch eine Erweiterung zum Logging

Code: Alles auswählen

oMessage:Send()
oStream := oMessage:GetStream()
cText := oStream:ReadText()
Gruß Manni

Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 11507
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg

Re: CDO.Message

Beitrag von AUGE_OHR » Do, 30. Jan 2014 23:12

brandelh hat geschrieben:wenn ich mich nicht irre untestützt Xbase++ kein IDispatch Interface,
es ist genau anders herum ;)

Xbase++ und VB unterstützen IDispatch jedoch nicht IUnknown. Deshalb kommt man auch nicht "so" an das MAPIobject
http://msdn.microsoft.com/en-us/library ... 10%29.aspx
brandelh hat geschrieben:Hast du zufällig einen LINK der die Parameter (einfach) erklärt ?
hier von C. Beling

Code: Alles auswählen

 ////////////
 //
 //   ApiSendMail_()
 //     GENERAL DOCUMENTATION
 //
 // iVars:     CDO.ch
 //
 // CDO.Configuration
 //     CDO.Configuration                  http://msdn.microsoft.com/en-us/library/ms526318(v=exchg.10).aspx
 //                                        http://msdn.microsoft.com/en-us/library/ms526953(v=exchg.10).aspx
 //     Individual properties description: http://msdn.microsoft.com/en-us/library/ms526600(v=exchg.10).aspx
 //     CDO.Message                        http://msdn.microsoft.com/en-us/library/ms526453(v=exchg.10).aspx
 //     CDO error codes                    http://msdn.microsoft.com/en-us/library/ms526287(v=exchg.10).aspx
 //                                        http://www.cdolive.com/cdo11.htm with decimal values
 //     Examples                           http://www.paulsadowski.com/wsh/cdo.htm
 //
 //     Xbase++ field initialization:
 //     The synthaxy to be used may be one or another:
 //                  As write in MSN documentation:
 //       objMessage.Configuration.Fields.Item _("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "mail.myserver.com"
 //                  In Xbase++:
 //       1) oFields:setProperty("Item", "http://schemas.microsoft.com/cdo/configuration/smtperver", "mail.server.com")
 //       2) oFields:setProperty("Item", "cdosmtpserver", 'mail.example.com')
 //
 //   FOR CONFIGURATINg NEWS GROUPS
 //             FieldName in :setProperty()
 //       "nntpauthenticate"          - constante http://schemas.microsoft.com/cdo/configuration/nntpauthenticate
 //                                     See "smtpauthenticate"
 //       "postemailaddress"          - constant http://schemas.microsoft.com/cdo/configuration/postemailaddress
 //                                              // The user's return email address for posted messages
 //       "postpassword"              - constant http://schemas.microsoft.com/cdo/configuration/postpassword
 //                                              //The password used with postusername when authenticating
 //                                                // with an NNTP service if the "nntpauthenticate" field
 //                                                // is set to cdoBasic (1)
 //       "postusername"              - constant http://schemas.microsoft.com/cdo/configuration/postusername
 //                                              //The username used with postpassword when authenticating to an NNTP
 //                                                // service if the nntpauthenticate field is set to cdoBasic (1).
 //                                                // The name must be the fully qualified domain account name, such
 //                                                // as (domain)\(username) when authenticating with a service participating
 //                                                // in an Windows NT domain system.
 //       "postuserreplyemailaddress" - constant http://schemas.microsoft.com/cdo/configuration/postuserreplyemailaddress
 //                                                   // The reply email address. This value is used when
 //                                                     // constructing the headers for posted messages
 //       "postusing"                 - constant http://schemas.microsoft.com/cdo/configuration/postusing
 //                                              // Specifies the method used when posting NNTP messages.
 //                                                 //     Values (defined in CDO.ch)
 //                                                 //     cdoPostUsingPickup  := 1  -> Post the message using the local NNTP service pickup directory.
 //                                                 //     cdoPostUsingPort    := 2  -> Post the message using NNTP over the network.
 //
 //   FOR CONFIGURATION SMTP
 //             FieldName in :setProperty
 //       "cdosendemailaddress"       - constant http://schemas.microsoft.com/cdo/configuration/sendemailaddress
 //                                              // The user's email address used when connecting to the SMTP service.
 //       "cdosendpassword"           - constant http://schemas.microsoft.com/cdo/configuration/sendpassword
 //                                              // The password used to authenticate to an SMTP server using basic
 //                                                 //      Values (defined in CDO.ch)
 //                                                 // cdoBasic     := 1 Basic use clear-text authentication. 
 //                                                 //                   When using this option you must provide the user name and 
 //                                                 //                   password through the fields and sendusername sendpassword
 //                                                 //                   dos campos sendusername e sendpassword
 //                                                 // cdoAnonymous := 0 Not authenticate.
 //                                                 // cdoNTLM      := 2 The current process security context is used to authenticate
 //                                                 //                   with the service.
 //       "cdosendusername"           - constant http://schemas.microsoft.com/cdo/configuration/sendusername
 //                                              //The username for authenticating to an SMTP server using basic
 //       "cdosenduserreplyemailaddress" - constant http://schemas.microsoft.com/cdo/configuration/senduserreplyemailaddress
 //                                                 // This value is normally set if the From address is not where email
 //                                                 // replies should be sent.
 //       "cdosendusingmethod"         - constante http://schemas.microsoft.com/cdo/configuration/sendusing
 //                                                 // Specifies the method used to send messages.
 //                                                  // If a local SMTP service is available, this field defaults to
 //                                                  //     Values (defined in CDO.ch)
 //                                                  //     cdoSendUsingPickup   := 1 Send message using the local SMTP service pickup directory.
 //                                                  //     cdoSendUsingPort     := 2 Send the message using the network (SMTP over the network).
 //       "cdosmtpauthenticate"       - constante http://schemas.microsoft.com/cdo/configuration/smtpauthenticate
 //                                              // Specifies the authentication mechanism to use when authentication is required to send
 //                                                 // messages to an SMTP service using a TCP/IP network socket.
 //                                                 // If no value is set for this field, anonymous (no authentication) is assumed.
 //                                                 // This field is used only if the field "cdoSendUsing"
 //                                                 // is set to "cdoSendUsingPort".
 //                                                 // These settings mean that messages are to be sent or posted over the network.
 //                                                 //      Values (defined in CDO.ch)
 //                                                 // cdoBasic     := 1 Basic use clear-text authentication. 
 //                                                 //                   When using this option you must provide the user name and 
 //                                                 //                   password through the fields and sendusername sendpassword
 //                                                 //                   dos campos sendusername e sendpassword
 //                                                 // cdoAnonymous := 0 Not authenticate.
 //                                                 // cdoNTLM      := 2 The current process security context is used to authenticate
 //                                                 //                   with the service.
 //       "cdosmtpconnectiontimeout"  - constante Long http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout
 //                                                // Indicates the number of seconds to wait for a valid socket to be established
 //                                                   // with the SMTP service before timing out.
 //                                                   // The default is 30 seconds.
 //                                                   // This field is ignored unless the field CdoConfiguration.cdoSendUsingMethod
 //                                                   // is set to cdoSendUsingPort (2).
 //       "cdosmtpserver"             - constante http://schemas.microsoft.com/cdo/configuration/smtpserver
 //                                              // This field is used when the field "cdoSendUsing"
 //                                              // is set to cdoSendUsingPort.
 //       "cdosmtpserverport"         - constante http://schemas.microsoft.com/cdo/configuration/smtpserverport
 //                                              // The port on which the SMTP service specified by the smtpserver field is
 //                                                 // listening for connections.
 //                                                 // The default and well-known port for an SMTP service is 25.
 //       "cdosmtpusessl"             - constante http://schemas.microsoft.com/cdo/configuration/smtpusessl
 //                                             // Indicates that Secure Sockets Layer (SSL) should be used when sending messages
 //                                                // using the SMTP protocol over the network.
 //                                                // This field is only meaningful when the field CdoConfiguration.cdoSendUsingMethod
 //                                                // is set to CdoSendUsingPort. The default is False
 //
 //
 //  CDO.Message
 //        http://msdn.microsoft.com/en-us/library/ms526559(v=exchg.10).aspx
 //      :subject                               Objeto da mensagem
 //      :From  (reserved in XBase++)           The string in the From property represents the full messaging addresses of the
 //                                             message author or authors, as shown in the following example:
 //                                             "Jane Doe" <example@example.com>, <example@example.com>, example2@example.com
 //                                             Commas serve as address separators; however, commas are not parsed as separators when
 //                                             they appear in an address that is enclosed in double quotes, such as the following:
 //                                             "John Jones, Jr." <example@example.com>, "Jane Doe" <example@example.com>
 //      :To, :Cc, :Bcc                         Commas serve as address separators; however, commas are not parsed as separators when
 //                                             they appear in an address that is enclosed in double quotes, such as the following:
 //                                             'example@example.com'
 //                                             ""John Jones, Jr." <example@example.com>"
 //                                             "example@example.com, "John Jones, Jr." <example@example.com>, "Jane Doe" <example@example.com>"
 //      :ReplyTo                               destinatário da resposta da mensagem.
 //                                             Assume: e-mail constante em :From
 //      :DSNOptions                            cdoDSNDefault             0  No delivery status notifications are issued.
 //                                             cdoDSNNever               1  No delivery status notifications are issued.
 //                                             cdoDSNFailure             2  Returns a delivery status notification if delivery fails.
 //                                             cdoDSNSuccess             4  Returns a delivery status notification if delivery succeeds.
 //                                             cdoDSNDelay               8  Returns a delivery status notification if delivery is delayed.
 //                                             cdoDSNSuccessFailOrDelay 14  Returns a delivery status notification if delivery succeeds,
 //                                                                          fails, or is delayed.
 //                                             See in CabDefs.ch cabMAIL_NOTIFY ...
 //      :KeyWords                              The keywords of a message can be useful for determining if the message is of
 //                                             interest to the reader, or for searching for relevant messages in a collection.
 //                                             The string in the Keywords property can represent a single keyword or multiple keywords.
 //                                             A keyword string can optionally contain spaces, such as the following:
 //                                                       "1997 payroll"
 //                                                       Multiple keywords in the list are separated by commas, as in the following example:
 //                                                       "operating systems,Windows NT,functions"
 //
 //      AddAttachment(<cFullPathName>) pode-se ter vários métodos
 //      Other many properties, also to send HTML, see the URL above
 //
 //      'The line below shows how to send using HTML included directly in your script
 //      objMessage.HTMLBody = "<h1>This is some sample message html.</h1>"
 //
 //      'The line below shows how to send a webpage from a remote site
 //      'objMessage.CreateMHTMLBody "http://www.paulsadowski.com/wsh/"
 //
 //      'The line below shows how to send a webpage from a file on your machine
 //      'objMessage.CreateMHTMLBody "file://c|/temp/test.htm"
 //
 //        Author:  Beling
 //        Date:    05.12.2012
 //        Revised:
 //
 /////
es gibt also noch jede Menge Parameter die noch nicht in diesem Thread berücksichtigt wurden.

ich würde ComLastMessage() in einem BEGIN SEQUENCE verwenden und das ganze, wie auch SOCmapi, im eigenen Thread laufen lassen.

übrigens : die CDO.CH erhält man mit

Code: Alles auswählen

Tlb2CH.EXE "CDO.Configuration" > CDO.CH
brandelh hat geschrieben:Ist für CDO Outlook erforderlich oder ist das direkt von Windows ?
CDO arbeitet über MAPI.
http://msdn.microsoft.com/en-us/library ... 10%29.aspx
Bild
es muss IMHO ein MAPI Client aktive sein wo sich CDO anmelden kann.

Anmerkung : normaler weise wird CDO mit Exchange Server und ASP verwendet.http://msdn.microsoft.com/en-us/library ... 10%29.aspx
Bild
brandelh hat geschrieben:das führt aber zu der Fehlermeldung:
...
Hat das schon jemand gelöst ?
man sollte auch prüfen ob die Attachments wirkich raus gegangen sind ...

Code: Alles auswählen

FUNCTION SendAnonimousEMail_(cSmtpServer, nSendingMethod,   nSmtpServerPort,    lSmtpUseSsl,;
                                          nAuthenticate,    nConnectionTimeOut, cSenderName,;
                                          cSenderPassword,  cSenderEmail,       cSenderReplyEmail,;
                                          cSubject,         cFrom,              cTo,;
                                          cCc,              cBcc,               cReplyTo,;
                                          cHTMLBody,        cTextBody,          cKeyWords,;
                                          aAttachment,      nDSNOptions,        cError)

LOCAL  oThread, cId, lOk, nCount, nInd, nLen, hFree, cLocked

if     !Empty(cTo)
       cId := cTo
elseif !Empty(cCc)
       cId := cCc
elseif !Empty(cBcc)
       cId := cBcc
endif
if cId <> NIL
   cId := ('E-mail to ' + cId)
endif

oThread := Thread():new(NIL, cId)
lOk     := oThread:start({|| ApiSendMail_(cSmtpServer,     nSendingMethod,     nSmtpServerPort,    lSmtpUseSsl,;
                                          nAuthenticate,   nConnectionTimeOut, cSenderName,;
                                          cSenderPassword, cSenderEmail,       cSenderReplyEmail,;
                                          cSubject,        cFrom,              cTo,;
                                          cCc,             cBcc,               cReplyTo,;
                                          cHTMLBody,       cTextBody,          cKeyWords,;
                                          aAttachment,     nDSNOptions,        @cError)})
if lOk
   oThread:synchronize(0)
   do While oThread:active
      Sleep(10)
   enddo
                  //
                  //    Tendo em vista que CDO.Message pode reter os anexos como reservados até
                  //          a finalização do processo que enviou a mensagem, forçaremos a
                  //    execução do "Garbage Collector" do Xbase++ a fim de liberar todos os
                  //    recursos usados por Thread(), encerrando-a imediatamente
   oThread := NIL                // Para forçar a liberação da Thread e recursos envolvidos
                  //
                  //    Esperaremos até 15 segundos para ver se cada anexo já pode ser usado.
                  //    Caso este tempo seja insuficiente, é acrescentada uma mensagem com o
                  //    motivo no parâmetro <cError>.
   nCount := 0
   if !Empty(aAttachment)
      nLen   := Len(aAttachment)
      for nInd  := 1 to nLen
          hFree := FOpen(aAttachment[nInd])
          if hFree > 0
             FClose(hFree)
             nCount := 0
          else
             Sleep(50)
             if ++nCount == 30
                exit
             endif
             nInd -= 1
          endif
      next
   endif
   if nCount  == 30
      cLocked := ('Attachments: ' + aAttachment[nInd] + CR +;
                  'locked by System')
      if Empty(cError)
         cError := cLocked
      else
         cError += (cError + CR + cLocked)
      endif
   endif
   lOk := !Empty(cError)
endif
RETURN lOk
gruss by OHR
Jimmy

Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 11507
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg

Re: CDO.Message [ERLEDIGT]

Beitrag von AUGE_OHR » So, 02. Feb 2014 0:23

bei WEB.DE ("smtp.web.de") wird nicht der Standart SSL Port 465 benutzt sondern 587
SSL_WEB_DE.PNG
SSL_WEB_DE.PNG (46.8 KiB) 9756 mal betrachtet
nun verwendet WEB.DE "STARTTLS" ...

ich hatte also den Port 587 eingetragen und SSL eingeschaltet und ... kein Connect :angry5:
irgendwann hab ich gelesen das STARTTLS "vom Server" initialisiert wird und das dann SSL aktiviert ... hm

dann fand ich die Website http://www.autoit.de/index.php?page=Thr ... post144707
Web.de:
$SmtpServer = "smtp.web.de" ; address for the smtp-server to use - REQUIRED
$IPPort = 587 ; port used for sending the mail normaly 25
$ssl = 0 ; enables/disables secure socket layer sending - put to 1 if using httpS

HotMail:
$SmtpServer = "smtp.live.com" ; address for the smtp-server to use - REQUIRED
$IPPort = 25 ; port used for sending the mail normaly 25
$ssl = 1 ; enables/disables secure socket layer sending - put to 1 if using httpS

Google:
$SmtpServer = "smtp.googlemail.com" ; address for the smtp-server to use - REQUIRED
$IPPort = 465 ; port used for sending the mail normaly 25
$ssl = 1 ; enables/disables secure socket layer sending - put to 1 if using httpS
hm ... dachte ich mir und hab dann das probiert

Code: Alles auswählen

oCdoConf:fields:setproperty("item","http://schemas.microsoft.com/cdo/configuration/smtpserverport", 587)
oCdoConf:fields:setproperty("item","http://schemas.microsoft.com/cdo/configuration/smtpusessl", 0)
CONNECT :)

Nachtrag :
es muss IMHO ein MAPI Client aktive sein wo sich CDO anmelden kann.
wenn ein MAPI Client aktive ist kann CDO das Profil direkt nutzen und eine "configuration" ( mit o:Update() ) wäre nicht notwendig.
ein unter XP, wo es Outlook Express gibt, laufende CDO Anwendung muss nicht unter Win 7 / 8x laufen wenn man nicht alle Property einzeln gesetzt hat.
gruss by OHR
Jimmy

Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 14590
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Kontaktdaten:

Re: CDO.Message [ERLEDIGT]

Beitrag von brandelh » So, 02. Feb 2014 12:02

Ja, aber nur für STARTTLS oder TLS, WEB.DE und GMX.DE sind ja im Prinzip identisch und bei GMX steht,
wenn man TLS nicht verwenden kann, soll man Standard SSL nutzen. :wink:
Gruß
Hubert

Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 14590
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Kontaktdaten:

Re: CDO.Message [ERLEDIGT]

Beitrag von brandelh » Mi, 09. Apr 2014 17:11

In einem anderen Thread wurde dieses Thema aufgenommen und um neue Infos ergänzt. GMX und WEB.DE akzeptieren aktuell ja nur noch verschlüsselte Verbindungen.
manni1729 hat geschrieben:Fehler nach Hause melden - Mi, 09. Apr 2014 14:30
Ist jetzt bei unseren Kunden im Einsatz mit Web.de, Telekom, 1und1 und Gmx.
Es gab zwar einige Probleme welcher Port verwendet werden muss, aber es geht.

1und1 und Web.de, Port=25 SSL=Ja

Gmx , Port=465 SSl=Ja

Gruß Manni
AUGE_OHR hat geschrieben:
brandelh hat geschrieben: Ich muss da was falsch übersetzt haben, bei mir hat es nicht funktioniert.
hm ... ich habe "deine" Version zum laufen bekommen.
Code:
function LoadMailInfo()
...
oObj := CDOobj():new()
oObj:Name := "WEB - SSL - AUTH"
oObj:SmtpServer := "smtp.web.de"
oObj:SmtpUseSSL := .T.
oObj:SmtpServerPort := 587
oObj:SmtpConTimeOut := 60
oObj:SmtpAuth := .T.
oObj:UserName := cUser1
oObj:UserKW := cKW1
aadd( aArt , oObj )
oObj := NIL
in meinem CODE hatte ich o:SmtpUseSSL benutzt um den Port automatisch an o:SmtpServerPort zuzuweisen.
Das geht so aber nicht, da o:SmtpUseSSL := .t. für GMX mit 465 stimmt, nicht aber für WEB.DE oder 1und1 ... die brauchen entweder 587 oder gleich 25 ...
AUGE_OHR hat geschrieben: oCdoConf:fields:setproperty("item","http://schemas.microsoft.com/cdo/config ... serverport", 587)
oCdoConf:fields:setproperty("item","http://schemas.microsoft.com/cdo/config ... smtpusessl", 0)
CONNECT ...
so geht das nicht mehr, für WEB.DE muss man

Code: Alles auswählen

   oObj:SmtpServer     := "smtp.web.de"
   oObj:SmtpUseSSL     := .T.
   oObj:SmtpServerPort := 25
schreiben
Gruß
Hubert

Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 11507
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg

Re: CDO.Message [ERLEDIGT]

Beitrag von AUGE_OHR » Mi, 09. Apr 2014 22:24

brandelh hat geschrieben:so geht das nicht mehr, für WEB.DE muss man

Code: Alles auswählen

   oObj:SmtpServer     := "smtp.web.de"
   oObj:SmtpUseSSL     := .T.
   oObj:SmtpServerPort := 25
schreiben
hm ... wurde da wieder was geändert ?
auf Port 587 komme ich gar nicht mehr rein :
Ein Objekt, das unter Verwendung von COM+ Admin SDK hinzugefügt wurde, kann nicht verändert oder gelöscht werden.
Der Server hat die Absenderadresse zurckgewiesen. Die Serverantwort lautet: 550 Insufficient security or privacy level.
aber wie von dir beschrieben auf Port 25.
gruss by OHR
Jimmy

Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 14590
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Kontaktdaten:

Re: CDO.Message [ERLEDIGT]

Beitrag von brandelh » Do, 10. Apr 2014 8:39

das mit den Ports hat mich auch ziemlich gewundert, weil GMX und WEB.DE ja eigentlich beide zu 1und1 gehören.
Gruß
Hubert

manni1729
Cut&Paste-Entwickler
Cut&Paste-Entwickler
Beiträge: 30
Registriert: Mi, 04. Jun 2008 14:18
Wohnort: Nordhessen

Re: CDO.Message [ERLEDIGT]

Beitrag von manni1729 » Do, 10. Apr 2014 20:54

brandelh hat geschrieben:das mit den Ports hat mich auch ziemlich gewundert, weil GMX und WEB.DE ja eigentlich beide zu 1und1 gehören.
...und es hat mich auch einige Zeit gekostet das heraus zu finden :banghead:

Antworten