Autor Thema: E-Mailversand mit Excel Makro - Problem mit Anhängen  (Gelesen 26821 mal)

Offline Rocky89

  • Frischling
  • *
  • Beiträge: 7
Sehr geehrte Damen und Herren,

vorab möchte ich festhalten, dass ich bislang wenig Erfahrung mit Foren habe. Also sollte ich wichtige Angaben vergessen haben oder weitere Informationen benötigt werden, dann einfach bitte eine kurzen Post schreiben.

In den letzten Wochen habe ich ein VBA-Makro entwickelt, dass es mir ermöglicht "Serien-Mails" mit einer personalisierten Anrede zu versenden. Dafür werden die Anrede und der Nachname als Variable gesetzt und aus einer Excel-Liste ausgelesen.

Der "Body" der Mail wird aus einem HTML-Dokument erstellt, wobei dort die Anrede als Variable definiert ist.

Zusätzlich werden dann die Dateien angehangen und alle Mails (ca. 500 Adressen) automatisch seperat erstellt und verschickt.
(Wenn Sie das probieren, kann es sein, dass Sie eine Meldung erhalten, dass Sie über keine digitale Signatur verfügen, diese hatte ich auch, kann aber unter den Sicherheitseinstellungen geändert werden. Dann wird dieser Dialog nicht mehr angezeigt. Nach Rücksprache mit dem IBM-Helpdesk unbedenklich)

Nun kommt das Problem. Solange Empfänger innerhalb des Hauses (Kollegen) die Mail erhalten, ist alles perfekt und die Anhänge sind dabei.

Allerdings erhalten auch viele Externe (Kunden) diese Mail und dort passt zwar die Formatierung etc, aber es sind keine Anhänge dabei.

Ich habe keine Idee, wo der Fehler zu finden ist. Ich habe die Mail auch schon an meine private Mail-Adresse versandt (keine Filter, Firewall etc.) auch dort waren die Anhänge nicht dabei.

Leider bin ich kein Programmierer und den VBA-Code habe ich zu großen Teilen zusammen kopiert und dann angepasst.

Nun noch ein paar Angaben:
- Lotus Notes 8.5
- Office 2003
- Windows XP

Hier nun noch der VBA-Code:

Sub LotusMail(Empfaenger As String, Inhalt As String)
   
' Variablen
Const EMBED_ATTACHMENT = 1454
Dim server As String, mailfile As String
Dim session As Object
Dim db As Object
Dim doc As Object
Dim rtitem As Object
Dim EmbeddedObject As Object
 
' Auslesen der Mail-DB
Set session = CreateObject("Notes.NotesSession")
server = session.GetEnvironmentString("MailServer", True)
mailfile = session.GetEnvironmentString("MailFile", True)
Set db = session.getdatabase(server, mailfile)

' E-Mail vorbereiten
Set doc = db.createdocument()
doc.Form = "Main Topic"
doc.SendTo = Empfaenger
doc.Subject = Cells(2, 5).Value
doc.principal = "Finanzinstitute@nordlb.de"
doc.viewicon = "75"
doc.FROM = session.UserName

' Inhalt
session.ConvertMIME = False ' Do not convert MIME to rich text
Set stream = session.CreateStream
Set body = doc.CreateMIMEEntity
Call stream.WriteText(Inhalt)
'ENC_IDENTITY_8BIT used because of technote found on notes.net
'http://www-10.lotus.com/ldd/nd6forum.nsf/55c38d716d632d9b8525689b005ba1c0/aeedaf28e47546ad85256f6a000a4b48?OpenDocument
Call body.SetContentFromText(stream, "text/html;charset=iso-8859-1", ENC_IDENTITY_8BIT)

' ANHANG
Set rtitem = doc.CREATERICHTEXTITEM("ProjectDescription")
For Each Cell In Range("E8:E18")
If Cell = "" Then Exit For
Dateianhang = Cell.Value
Set EmbeddedObject = rtitem.EMBEDOBJECT(EMBED_ATTACHMENT, "", Dateianhang) 'Dateianhang mit Pfad und Dateiname überschreiben
Next

'SMTP-Originator
doc.PostedDate = Format$(Now, "dd.mm.yyyy") + " " + Format$(Now, "hh:nn:ss")
Call doc.Send(True, "")

'Aufräumarbeiten
Set doc = Nothing
Set db = Nothing
Set body = Nothing
Set stream = Nothing
session.ConvertMIME = True
End Sub
 
Sub Mail_senden()

'Für jede Zelle in Bereich d2 bis zur letzen belegten Zelle in Spalte d wird eine Mail versandt.

Dim emailText, Inhalt As String
Dim Cell As Range
emailText = dat_ReadText(Range("E5").Text)
For Each Cell In Range("d2:d" & Cells(Rows.Count, "d").End(xlUp).Row)
If Cell = "" Then Exit For
Inhalt = Replace(emailText, "__ANREDE__", Cell(1, -2) & " " & Cell(1, -1) & " " & Cell(1, 0) & ",")
Call LotusMail(Cell.Value, Inhalt)
Next
End Sub

Public Function dat_ReadText(DerPfad As String) As String
    Dim sText As String, iFrei As Integer, i As Long
    On Error GoTo Fehler
    sText = ""
    iFrei = FreeFile
    Open DerPfad For Binary Access Read As #iFrei
    i = LOF(iFrei)
    sText = String(i, 0)
    Get #iFrei, , sText
    Close #iFrei
    dat_ReadText = sText
    Exit Function
Fehler:
    MsgBox Err.Description
End Function

Kann der Fehler an unserer Firewall liegen, dass wir evtl. bei ausgehenden Mails die Anhänge entfernen?
Kann es der MIME-Konvertierung liegen? (hab ich mal in einem anderen Thread gelesen, aber ich habe keine Ahnung was das ist)
Ferne habe ich gelesen, dass auch Probleme mit Anhängen bei Internetmails geben kann. Könnte das hier der Fall sein?

Wo könnte der Fehler liegen?

Jede Hilfe ist willkommen und herzlichen Dank im Voraus.

Mit freundlichen Grüßen,

Christian

Offline koehlerbv

  • Moderatoren
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: E-Mailversand mit Excel Makro - Problem mit Anhängen
« Antwort #1 am: 13.12.11 - 12:12:32 »
Es liegt nicht nur an der (inkorrekten) MIME-Konvertierung für Anhänge.
Das Attachment packst Du in das Item "ProjectDescription", und dieses wird nach dem Router nicht mehr existieren, da es für Internet-Mails nicht definiert ist - für Inhalte kannst Du nur "Body" verwenden.

Bernhard

PS: Zur MIME-Konvertierung siehe beispielsweise hier http://atnotes.de/index.php/topic,52040.msg334799.html#msg334799

Offline Rocky89

  • Frischling
  • *
  • Beiträge: 7
Re: E-Mailversand mit Excel Makro - Problem mit Anhängen
« Antwort #2 am: 13.12.11 - 12:17:59 »
Hallo Bernhard,

vielen Dank für deine schnelle Antwort.

Ich weiss, dass es eventuell etwas viel verlangt ist, aber könntest du mir bitte noch erklären, wie ich diesen Fehler beheben kann.

Vielen Dank im Voraus!!!

Gruß,

Christian

Offline koehlerbv

  • Moderatoren
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: E-Mailversand mit Excel Makro - Problem mit Anhängen
« Antwort #3 am: 13.12.11 - 12:20:08 »
Das hat Roland ("pram") im von mir verlinkten Artikel sehr schön beschrieben. Allerdings ist der Umgang mit MIME eigentlich nur etwas für recht erfahrene Programmierer, Christian.

Bernhard

Offline Rocky89

  • Frischling
  • *
  • Beiträge: 7
Re: E-Mailversand mit Excel Makro - Problem mit Anhängen
« Antwort #4 am: 13.12.11 - 12:26:16 »
Hallo Bernhard,

okay, dann werde ich mir diesen Artikel mal genau anschauen. Obwohl ich auf den ersten Blick schon feststellen musste, dass es ziemlich komplex werden wird.

Hast du eventuell eine Idee, wie man das einfacher lösen könnte?

Christian

klaussal

  • Gast
Re: E-Mailversand mit Excel Makro - Problem mit Anhängen
« Antwort #5 am: 13.12.11 - 12:41:35 »
Vielleicht wäre das die Lösung:
http://www.madicon.de/easymail/

Offline koehlerbv

  • Moderatoren
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: E-Mailversand mit Excel Makro - Problem mit Anhängen
« Antwort #6 am: 13.12.11 - 12:41:56 »
Ich sehe gerade: Du kannst es (viel!) einfacher machen, da Du eh nur plain text schreibst und daher überhaupt kein MIME benötigst.

Set rtItem = doc.CreateRichTextItem ("Body")   
Call rtItem.AppendText (Inhalt)
rtItem.AddNewLine (2)
call rtitem.EMBEDOBJECT(EMBED_ATTACHMENT, "", Dateianhang)

Das wären die entscheidenden Zeilen.

HTH,
Bernhard

Offline Peter Klett

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.713
  • Geschlecht: Männlich
Re: E-Mailversand mit Excel Makro - Problem mit Anhängen
« Antwort #7 am: 13.12.11 - 13:00:50 »
Ich hatte es so verstanden, dass Inhalt HTML ist, also nicht nur Text

Offline koehlerbv

  • Moderatoren
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: E-Mailversand mit Excel Makro - Problem mit Anhängen
« Antwort #8 am: 13.12.11 - 13:05:05 »
Hast Recht, Peter. Lesen bildet, und so habe ich die Zeile auch entdeckt.  :)

Ergo: MIME ist Pflicht.

Bernhard

Offline pram

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.169
  • Geschlecht: Männlich
    • Foconis Object Framework
Re: E-Mailversand mit Excel Makro - Problem mit Anhängen
« Antwort #9 am: 13.12.11 - 13:05:51 »
Du müsstest die Klasse von mir nach Excel/VB portieren und dann mittels mime.attach /mime.setHTML die Attchments/HTML schreiben.
Oder deinen Code nochmal überarbeiten, aktuell verletzt er gewisse Punkte die im Artikel gelistet sind:
- kein alternativer text/plain-Content
- Zugriff auf das Item-Interface ohne zuvor closeMimeEntities aufgerufen zu haben
- session.convertMime wird fest auf TRUE wiederhergestellt
- Attachments werden komplett falsch angehängt.

Auch wenn der Code vermuten lässt, dass du HTML willst, würde ich, falls möglich, den von Bernhard vorgeschlagenen Weg gehen, da dieser wesentlich einfacher ist.

Vor dem Senden solltest du aber noch ein rtItem.compact() oder .update() aufrufen.

Gruß
Roland


Roland Praml

IBM Certified Application Developer - Lotus Notes and Domino 8
Ich verwende das Foconis Object Framework

Offline Rocky89

  • Frischling
  • *
  • Beiträge: 7
Re: E-Mailversand mit Excel Makro - Problem mit Anhängen
« Antwort #10 am: 13.12.11 - 13:39:23 »
Hallo Experten,

erstmal möchte ich sagen, dass ich es ganz klasse finde, dass man in diesem Forum so schnell echte Hilfe bekommt. Danke dafür!!!

Der Text der Email wird aus einem HTML-Dokument eingelesen, von daher gehe ich einfach mal davon aus, dass HTML notwendig ist. Ich hatte vorher eine Variante, bei der der Text aus einem txt-Dokument eingelesen wurde, allerdings ist im Text eine Tabelle enthalten, die mit txt nicht darstellbar war.

Eventuell kann ich dazu zurückgehen. Damals sah der VBA-Code so aus.

Sub LotusMail(Empfaenger As String, Inhalt As String)
    Dim Kopie_Empfänger As String, BlindKopie_Empfänger As String, Betreff As String
 
Const EMBED_ATTACHMENT = 1454
Dim server As String, mailfile As String
Dim session As Object
Dim db As Object
Dim doc As Object
Dim rtitem As Object
Dim EmbeddedObject As Object

 
 
' Auslesen der Mail-DB
Set session = CreateObject("Notes.NotesSession")
server = session.GetEnvironmentString("MailServer", True)
mailfile = session.GetEnvironmentString("MailFile", True)
Set db = session.getdatabase(server, mailfile)
Set doc = db.createdocument()
doc.Form = "Main Topic"
doc.SendTo = Empfaenger
' doc.blindcopyto = Empfaenger ' Adressaten übergeben
' doc.CopyTo = Me.Kopie_Empfänger.Value
' doc.BlindCopyTo = Me.BlindKopie_Empfänger.Value
doc.Subject = Cells(2, 6).Value
doc.Body = Inhalt & dat_ReadText(Range("F5").Text)




' ANHANG
Set rtitem = doc.CREATERICHTEXTITEM("ProjectDescription")
For Each Cell In Range("F8:F18")
If Cell = "" Then Exit For
Dateianhang = Cell.Value
Set EmbeddedObject = rtitem.EMBEDOBJECT(EMBED_ATTACHMENT, "", Dateianhang) 'Dateianhang mit Pfad und Dateiname überschreiben

Next


'Dateianhang = Range("F6").Value
'Set rtitem = doc.CREATERICHTEXTITEM("ProjectDescription")
'Set EmbeddedObject = rtitem.EMBEDOBJECT(EMBED_ATTACHMENT, "", Dateianhang) 'Dateianhang mit Pfad und Dateiname überschreiben
 'doc.SIGN = "0"
 'doc.ENCRYPT = "0"
 'doc.BlindCopyTo = ""
 'doc.DefaultMailSaveOptions = 0 '"1"
 'doc.MailSaveOptions = 0 '"1"
 'doc.DeliveryReport = "B"
 'doc.MailOptions = "2" '"0"
 'doc.Importance = "1" ' Neu
 'doc.logo = "Barmenia" 'neu
 'doc.ReturnReceipt = "1"
doc.principal = session.UserName
doc.viewicon = "75"
doc.FROM = session.UserName
' doc.SaveOptions = 0 '"1"
' doc.SecureMail = ""
' doc.SenderTag = "F"
 
'SMTP-Originator
doc.PostedDate = Format$(Now, "dd.mm.yyyy") + " " + Format$(Now, "hh:nn:ss")
' doc.SAVEMESSAGEONSEND = 0
' Call doc.Save(False, False)
Call doc.Send(True, "")
Set doc = Nothing
Set db = Nothing
End Sub
 
Sub Mail_senden()
'Für jede Zelle in Bereich d2 bis zur letzen belegten Zelle in Spalte d wird eine Mail versandt.
Dim Cell As Range
For Each Cell In Range("d2:d" & Cells(Rows.Count, "d").End(xlUp).Row)
If Cell <> "" Then Call LotusMail(Cell.Value, Cell(1, -2) & " " & Cell(1, -1) & " " & Cell(1, 0) & ",") Else Exit For
Next
End Sub

Public Function dat_ReadText(DerPfad As String) As String
    Dim sText As String, iFrei As Integer, i As Long
    On Error GoTo Fehler
    sText = ""
    iFrei = FreeFile
    Open DerPfad For Binary Access Read As #iFrei
    i = LOF(iFrei)
    sText = String(i, 0)
    Get #iFrei, , sText
    Close #iFrei
    dat_ReadText = sText
    Exit Function
Fehler:
    MsgBox Err.Description
End Function


1. Würde es mit diesem Code funktionieren, dass die Anhänge auch extern dabei sind?
2. Kann mit einem txt-Dokument eine ordentliche Formatierung dargestellt werden?

Vielen Dank im Voraus!

Gruß,

Christian

P.S.
Das Tool von Madicon habe ich auch gesehen, allerdings ist für die nächsten Monate kein Budget mehr für Software vorhanden und außerdem dauert es bei meinem Arbeitgeber äußerst lange neue Ideen durchzusetzen ;))


Offline Rocky89

  • Frischling
  • *
  • Beiträge: 7
Re: E-Mailversand mit Excel Makro - Problem mit Anhängen
« Antwort #11 am: 13.12.11 - 14:18:54 »
Nachtrag zu meinem letzten Beitrag:
3. Wäre es möglich anstatt der txt-Datei eine doc-Datei (Word mit Formatierung etc.) zu verwenden?

Danke im Voraus.

Gruß,
Christain

Offline koehlerbv

  • Moderatoren
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: E-Mailversand mit Excel Makro - Problem mit Anhängen
« Antwort #12 am: 13.12.11 - 14:55:07 »
1. Nein. U.a. kopierst Du nach wie vor den Anhang nicht in das Body-Item.
2. Nein. Zumindest eine plain text-"Formatierung" nicht mit HTML oder RichText vergleichbar.
3. Nein. (Ansatzweise gehen würde es, aber dazu muss man gaaaaaanz tief in die Trickkiste von Word und Notes greifen).

Bernhard

Offline Rocky89

  • Frischling
  • *
  • Beiträge: 7
Re: E-Mailversand mit Excel Makro - Problem mit Anhängen
« Antwort #13 am: 13.12.11 - 15:03:57 »
Hey Bernhard,

zu 1.: Ich hab das jetzt nochmal probiert und die Mail an meine private Adresse (d.h. extern) gesendet und da waren die Anhänge dabei.

Was müsste ich konkret an meinem Code ändern, damit ich den Anhang in das Body-Item kopiere?

Ich fasse mal kurz den Stand zusammen:
Lapidar gesagt, habe ich die Wahl zwischen Pest und Cholera. Entweder Anhänge und gute Formatierung oder gute Formatierung ohne Anhänge...

Habt ihr eine Idee, wie lange ein versierter Programmierer brauchen würde, um den Code voll funktionsfähig zu machen?

Gruß,
Christian

Offline m3

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.102
  • Geschlecht: Männlich
  • Non ex transverso sed deorsum!
    • leyrers online pamphlet
Re: E-Mailversand mit Excel Makro - Problem mit Anhängen
« Antwort #14 am: 13.12.11 - 15:05:08 »
Bis nach Weihnachten ;)
HTH
m³ aka. Martin -- leyrers online pamphlet | LEYON - All things Lotus (IBM Collaborations Solutions)

All programs evolve until they can send email.
Except Microsoft Exchange.
    - Memorable Quotes from Alt.Sysadmin.Recovery

"Lotus Notes ist wie ein Badezimmer, geht ohne Kacheln, aber nicht so gut." -- Peter Klett

"If there isn't at least a handful of solutions for any given problem, it isn't IBM"™ - @notessensai

Offline koehlerbv

  • Moderatoren
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: E-Mailversand mit Excel Makro - Problem mit Anhängen
« Antwort #15 am: 13.12.11 - 15:12:39 »
Bis nach Weihnachten ;)

Widerspruch, Euer Ehren  ;)

Bernhard

Offline pram

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.169
  • Geschlecht: Männlich
    • Foconis Object Framework
Re: E-Mailversand mit Excel Makro - Problem mit Anhängen
« Antwort #16 am: 13.12.11 - 15:16:44 »
Also du kannst ENTWEDER ein RichtextItem + EmbedObject verwenden (was bedeutet: du kannst kein HTML verwenden)
ODER ein Mime-Item.

der Mischmasch geht nicht. (zumindest nicht zuverlässig)

Schau dir doch mal den Beispielcode an, und versuch die Klasse in Excel zum Laufen zu bringen:

Aus dem Ärmel heraus würd ich sagen, dass der Konstruktor noch um die Session erweitert werden muss, da Excel kein "new NotesSession" kennt:
Code
Public Sub new(doc As NotesDocument, itemName As String, sess as NotesSession)
...
set Session = sess '  anstatt von Set session 	= New NotesSession
/edit: wobei ich zugeben muss, dass ich keinen blassen Schimmer habe, ob und wie VB-Script Klassendeklarationen erwartet.

und im Code dann:

Code
' Auslesen der Mail-DB
Set session = CreateObject("Notes.NotesSession")
server = session.GetEnvironmentString("MailServer", True)
mailfile = session.GetEnvironmentString("MailFile", True)
Set db = session.getdatabase(server, mailfile)

' E-Mail vorbereiten
Set doc = db.createdocument()
doc.Form = "Main Topic"
doc.SendTo = Empfaenger
doc.Subject = Cells(2, 5).Value
doc.principal = "Finanzinstitute@nordlb.de"
doc.viewicon = "75"
doc.FROM = session.UserName

' Mime erzeugen
Dim mime As New MultipartRelatedMime(doc, "Body", session)		' Klasse anlegen
Set stream = session.createStream
Call stream.Writetext(LARRY)
cid = mime.attach(stream, ENC_BASE64, "", "image/gif")	' Bild anhängen und CID merken
Call stream.close()
Call mime.setHtml(Replace(HTML, "%IMAGE%", cid), "bitte benutzen Sie einen HTML-fähigen Mailclient") ' CID im HTML ersetzen
Call mime.closeMime()

' und versenden
Call doc.send(False,session.Effectiveusername) ' Mail senden 


Wenn du den Larry dann unter Excel versenden kannst, sollte HTML + weitere Attachments kein Problem sein.

Gruß
Roland

« Letzte Änderung: 13.12.11 - 15:19:45 von pram »
Roland Praml

IBM Certified Application Developer - Lotus Notes and Domino 8
Ich verwende das Foconis Object Framework

Offline m3

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.102
  • Geschlecht: Männlich
  • Non ex transverso sed deorsum!
    • leyrers online pamphlet
Re: E-Mailversand mit Excel Makro - Problem mit Anhängen
« Antwort #17 am: 13.12.11 - 15:20:19 »
Bis nach Weihnachten ;)

Widerspruch, Euer Ehren  ;)

Bernhard
*ggg* Ja, eh. :)
HTH
m³ aka. Martin -- leyrers online pamphlet | LEYON - All things Lotus (IBM Collaborations Solutions)

All programs evolve until they can send email.
Except Microsoft Exchange.
    - Memorable Quotes from Alt.Sysadmin.Recovery

"Lotus Notes ist wie ein Badezimmer, geht ohne Kacheln, aber nicht so gut." -- Peter Klett

"If there isn't at least a handful of solutions for any given problem, it isn't IBM"™ - @notessensai

Offline koehlerbv

  • Moderatoren
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: E-Mailversand mit Excel Makro - Problem mit Anhängen
« Antwort #18 am: 13.12.11 - 15:23:02 »
Code
Call doc.send(False,session.Effectiveusername) ' Mail senden 

Obicht - das versendet aber an den Ausführer des Codes.

Bernhard

%EDIT: Das nicht unwichtige Wörtchen "an" fehlte ...
« Letzte Änderung: 13.12.11 - 16:06:26 von koehlerbv »

Offline pram

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.169
  • Geschlecht: Männlich
    • Foconis Object Framework
Re: E-Mailversand mit Excel Makro - Problem mit Anhängen
« Antwort #19 am: 13.12.11 - 15:58:41 »
stimmt, Bernhard, ist in meinem Beispiel auch falsch...
Roland Praml

IBM Certified Application Developer - Lotus Notes and Domino 8
Ich verwende das Foconis Object Framework

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz