E-mail mit BB und oder B+ versenden [EDIT] mit Anhang
Übersicht

![]() |
TrustBetreff: E-mail mit BB und oder B+ versenden [EDIT] mit Anhang |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hallo liebe Gemeinde.
Ich habe folgendes Problem: Nach 2 tägigem Rumprobieren und Informieren im Forum und im I-net, Studieren des SMPT-Protokolls usw. komme ich einfach nicht weiter. Ich habe eine Funktion geschrieben die es mir ermöglicht, oder ermöglichen soll, eine E-Mail, vorerst nur mit Textinhalt, zu versenden. Funktionerit auch teilweise... Hier erstmal die Funktion. Code: [AUSKLAPPEN] Function SendMail(server$,absender$,emfanger$,passwort$) stream = OpenTCPStream(server$, 25) Print ReadLine$(stream) ;Login WriteLine stream,"HELO Try" : Print "HELO Try" Print ReadLine$(stream) WriteLine stream,"AUTH LOGIN" : Print "AUTH LOGIN" Print ReadLine$(stream) WriteLine stream, Base64enc$(absender$) : Print absender$ Print ReadLine$(stream) WriteLine stream, Base64enc$(passwort$) : Print "Passwort: dummy" WriteLine stream,"MAIL FROM: <"+absender$+">" Print ReadLine(stream) WriteLine stream,"RCPT TO: <"+emfanger$+">" Print ReadLine(stream) WriteLine stream,"DATA" Print ReadLine(stream) WriteLine stream,"From: Mir" WriteLine stream,"To: Mich" WriteLine stream,"Subject: TestMail" Print "Taste für nachricht senden" waitkey() WriteLine stream, "Das ist eine Testmail." WriteLine stream, "Wenn du das hier lesen kannst," WriteLine stream, "ist das senden erfolgreich gewesen!" WriteLine stream,"." Print ReadLine(stream) WriteLine stream,"QUIT" Print ReadLine(stream) CloseTCPStream(stream) End Function Absender, emfänger, betreff usw. funktionieren wunderbar. Leider aber nicht der eigentliche inhalt der E-Mail, denn diese ist komischerweise immer leer... Könnte mir jemand erklären wieso? |
||
- Zuletzt bearbeitet von Trust am So, Mai 16, 2010 22:22, insgesamt einmal bearbeitet
barratator |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Versuch mal hinter dem Header eine leere Zeile zu senden.
http://de.wikipedia.org/wiki/S...#Protokoll [quote=wiki](Vor dem Textkörper ist als Abtrennung zum Header eine Leerzeile nötig.)[/quote] Also noch ein Code: [AUSKLAPPEN] WriteLine stream,""
Gruß Bastian |
||
![]() |
Trust |
![]() Antworten mit Zitat ![]() |
---|---|---|
Auf diese Seite bin ich auch schon gestossen, aber das habe ich wohl überlesen.
Vielen Dank es Funktioniert jetzt wunderbar. [EDIT] Jetzt noch eine dumme frage: Wie ist es mir möglich Dateianhänge mitzusenden? Wenn ich darüber nachdenke kommt mir überhaupt nichts wo ich ansetzen könnte. |
||
![]() |
Trust |
![]() Antworten mit Zitat ![]() |
---|---|---|
*Doppelpost*
Also soweit ich informiert bin muss die Datei in ASCII-zeichen codiert werden um sie senden zu können, da Mailserver nur diese "verstehen". Den Inhalt zu Kodieren ist nicht das problem. Sondern Problem ist: 1. Wie trenne ich die Codierte Datei von der Textmail (Start/End marker) 2. Wie verbinde ich die codierte Datei (String) mit der Dateiendung und mache sie als solche Datei "erkennbar"? wie zb. eine .bmp-Datei Wie verfahren denn Mailanbieter oder zb. OutlookExpress mit Dateien? Welche Codierung nutzen die? Da die Angehängten Dateien beim runterladen ja "automatisch" decodiert werden wäre es naheliegend die selbe Codierung zu verwenden. Bitte berichtigt mich wenn ich hier totalen stuss rede, aber ich fange grade erst an mich mit diesem Thema zu beschäftigen (zu Lernen) |
||
![]() |
das wurgel |
![]() Antworten mit Zitat ![]() |
---|---|---|
Du kannst keine Datei in ASCII-zeichen codieren, da ein Zeichensatz nur festlegt, wie die Bytes der Datei angezeigt werden sollen (32 -> Leertaste, 33 -> Ausrufezeichen, usw.). Du kannst z.B. auch eine EXE-Datei als ASCII anzeigen lassen, nur kommt dabei eben nur Stuss raus. Codieren musst du also nichts. Such mal im Internet nach, ich denke mal es gibt irgendeine spiezielle Bytekombination, die sagt, dass jetzt der Anhang kommt. | ||
1 ist ungefähr 3 |
![]() |
Trust |
![]() Antworten mit Zitat ![]() |
---|---|---|
Encodieren muss man die Datei schon soweit ich weiss. Da der Mailserver
nur Text "versteht". Zitat: Base64 ist ein Begriff aus dem Computerbereich und beschreibt ein Verfahren zur Kodierung von 8-Bit-Binärdaten (z. B. ausführbare Programme, ZIP-Dateien), in eine Zeichenfolge, die nur aus wenigen, Codepage-unabhängigen ASCII-Zeichen besteht. Zitat:Es findet im Internet-Standard MIME (Multipurpose Internet Mail Extensions) Anwendung und wird damit hauptsächlich zum Versenden von E-Mail-Anhängen verwendet. Nötig ist dies, um den problemlosen Transport von beliebigen Binärdaten zu gewährleisten, da SMTP in seiner ursprünglichen Fassung nur für den Versand von 7-Bit-ASCII-Zeichen ausgelegt war.
(Auszug aus Wikipedia) Oft genommenes Kodierungsformat ist zb. Base64. Wenn der Mailclient die Datei herunter lädt wird die Datei dann automatisch decodiert, vorrausgesetzt er hat alle benötigten Infos die außer der codierte Inhalt der datei zb. noch Endung, Name und Codierungsformat sind. Weiterhin muss die Mail in seperate Bodyparts geteilt werden und die Information enthalten, welcher Bodypart was für Daten enthält, wann er anfängt und eben aufhört. Soweit ich mich richtig informiert habe ist das mit dem MIME-Protokoll möglich. Da muss man bereits im Header der Mail declarieren das es sich um eine MIME-Mail bzw. Multipart-Mail handelt und nicht um eine normale Mail wo ausschlieslig Text enthält. Ein Bild zu senden ist mir auch teilweise gelungen. Es wurde erkannt dass das Bild ein getrennter Part ist, und es wurde versucht das Bild darzustellen jedoch fehlerhaft. Vermute das ich es fehlerhaft encodiert habe. Wenn ich mehr weiß sag ich Bescheid. Bin momentan auf der Arbeit kann daher grade nicht weiter machen. Über weitere Vorschläge würde ich mich trotzdem freuen. [EDIT] Ok hatte nun endlich mal wieder Zeit gefunden. Also das einzige Problem was ich wirklich noch habe ist, die Datei die ich mitschicken will "richtig" in ein ASCII MIME Base64 - String zu encodieren. Steige da noch nicht ganz hinter wo der unterschied von MIME Base64 und anderen Base64 arten liegt. Kann mir denn da keiner weiter helfen? Ich stehe hier echt an... ![]() Gibt es hier im Forum denn wirklich niemenden der sich damit auskennt??? Wäre um Hilfe wirklich sehr dankbar! |
||
![]() |
Trust |
![]() Antworten mit Zitat ![]() |
---|---|---|
Kennt sich denn keiner mit dem MIME Base64 codierungs Format aus? | ||
![]() |
Thunder |
![]() Antworten mit Zitat ![]() |
---|---|---|
Doch Wikipedia! Eigeninitiative!
Edit: Probiers. Wenn du Probleme hast, frag nach. |
||
Meine Sachen: https://bitbucket.org/chtisgit https://github.com/chtisgit |
![]() |
mpmxyz |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich gebe mal einen Anstoß.
So wie ich das sehe, vermischst du nämlich zwei Dinge: MIME ist ein Standard u.A. für E-Mails. Base64 ist eine davon unabhängige Codierung für Binärdaten als Text. mfG mpmxyz |
||
Moin Moin!
Projekte: DBPC CodeCruncher Mandelbrot-Renderer |
![]() |
Trust |
![]() Antworten mit Zitat ![]() |
---|---|---|
Meinst du das hätte ich nicht schon?
Habe zig Seiten durchforstet. Wie du an meinen obigen posts erkennen müsstest habe ich mir die fragen eh fast alle selber beantwortet. Aber hier stehe ich seit Wochen an. Bekomme das einfach nicht hin. Das MIME Protokoll benutz offensichtlich eine andere base64 Codierung was an der Wiki Tabelle die ich weiter oben gepostet habe ja auch zu erkennen ist. Auch habe ich versucht eine Datei mit dem Code von PowerProgrammer zu encodieren. Aber diese Zeichenkette ist nach dem 74. Zeichen oder so anders als wenn ich die Datei mit einem MIME Tool encodiere. Da aber das encodieren des benutzernens und Passwort zur Anmeldung erfolgreich ist mit dem Code von Powerprogrammer, aber das encodieren der datei mit seinem Code anders ist als mit dem MIME Tool muss man doch logischerweise darauf schliesen das dass base64 von MIME ein anderes ist. Denn wenn ich die encodierte Zeichenkette des MIME tools sende wird das Bild korrekt dargestellt. Deshalb weis ich auch nichtmehr weiter. |
||
![]() |
Trust |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ups, die Tabelle hatte ich in einem andern Thema gepostet...
Hier die Tabelle der verschiedenen Base64 arten: http://en.wikipedia.org/wiki/B...nd_history Und hier die Funktion die die Mail mit Anhang verschicken soll. Text Funktioniert, das Bild nur soweit das es als ein Bild im Anhang erkannt wird aber nicht dargestellt werden kann (kleines rotes "X" ) Code: [AUSKLAPPEN] Function SendMail(server$,absender$,emfanger$,passwort$,anhang$)
stream = OpenTCPStream(server$, 25) ; Die Verbindung zum Server auf Port 25 herstellen. Print ReadLine$(stream) ;Login WriteLine stream,"HELO Try" : Print "HELO Try" Print ReadLine$(stream) WriteLine stream,"AUTH LOGIN" : Print "AUTH LOGIN" Print ReadLine$(stream) WriteLine stream, Base64enc$(absender$) : Print absender$ Print ReadLine$(stream) WriteLine stream, Base64enc$(passwort$) : Print "Passwort: dummy" ;Mail Header WriteLine stream,"MAIL FROM: <"+absender$+">" Print ReadLine(stream) WriteLine stream,"RCPT TO: <"+emfanger$+">" Print ReadLine(stream) WriteLine stream,"DATA" Print ReadLine(stream) WriteLine stream,"From: Ka" WriteLine stream,"To: Ka" WriteLine stream,"Subject: Ka" ;Hinweis auf eine MIME-Mail WriteLine stream,"MIME-Version: 1.0" ;Hinweis auf eine Mail mit gleichwertigen | ;Dateien die zusammen angezeigt werden sollen |;Die einzelnen Teile einer MIME-Mail werden ;(wie etwa eine Mail mit mehreren anhängen) |;durch die als boundary definierte ; |;Zeichenkette voneinander getrennt WriteLine stream,"Content-type: multipart/mixed; boundary= "+chr(34)+"example1"+chr(34) WriteLine stream,"";<-- Vor dem Textkörper ist als Abtrennung zum Header eine Leerzeile nötig ;@@@@@ Bodypart 1 ( die Textnachricht ) @@@@@@@@ WriteLine stream,"--example1" ;der content typ einer text nachricht WriteLine stream,"Content-type: text/plain; charset=iso-8859-1" WriteLine stream,"Content-Transfer-Encoding: quoted-printable" ;Der Text WriteLine stream,"" WriteLine stream, "Das ist eine Testmail." WriteLine stream, "Test Test." ;@@@@@ Bodypart 2 ( Die Bild-Datei ) @@@@@@@@ WriteLine stream,"--example1" WriteLine stream,"Content-type: image/jpeg; name= "+chr(34)+"bild.jpeg"+chr(34) ;Encodingart der Datei mitteilen WriteLine stream,"Content-Transfer-Encoding: base64" WriteLine stream,"Content-Disposition: attachment; filename= "+chr(34)+"bild.jpeg"+chr(34) WriteLine stream,"" ;Die bild Datei wird eingelesen file = ReadFile(anhang$) While Not Eof(file) filestring$ = filestring$ + Readline(file) Wend Print base64enc$(filestring$) CloseFile file ;encodierte Datei wird gesendet WriteLine stream, base64enc$(filestring$) ;Bescheid geben das kein weiterer Bodypart mehr folgt WriteLine stream,"--example1--" WriteLine stream,"" WriteLine stream,"." Print ReadLine(stream) WriteLine stream,"QUIT" Print ReadLine(stream) CloseTCPStream(stream) End Function Und hier die Base64 encodierungs Function von PowerProgrammer die er in einem anderen Thema mal gepostet hatte: Code: [AUSKLAPPEN] Function Base64enc$(a$)
b64$="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/" m$="" f$="" largo=Len(a$) ;Encode a$ into one long string of bits cx$="" For encode=1 To largo x$=Mid$(a$,encode,1) ;get one char at a time Tx=Asc(x$) ;Tx = ASCII code b$=Bin$(Tx) ;convert Tx into string of 32 bits b$=Right$(b$,8) ;get the right most 8 bits out of the 32 bits cx$=cx$+b$ ;add string of 8 bits to cx$ Next ;largo = number of bits stored in cx$ largo=Len(cx$) For encode=1 To largo Step 6 x$=Mid$(cx$,encode,6) bbb=Len(x$) bbbx=6-bbb ;check for 6 bits ;If not full 6 bits at end of bit string, then add "=" to end of encoded string If bbbx>0 Then f$="=" EndIf x$=x$ + Left$("00000000",bbbx) ;pad with zeroes to make 6 bits res=0 For y=0 To 5 by = Asc(Mid$(x$, 6-y, 1)) - 48 ;get bits from right to left (least significant to most) res = res + ( 2^y * by) ;raise to power of 2 and add to res (result) Next m$=m$+Mid$(b64$,res+1,1)+f$ Next Return m$ End Function Zur Anmerkung, Wenn ich die Bilddatei mit einem MIME-Tool encodiere, und diese Zeichenkette als Anhang über meine Function sende wird das Bild korrekt dargestellt. Mit der Funktion von PowerProgrammer jedoch nicht. Auch habe ich die beiden Zeichenketten mal verglichen, die funktionierende Zeichenkette vom MIME-Tool ist nach dem 73. Zeichen anders als die Zeichenkette die mit der Funktion von PowerProgrammer encodiert wurde. Was mich zu dem entschluss kommen lässt das es 2 verschiedene base64 arten sind (Siehe Tabelle) Da ich aber dort nicht durchblicke wo der Unterschied zwischen den beiden ist, würde ich mich sehr freuen wenn mir da jemand Helfen könnte. |
||
![]() |
hamZtaAdministrator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Drei Doppelposts in einem Thread. Da hilft auch ein "*Doppelpost*" nichts. Lass das bitte sein und benutz den Edit-Button.
Danke, hamZta |
||
Blog. |
Blitzjockey |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Trust hat Folgendes geschrieben: Zur Anmerkung, Wenn ich die Bilddatei mit einem MIME-Tool encodiere, und diese Zeichenkette als Anhang über meine Function sende wird das Bild korrekt dargestellt. Mit der Funktion von PowerProgrammer jedoch nicht. Auch habe ich die beiden Zeichenketten mal verglichen, die funktionierende Zeichenkette vom MIME-Tool ist nach dem 73. Zeichen anders als die Zeichenkette die mit der Funktion von PowerProgrammer encodiert wurde. Was mich zu dem entschluss kommen lässt das es 2 verschiedene base64 arten sind (Siehe Tabelle) Oder, wenn ich so frei sein darf, es gibt ein Fehler in PowerProgrammers Function. Da ich aber Deine MIME-Tool Base64enc$(a$) hier nicht sehe, kann ich dass nicht kontrollieren. Es wäre denkbar das PowerProgrammer zum Beispiel selbst sowohl der Encoder als der Decoder geschrieben hat, und dabei irgendwo ein Fehler gemacht hat. Das würde ihm dann nicht auffallen da er vermutlich den gleichen Fehler sowohl im Coding als im Decoding-Abschnitt einsetzen würde (It's not a Bug, it's a Feature..) Er hat - in dem fall!! - ein art eigene Code entwickelt. Es könnte sogar sein das dies Zeichen- oder Positionsabhängig ist, wodurch es erst ab der 73. Zeichen auffallen würde. Aber, wie gesagt, dazu müsste man sowohl der Base64enc$(a$) den Du benutzt (MIME-Encoding-tool), als der Base64enc$(a$) von PP neben einander lesen. Da würde das am schnellsten auffallen. Dass einzige was mir im Code vom PP komisch vorkommt: Code: [AUSKLAPPEN] res = res + ( 2^y * by) ;raise to power of 2 and add to res (result)
Vielleich liegt's an mir, aber: 2^y bedeutet 2 to the power of y. y^2 wäre y to the power of 2 (was ja so als Remark dasteht?) (Aber sei mir nicht böse wenn ich komplett daneben haue, (De)Codieren ist nicht mein Fachgebiet.) (Und Mathe ist auch schon lange her..) Lg, BlitzJ. |
||
![]() |
Silver_Knee |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hab mal eben ein altes Projekt, den FS-Logger, von mir hochgeladen. Damit kannst du einen Server emulieren und dir den "funkverkehr" ansehen.
Das funktioniert ungefähr so: Code: [AUSKLAPPEN] Outlook --(127.0.0.1)--> FS-LOGGER --(smtp.example.com)-->Mailserver
Dann musste in deinem Outlook-Konto 127.0.0.1 als Mailserver eintragen, schaust dir den Port ab und trägst Port und tatsächlichen Server beim FS-Logger ein. Schick dir dann Grad 'ne Datei per Mail und du kannst die Verbindung beobachten. Das erste Programm auf der Seite |
||
PyrrokharBetreff: Empfänger und Absender |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Wie kann man denn in diesem Code den Empfänger bzw. Absender verändern?
(Bin nicht so gut in BB) |
||
Ich bin echt nicht gut im programmieren, aber es macht Spaß... |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group