Domino 9 und frühere Versionen > ND8: Entwicklung

Liste mit contentTypes(MIME)/Problem mit Name von Anhängen in Email

(1/2) > >>

Preda7oR:
Hallo zusammen,

ich hab folgende zwei Fragen:

1. Bei dem Befehl "Call notesMIMEEntity.SetContentFromBytes( stream, contentType, encoding )" muss ja der contentType angegeben werden. Gibt es hierzu eine Liste, welche verschiedenen Typen es gibt? Also application/pdf, image/bmp etc...

2. Ich erstelle mit VBA eine Email im HTML-Format mit Anhängen. Dies klappt jetzt auch soweit so gut, nur passen die Namen der einzeönen Anhänge nicht. D.h. Sie entsprechen nicht dem Dateinamen, sondern heißen z.b. "application-xlsx-attachment" bei einer Excel-Datei und nicht "xyz.xlsx". Ich verwende folgenden Code:

--- Code: ---Sub LotusMail(Empfaenger As String, Inhalt As String, Absender As String,
Betreff As String, CC As String, BCC As String, Anhang As Variant, Zeile As
Integer)

Dim server As String, mailfile As String
Dim session As Object
Dim DB As Object
Dim doc As Object
Dim alleAnhänge As Variant


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

Set DB = session.GETDATABASE(server, mailfile)
Set doc = DB.CreateDocument()

doc.Form = "Memo"
doc.SendTo = Empfaenger ' Adressdaten übergeben
doc.CopyTo = Split(CC, ";") 'CC
doc.BlindCopyTo = Split(BCC, ";") ' BCC
doc.Subject = Betreff 'Betreff

Set body = doc.CreateMIMEEntity

Set bodyChild = body.CreateChildEntity()
Set stream = session.CreateStream
Call stream.Writetext(Inhalt)
Call bodyChild.SetContentFromText(stream, "text/html;charset=iso-8859-1",
1729)
Call stream.Close
Call stream.Truncate

alleAnhänge = Split(Anhang, ";")

' Pfade der Anhänge bearbeiten und hinzufügen
For i = 0 To UBound(alleAnhänge)

strAnhang = alleAnhänge(i)

If Len(strAnhang) > 0 And Len(Dir(strAnhang)) > 0 Then
' Name des Anhangs aus dem Pfad extrahieren
Position = InStrRev(strAnhang, "\")
Dateiname = Right(strAnhang, Len(strAnhang) - pos)

'Neues Child-Element des body für einen Anhang
Set bodyChild = body.CreateChildEntity()
Set Header = bodyChild.CreateHeader("Content-Type")
Call Header.SetHeaderVal("multipart/mixed")

Set Header = bodyChild.CreateHeader("Content-Disposition")
Call Header.SetHeaderVal("attachment; filename=" & Dateiname)

Set Header = bodyChild.CreateHeader("Content-ID")
Call Header.SetHeaderVal(Dateiname)

Set stream = session.CreateStream()

If stream.Open(strAnhang, "binary") Then

Dateityp = Split(alleAnhänge(i), ".")
Dateityp = "application/" & Dateityp(UBound(Dateityp))
Call bodyChild.SetContentFromBytes(stream, Dateityp, 1730)

End If

End If

Next

Call stream.Close
Call stream.Truncate

'doc.SAVEMESSAGEONSEND = True

doc.principal = Absender 'Absender

Call doc.Send(False) 'Email senden

'Variablen leeren
session.ConvertMime = True
Set doc = Nothing
Set DB = Nothing
End Sub

--- Ende Code ---

Wäre super wenn mir jemand auf die Sprünge helfen köönte :-)

Vielen Dank im Voraus!!

VG Dennis

m3:

--- Zitat ---[RFC2046] specifies that Media Types (formerly known as MIME types) and Media
Subtypes will be assigned and listed by the IANA.

Procedures for registering Media Types can be found in [RFC6838], [RFC4289],
and [RFC6657]. Additional procedures for registering media types for transfer via
Real-time Transport Protocol (RTP) can be found in [RFC4855].

--- Ende Zitat ---

Die in RFC 2046 geforderte Liste der Media Types (formerly known as MIME types) and Media Subtypes hält die IANA auf http://www.iana.org/assignments/media-types/media-types.xhtml vor.


Wenn Du den Dateinamen mitschicken willst, möchtest Du Dir RFC 2183 "Communicating Presentation Information in Internet Messages: The Content-Disposition Header Field" ansehen.
Dort heißt es:

--- Zitat ---   The `filename' parameter can be used to suggest a filename for
   storing the bodypart, if the user wishes to store it in an external
   file.

--- Code: ---Content-Disposition: attachment; filename=genome.jpeg;
          modification-date="Wed, 12 Feb 1997 16:29:51 -0500";
--- Ende Code ---

--- Ende Zitat ---


Preda7oR:
Vielen Dank hat geklappt ;-)

pram:
Hi Dennis,

auch dir möchte ich meinen Artikel http://atnotes.de/index.php/topic,52040.0.html empfehlen, bevor dir z.B. wegen deinem fehlenden "closeMimeEntities" ein Produktivsystem crashed.

Da habe ich auch Beispielcode wie man eine Mail mit Anhang erstellt.

Gruß
Roland

Preda7oR:
Hey Roland,

vielen Dank für die Anmerkung.

Mein fertiger Code so wie folgt aus. Könntest du oder jemand anders bitte mal drüber schauen, ob da irgendwelche groben schnitzer drin sind?


--- Code: ---Sub LotusMail(Empfaenger As String, Inhalt As String, Absender As String,
Betreff As String, CC As String, BCC As String, Anhang As Variant, Zeile As
Integer)

Dim server As String, mailfile As String
Dim session As Object
Dim DB As Object
Dim doc As Object
Dim alleAnhänge As Variant


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

Set DB = session.GETDATABASE(server, mailfile)
Set doc = DB.CreateDocument()

Set body = doc.CreateMIMEEntity

Set bodyChild = body.CreateChildEntity()
Set stream = session.CreateStream
Call stream.Writetext(Inhalt)
Call bodyChild.SetContentFromText(stream, "text/html;charset=iso-8859-1",
1729)
Call stream.Close
Call stream.Truncate

alleAnhänge = Split(Anhang, ";")

' Pfade der Anhänge bearbeiten und hinzufügen
For i = 0 To UBound(alleAnhänge)

strAnhang = alleAnhänge(i)

If Len(strAnhang) > 0 And Len(Dir(strAnhang)) > 0 Then
' Name des Anhangs aus dem Pfad extrahieren
Position = InStrRev(strAnhang, "\")
Dateiname = Right(strAnhang, Len(strAnhang) - Position)

'Neues Child-Element des body für einen Anhang
Set bodyChild = body.CreateChildEntity()
Set Header = bodyChild.CreateHeader("Content-Type")
Call Header.SetHeaderVal("multipart/mixed")

Set Header = bodyChild.CreateHeader("Content-Disposition")
Call Header.SetHeaderVal("attachment; filename=" & Dateiname)

Set Header = bodyChild.CreateHeader("Content-ID")
Call Header.SetHeaderVal(Dateiname)

Set stream = session.CreateStream()

If stream.Open(strAnhang, "binary") Then

Dateityp = Right(Dateiname, Len(Dateiname) - InStrRev
(Dateiname, "."))

'Auswahl des Dateitypes

If Dateityp Like "xls*" Then

Dateityp = "application/vnd.ms-excel"

Else

If Dateityp Like "doc*" Then

Dateityp = "application/msword"

Else

If Dateityp Like "ppt*" Then

Dateityp = "application/vnd.ms-powerpoint"

Else

If Dateityp Like "pdf" Then

Dateityp = "application/pdf"

Else

If Dateityp = "bmp" Then

Dateityp = "image/bmp"

Else

If Dateityp = "jpeg" Then

Dateityp = "image/jpeg"

Else

If Dateityp = "gif" Then

Dateityp = "image/gif"

Else

Dateityp =
"application/octet-stream"

End If

End If

End If

End If

End If

End If

End If

Call bodyChild.SetContentFromBytes(stream, Dateityp, 1730)

End If

End If

Next

Call stream.Close
Call stream.Truncate
Call doc.CloseMIMEEntities(True)

doc.Form = "Memo"
doc.SendTo = Empfaenger ' Adressdaten übergeben
doc.CopyTo = Split(CC, ";") 'CC
doc.BlindCopyTo = Split(BCC, ";") ' BCC
doc.Subject = Betreff 'Betreff
doc.principal = Absender 'Absender
'doc.SAVEMESSAGEONSEND = True

Call doc.Send(False) 'Email senden

'Variablen leeren
session.ConvertMime = True
Set doc = Nothing
Set DB = Nothing
End Sub
--- Ende Code ---

Vielen Dank!!

VG
Dennis

Navigation

[0] Themen-Index

[#] Nächste Seite

Zur normalen Ansicht wechseln