AW: Datei senden mit CDO
21.10.2008 10:38:52
Marc
Hallo Richard,
vielen Dank für Deine Antwort! Ich habe mich inzwischen auch etwas in die Materie von CDO eingelesen. Also zuerst mal, ich habe Deinen Code mal getestet, indem ich meine eigene Mail-Adresse als Sender und Empfänger eingegeben habe. Das hat leider nicht funktioniert. Ich gehe mal davon aus, dass entweder der Port nicht richtig war, was aber nicht an Dir liegt sondern an den hier gegebenen Einstellungen oder dass die Firewall einen Zugriff von einem anderen Programm als Outlook erkannt und ihn geblockt hat. Auch das liegt dann nicht an Deinem Code! Ich wollte nämlich mit Hilfe Deines Codes auch Deinen Vorschlag Nummer zwei umsetzen.
Also Referenz habe ich mal diese Seite http://www.rondebruin.nl/cdo.htm
herangezogen. Auch der Beispielcode von dieser Seite scheitert an der gleichen Fehlermeldung. Ich habe weitergesucht und einen Code gefunden, der die Maileinstellungen vom Server abruft und benutzt bzw. der zwei über CDO sendet aber wiederum das Mailpostfach benutzt. Das funktioniert lustigerweise. Aber hier taucht nicht nur die Warnmeldung auf, dass eine Applikation versucht eine Mail zu senden sondern auch gleich noch eine weitere Warnmeldung, die aussagt, dass eine Applikation versucht auf die Einstellungen des Mail-Postfaches zuzugreifen. Anstatt einmal muss man dabei also zweimal auf ja klicken. Das ist das Gegenteil von dem, was ich erreichen wollte. :-)
Der Code dafür ist dieser:
Option Explicit
Sub DateiSenden()
Dim objSession As Object
Dim objMessage As Object
Dim objRecipient As Object
'Create the Session Object.
Set objSession = CreateObject("mapi.session")
'Logon using the session object.
'Specify a valid profile name if you want to.
'Avoid the logon dialog box.
objSession.Logon profileName:="MS Exchange Settings"
'Add a new message object to the OutBox.
Set objMessage = objSession.Outbox.Messages.Add
'Set the properties of the message object.
objMessage.subject = "This is a test."
objMessage.Text = "This is the message text."
'Add a recipient object to the objMessage.Recipients collection.
Set objRecipient = objMessage.Recipients.Add
'Set the properties of the recipient object.
objRecipient.name = "name@domain.de" '
Grundsätzlich ist auch zu beachten, dass man im VBA Projekt in "Extras - Verweise..." den Punkt Microsoft CDO 1.21 anklickt. Sonst funktionieren all diese CDO Codes sowieso nicht.
Außerdem habe ich so erfahren, dass man eine geöffnete Datei nicht einfach per CDO versenden kann. Man muss zuerst eine temporäre Sicherheitskopie erstellen. Das passiert bei der Routine, die hinter dem Befehl "SendMail" steht ebenfalls. Man achtet nur nie darauf...
Ich bin nun dazu übergegangen einfach ein Mailfenster zu öffnen, in dem bereits die Empfängeradresse und der Betreff eingegeben sind. Die Datei ist dabei auch direkt angehängt. Der Benutzer muss dafür nur noch auf senden klicken. Ich glaube, das ist die sauberste Lösung, ohne tiefer ins System eingreifen zu müssen.
Zur Info, der sehr einfache Code dafür ist folgender:
Sub DateiSenden()
Dim Betreff As String
Betreff = "XX_" & Range("J8").Text
Application.Dialogs(xlDialogSendMail).Show "name@domain.de", Betreff
End Sub
Trotzdem vielen Dank für Deine Mühe und Deine hilfreichen Antworten! Du hast mir sehr weitergeholfen!!!
Herzliche Grüße,
Marc