Mailanhang immer nur 4KB

D

deetzen

Hallo,

ich versuche Mails über eine selbstgeschriebene Klasse zu verschicken. Klappt auch schon so weit alles ganz gut, aber mit dem Anhang hab ich so meine Schwierigkeiten.
Egal was ich tue, alle Anhänge werden nach erreichen von 4KB abgeschnitten. :(

Ich denke es muß an folgender Funktion liegen, aber ich weiß nicht wo dort der Fehler liegt:

Code:
Public Function Encode(ByVal strFilePath As String) As String
		Dim fs As New FileStream(strFilePath, FileMode.Open)
		Dim br As New BinaryReader(fs)

		Return (Convert.ToBase64String(br.ReadBytes(fs.Length)))

		br.Close()
		fs.Close()
End Function
 
Du konvertierst anscheinend nur den ersten Happen aus deinem Binary Reader.
 
Hi,

ich denke mal du solltest zuerst den Stream schliessen und dann den Wert zurück geben.

Code:
Public Function Encode(ByVal strFilePath As String) As String
		Dim fs As New FileStream(strFilePath, FileMode.Open)
		Dim br As New BinaryReader(fs)
                Dim s As String

		s = Convert.ToBase64String(br.ReadBytes(fs.Length))

		br.Close()
		fs.Close()
                return (s)
End Function
Bin nicht mehr so vertraut mit VB Code, aber ich hoffe es sind keine Syntax Fehler drin.
 
Ja ich weiß, den Fehler habe ich bereits behoben, trotzdem danke für den Hinweis.
Aber das Ändert leider auch nichts...
 
Hi,

ich denke nicht dass es an dieser Funktion liegt.
Denke dass der Fehler wo anders ist, wie sieht den die Funktion aus die das Ganze dann weiterverarbeitet?
Lass dir doch einfach über ne MessageBox die Länge des Rückgabe Strings zurückgeben.
Oder hast du das schon gemacht ?
 
Also es könnte noch hier liegen. Kann der Stream vielleicht nicht mehr senden?

Code:
Dim ObjOutboundData As Stream

DataArray = Encoding.ASCII.GetBytes(strDataToSend.ToCharArray())
ObjOutboundData.Write(DataArray, 0, strDataToSend.Length)
 
Ne, der Stream sendet immer alles was du ihm gibst, eventuell Blockiert halt dann die Anwendung, aber er sollte immer alles schreiben.
Vielleicht kannst du noch mehr Code posten.

Ist strDataToSend der Rückgabe-Wert der Encode Methode ?
Wenn ja, dann verstehe ich nicht warum du den Wert, dann wieder in ein byte-Array konvertierst.
 
Also es sieht folgendermaßen aus:

Code:
If Len(SMTPData.AttachmentFile) > 0 Then

   strDataToSend = "--KkK170891tpbkKk__FV_KKKkkkjjwq" & vbCrLf _
   & "Content-Type: application/octet-stream" & vbCrLf _
   & "Content-Transfer-Encoding: base64" & vbCrLf _
   & "Content-Disposition: attachment;" & vbCrLf _
   & " filename= " & Mid$(SMTPData.AttachmentFile, InStrRev(SMTPData.AttachmentFile, "\") + 1) & vbCrLf & vbCrLf _
   & Encode(SMTPData.AttachmentFile) & vbCrLf
   
   DataArray = Encoding.ASCII.GetBytes(strDataToSend.ToCharArray())
   ObjOutboundData.Write(DataArray, 0, strDataToSend.Length)
End If
 
Ah, ich glaub ich weiß an was es liegt.
Wann schließt du bzw. schließt du überhaupt den Stream "ObjOutboundData" ?
Das solltest du auf jeden Fall tun, wenn du mit dem Senden fertig bist!

Füge einfach mal nach deiner letzten Zeile folgenden Code ein:
Code:
ObjOutboundData.Flush()

Wenn du die Email verschickt hast, dann schließe den Stream mit ObjOutboundData.Close().

P.S.: Du solltest deine Nachricht gemäß RFC 2821 noch an die gängige Norm angleichen. Dein
Attachment als Base64 String hat nämlich Zeilen die länger sind als 76 Zeichen, was laut
RFC 2821 nicht gültig ist. (kann natürlich sein dass der SMTP Server die Nachricht trotzdem
ordenlich erkennt)
 
Zurück