Aktuelle Zeit: 20.06.2013 05:26

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]




Ein neues Thema erstellen Auf das Thema antworten  [ 62 Beiträge ]  Gehe zu Seite Vorherige  1, 2, 3, 4, 5 ... 7  Nächste
Autor Nachricht
 Betreff des Beitrags: Re: Email mit SMTP-Auth
BeitragVerfasst: 12.07.2010 14:41 
Offline
Benutzeravatar

Registriert: 08.09.2004 08:21
Wohnort: Porada Ninfu
ich auch mal :-)

* res.s wird nirgendwo verwendet
* CloseNetworkConnection() fehlt
* Define innerhalb einer Procedure() -> Protected

und mit dieser kleinen Proc:
Code:
Procedure SendString(ConnectionID, StringToSend.s)
  StringToSend + #CRLF$
  SendNetworkData(ConnectionID, @StringToSend, Len(StringToSend))
EndProcedure

kannst Du jedes
Code:
SendString = "bla"+Chr(13)+Chr(10)
SendNetworkData(ConnectionID,@SendString,Len(SendString))

zu:
Code:
SendString(ConnectionID, "bla")

verkürzen.

Grüße ... Kiffi

_________________
"Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live." - Martin Golding

PB2Web: Mach mit! :allright:
PureBasic FAQ
PureBasic Projekthosting


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Email mit SMTP-Auth
BeitragVerfasst: 12.07.2010 19:18 
Offline

Registriert: 06.05.2009 20:01
X360 Andy hat geschrieben:
Vielen dank für das bereitstellen :)

Hallo Andy, kein Problem. Wie geschrieben habe ich ja letzten Endes auch vom CAV und von Wikipedia profitiert, also von arbeiten anderer, welche ebenfalls veröffentlicht wurden. Ich habe daher kein Problem damit, diesen Code für den sich der Aufwand doch auch in Grenzen hielt hier zu veröffentlichen. Ich werde allerding auch noch versuchen, ihn gem. dem hier gegebenen Feedback zu verbessern.

Andreas21 hat geschrieben:
In Zeile 19 und 20 wertest du die Antwort vom Server aus.
Der Server sendet aber diese nur 1 mal. Da bleibt der Code stehen.
Das müste geändert werden.

Hallo Andreas, danke für den Hinweis, sehr aufmerksam. Aber wenn du mit dem Code wirklich mal Mails versenden willst, sollte an dieser Stelle besser nichts geändert werden, denn es ist hier tatsächlich so, dass der Mail-Server zwei Statusmeldungen hintereinander sendet, ohne dazwischen Daten zu empfangen. Das Beispiel-Prtokoll von Wikipedia nachdem ich den Code geschrieben habe sieht so aus:
Code:
> 220 mail.example.org ESMTP
< EHLO example.net

> 250-example.org Hello example.net
> 250 AUTH CRAM-MD5 LOGIN PLAIN

< AUTH LOGIN
> 334 VXNlcm5hbWU6
< aGFucw==
> 334 UGFzc3dvcmQ6
< c2Nobml0emVsbWl0a2FydG9mZmVsc2FsYXQ=
> 235 ok
< MAIL FROM: <hans@example.net>
> 250 ok
< RCPT TO: <fritz@example.org>
> 250 ok
< DATA
> 354 Go ahead.
< From: <hans@example.net>
< To: <fritz@example.org>
< Subject: Hallo
<
< Hallo Fritz
< .
> 250 Mail delivered.
< QUIT

Zitat:
Und ein InitNetwork() mit rein nehmen damit der Code auch lauffähig ist.


Da es sich hier ja eh nur um einen Ausschnitt und nicht um ein vollständiges Programm handelt, muss man auch mal voraussetzen, dass interessierte ggf. selbst ihr Wissen anwenden ;)

Kiffi hat geschrieben:
ich auch mal :-)

* res.s wird nirgendwo verwendet
* CloseNetworkConnection() fehlt
* Define innerhalb einer Procedure() -> Protected

und mit dieser kleinen Proc:
Code:
Procedure SendString(ConnectionID, StringToSend.s)
  StringToSend + #CRLF$
  SendNetworkData(ConnectionID, @StringToSend, Len(StringToSend))
EndProcedure

kannst Du jedes
Code:
SendString = "bla"+Chr(13)+Chr(10)
SendNetworkData(ConnectionID,@SendString,Len(SendString))

zu:
Code:
SendString(ConnectionID, "bla")

verkürzen.

Grüße ... Kiffi


Hallo Kiffi, vielen Dank für die Anmerkungen, werden direkt umgesetzt. Bezüglich deiner Send-Procedure, nun manchmal sieht man eben den Wald vor lauter Bäumen nicht ... :D

_________________
Gruß
Der-T
PB 4.50 RC2


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Email mit SMTP-Auth
BeitragVerfasst: 12.07.2010 19:58 
Offline

Registriert: 30.08.2004 09:05
Wohnort: Heidelberg
Nur das ich damit bei GMX keine senden konnte und wenn ich dan die eine abfrage raus genommen habe, hats geklapt.

Mit der 2 Abfrage bekomme ich immer die Meldung das GMX die verbindung beendet hat.

_________________
Desktop
  • Windows 7 Home Premium x86/x64
  • XP Home SP3 x86
    AMD Athlon(tm) 64 X2 Dual Core 5000+ 2,60 GHz
    2GB RAM, 500 GB HD, GeForce 8600, PB 5.10

Server
  • 2x Linux Debian 6 x64
    PB 5.10


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Email mit SMTP-Auth
BeitragVerfasst: 12.07.2010 20:20 
Offline

Registriert: 06.05.2009 20:01
Das ist seltsam, denn mit GMX hatte ich den Code ebenfalls getestet. Ich werde mir das ganze nochmal ansehen, will den Code ja eh gem. den Anmerkungen von Dark noch etwas überarbeiten. Bis dahin habe ich aber gerade die letzte Überarbeitung nach den Anregungen der anderen Beiträge hier eingefügt.

_________________
Gruß
Der-T
PB 4.50 RC2


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Email mit SMTP-Auth
BeitragVerfasst: 12.07.2010 23:06 
Offline

Registriert: 30.08.2004 09:05
Wohnort: Heidelberg
Mein Debug sied so aus:

Mit den 2 Abfragen
Code:
220 mail.gmx.net GMX Mailservices ESMTP {mp005}
250-mail.gmx.net GMX Mailservices
250-8BITMIME
250-ENHANCEDSTATUSCODES
250-SIZE
250-AUTH=LOGIN PLAIN
250-AUTH LOGIN PLAIN
250 STARTTLS


Wenn ich die zweite Abfrage wieder raus nehme bekomme ich das
Code:
220 mail.gmx.net GMX Mailservices ESMTP {mp065}
250-mail.gmx.net GMX Mailservices
250-8BITMIME
250-ENHANCEDSTATUSCODES
250-SIZE
250-AUTH=LOGIN PLAIN
250-AUTH LOGIN PLAIN
250 STARTTLS
334 ***********
334 ***********
235 2.7.0 Go ahead {mp065}
250 2.1.0 ok {mp065}
250 2.1.5 ok {mp065}
354 mail.gmx.net Go ahead {mp065}
250 2.6.0 Message accepted {mp065}


Damit hab ich Debug gemacht.
Code:
Procedure.s ReceiveData(ConnectionID)
  Define DataResult.s
  DataResult = Space(4999)
  ReceiveNetworkData(ConnectionID,@DataResult,4999)   
  Debug DataResult
  DataResult = Left(DataResult,3)
  ProcedureReturn DataResult
EndProcedure

_________________
Desktop
  • Windows 7 Home Premium x86/x64
  • XP Home SP3 x86
    AMD Athlon(tm) 64 X2 Dual Core 5000+ 2,60 GHz
    2GB RAM, 500 GB HD, GeForce 8600, PB 5.10

Server
  • 2x Linux Debian 6 x64
    PB 5.10


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Email mit SMTP-Auth
BeitragVerfasst: 14.07.2010 19:56 
Offline

Registriert: 06.05.2009 20:01
Hallo Andreas,

danke für die Bereitstellung von dem Protokoll. Wie geschrieben, werde ich mich dem Code nochmal annehmen und versuchen einen zu erstellen, der in allen Fällen korrekt arbeitet. Leider kann ich im Moment noch nicht sagen, wann ich diesen zur Verfügung stellen kann.

_________________
Gruß
Der-T
PB 4.50 RC2


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Email mit SMTP-Auth
BeitragVerfasst: 15.07.2010 09:24 
Offline
Benutzeravatar

Registriert: 10.03.2005 14:01
Habe mir erlaubt mal ein bisschen aufzuräumen und Kiffis Anregung aufzunehmen...

Code:
;Email (PB 4.41, PB 4.50)
;von Der-T, Kiffi, ..., ...

InitNetwork()

Procedure.s ReceiveData(ConnectionID)
  Define DataResult.s
  DataResult = Space(4999)
  ReceiveNetworkData(ConnectionID,@DataResult,4999)   
  Debug DataResult
  DataResult = Left(DataResult,3)
  ProcedureReturn DataResult
EndProcedure

Procedure SendString(ConnectionID, StringToSend.s)
  StringToSend + #CRLF$
  SendNetworkData(ConnectionID, @StringToSend, Len(StringToSend))
EndProcedure

Procedure SendMyMail(Server.s, User.s, Pass.s, MailFrom.s, MailTo.s, Betreff.s, Inhalt.s)
  Protected ReturnValue = 0     
  Protected ConnectionID = OpenNetworkConnection(Server, 25)
  Protected TmpString.s
  If ConnectionID
    If ReceiveData(ConnectionID) = "220"
      SendString(ConnectionID, "EHLO localhost")
      If ReceiveData(ConnectionID) = "250"
        SendString(ConnectionID, "AUTH LOGIN")
        If ReceiveData(ConnectionID) = "334"
          TmpString = Space(1024)
          Base64Encoder(@User, StringByteLength(User), @TmpString, 1024)
          SendString(ConnectionID, TmpString)
          If ReceiveData(ConnectionID) = "334"
            TmpString = Space(1024)
            Base64Encoder(@Pass, StringByteLength(Pass), @TmpString, 1024)
            SendString(ConnectionID, TmpString)
            If ReceiveData(ConnectionID) = "235"
              SendString(ConnectionID, "MAIL FROM: <" + MailFrom + ">")
              If ReceiveData(ConnectionID) = "250"
                SendString(ConnectionID, "RCPT TO: <" + MailTo + ">")
                If ReceiveData(ConnectionID) = "250"
                  SendString(ConnectionID, "DATA") 
                  If ReceiveData(ConnectionID) = "354"
                    SendString(ConnectionID, "From: <" + MailFrom + ">")
                    SendString(ConnectionID, "To: <" + MailTo + ">")
                    SendString(ConnectionID, "Subject: " + Betreff + #CRLF$)
                    SendString(ConnectionID, Inhalt)
                    SendString(ConnectionID, ".")
                    If ReceiveData(ConnectionID) = "250"
                      SendString(ConnectionID, "QUIT")
                      ReturnValue = 1                     
                    EndIf                 
                  EndIf                     
                EndIf                   
              EndIf                 
            EndIf               
          EndIf             
        EndIf           
      EndIf         
    EndIf     
  EndIf
  CloseNetworkConnection(ConnectionID)
  ProcedureReturn ReturnValue
EndProcedure

SendMyMail("mailserver.dein" ,"user" ,"passwort" ,"mailaddy_von", "mailaddy_an" ,"Betreff" ,"Inhalt")

Funktioniert bei mir einwandfrei! :allright:

Edit: Sorry, gerade gesehen das Kiffis Vorschläge schon am 12.7. im Startposting eingepflegt wurden. Meine "Mitarbeit" ist daher für die runde Endablage = Mülleimer. :oops: Die Wärme, ich sags ja...

_________________
:::: Win XP PRO SP3 :: PB 5.11 :: (x86) ::::
Ich stimme mit der Mathematik nicht überein. Ich meine, dass die Summe von Nullen eine gefährliche Zahl ist. Stanisław Jerzy Lec


Zuletzt geändert von rolaf am 15.07.2010 11:10, insgesamt 5-mal geändert.

Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Email mit SMTP-Auth
BeitragVerfasst: 15.07.2010 09:32 
Offline
StudiMod oder sowas in der Art
Benutzeravatar

Registriert: 29.08.2004 20:20
Wohnort: Homburg (Saar)
Jetzt noch das Denglish rausnehmen und alle sind froh. :wink:

_________________
Bild

NEU! Elektronik, Bastelei, Verrücktes, Interessantes, Schlaues, alles in Text, Bild und Ton? Klick hier! NEU!
Linux Mint 14 x64, PureBasic 5.11 x64 (außerdem 4.41, 4.50, 4.61, 5.00, 5.10)

Die deutsche Rechtschreibung ist Freeware, du darfst sie kostenlos nutzen – Aber sie ist nicht Open Source, d. h. du darfst sie nicht verändern oder in veränderter Form veröffentlichen.


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Email mit SMTP-Auth
BeitragVerfasst: 15.07.2010 09:41 
Offline
Benutzeravatar

Registriert: 10.03.2005 14:01
NicTheQuick hat geschrieben:
Jetzt noch das Denglish rausnehmen und alle sind froh. :wink:

Jo, mach mal - mir ist schon wieder zu warm. :mrgreen:

_________________
:::: Win XP PRO SP3 :: PB 5.11 :: (x86) ::::
Ich stimme mit der Mathematik nicht überein. Ich meine, dass die Summe von Nullen eine gefährliche Zahl ist. Stanisław Jerzy Lec


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Email mit SMTP-Auth
BeitragVerfasst: 15.07.2010 10:35 
Offline
StudiMod oder sowas in der Art
Benutzeravatar

Registriert: 29.08.2004 20:20
Wohnort: Homburg (Saar)
Sorry, hab das ganze mal komplett verbessert.

Übersichtlicher, sicherer und Unicode-fähig.

Code:
;Email (PB 4.41, PB 4.50)
;von Der-T, Kiffi, DrFalo, NicTheQuick, ...

EnableExplicit

InitNetwork()

#MAIL_BUFFER = 1024

Procedure.s Mail_ReceiveString(*hConnection.Integer)
   If (Not *hConnection\i)
      ProcedureReturn ""
   EndIf
   Protected DataResult.s = ""
   Protected *mem = AllocateMemory(#MAIL_BUFFER), received.i
   Repeat
      received = ReceiveNetworkData(*hConnection\i, *mem, #MAIL_BUFFER)
      If (received = -1)
         Debug "ReceiveNetworkData() returns error -1. Received Data: '" + DataResult + "'"
         *hConnection\i = 0
         Break
      EndIf
      DataResult + PeekS(*mem, received, #PB_Ascii)
   Until received < #MAIL_BUFFER
   Debug "Debug 'DataResult':" + #CRLF$ + DataResult
   FreeMemory(*mem)
   ProcedureReturn DataResult
EndProcedure

Procedure Mail_SendString(*hConnection.Integer, StringToSend.s)
   If (Not *hConnection\i)
      ProcedureReturn
   EndIf
   StringToSend + #CRLF$
   Protected sent.i = 0, length = Len(StringToSend), res.i
   Protected *mem = AllocateMemory(length + 1)
   
   PokeS(*mem, StringToSend, length, #PB_Ascii)
   
   Repeat
      res = SendNetworkData(*hConnection\i, *mem + sent, length - sent)
      If (res = -1)
         Debug "SendNetworkData() returns error -1. Sent Data: '" + PeekS(*mem, sent, #PB_Ascii) + "'"
         *hConnection = 0
         Break
      EndIf
      sent + res
   Until sent = length
   FreeMemory(*mem)
EndProcedure

Procedure Mail_CheckAnswer(*hConnection.Integer, expected.s)
   If (Not *hConnection\i)
      ProcedureReturn #False
   EndIf
   Protected answer.s = Mail_ReceiveString(*hConnection)
   If (Left(answer, Len(expected)) = expected)
      ProcedureReturn #True
   EndIf
   Debug "Server says '" + answer + "', but expected was '" + expected + "'"
   *hConnection\i = 0
   ProcedureReturn #False
EndProcedure

Procedure.s Mail_Base64Encoder(string.s)
   Protected *mem = AllocateMemory(Len(string) + 1)
   Protected result.s = Space(Len(string) * 3 / 2)
   
   PokeS(*mem, string, Len(string), #PB_Ascii)
   Base64Encoder(*mem, Len(string), @result, Len(result))
   
   FreeMemory(*mem)
   
   ProcedureReturn result
EndProcedure

Procedure Mail_Send(Server.s, User.s, Pass.s, MailFrom.s, MailTo.s, Subject.s, Content.s)
   Protected ConnectionID.i = OpenNetworkConnection(Server, 25), state.i
   Protected TmpString.s
   
   If ConnectionID
      state = ConnectionID
      Mail_CheckAnswer(@state, "220")
      Mail_SendString(@state, "EHLO localhost")
      Mail_CheckAnswer(@state, "250")
      Mail_SendString(@state, "AUTH LOGIN")
      Mail_CheckAnswer(@state, "334")
      Mail_SendString(@state, Mail_Base64Encoder(User))
      Mail_CheckAnswer(@state, "334")
      Mail_SendString(@state, Mail_Base64Encoder(Pass))
      Mail_CheckAnswer(@state, "235")
      Mail_SendString(@state, "MAIL FROM: <" + MailFrom + ">")
      Mail_CheckAnswer(@state, "250")
      Mail_SendString(@state, "RCPT TO: <" + MailTo + ">")
      Mail_CheckAnswer(@state, "250")
      Mail_SendString(@state, "DATA")
      Mail_CheckAnswer(@state, "354")
      Mail_SendString(@state, "From: <" + MailFrom + ">")
      Mail_SendString(@state, "To: <" + MailTo + ">")
      Mail_SendString(@state, "Subject: " + Subject + #CRLF$)
      Mail_SendString(@state, Content)
      Mail_SendString(@state, ".")
      Mail_CheckAnswer(@state, "250")
      Mail_SendString(@state, "QUIT")
      
      CloseNetworkConnection(ConnectionID)
   EndIf
   
   
   ProcedureReturn state
EndProcedure

Define result.i
result = Mail_Send("Server" ,"User" ,"Pass" ,"MailFrom", "MailTo" ,"Subject ,"Content")
Debug "Mail_Send returns: " + Str(result)

Leider mag unser Uni-Mail-Server keine Authentifizierung. Aber wen's interessiert. Hier das Log:
Zitat:
Debug 'DataResult':

220 triton.rz.uni-saarland.de ESMTP Sendmail; Thu, 15 Jul 2010 10:34:13 +0200


Debug 'DataResult':

250-triton.rz.uni-saarland.de Hello wpa-uds054.funklan.uni-saarland.de [134.96.118.63], pleased to meet you

250-ENHANCEDSTATUSCODES

250-PIPELINING

250-8BITMIME

250-SIZE 21485760

250-DSN

250-ETRN

250-STARTTLS

250-DELIVERBY

250 HELP


Debug 'DataResult':

503 5.3.3 AUTH not available


Server says '503 5.3.3 AUTH not available

', but expected was '334'
Mail_Send returns: 0

_________________
Bild

NEU! Elektronik, Bastelei, Verrücktes, Interessantes, Schlaues, alles in Text, Bild und Ton? Klick hier! NEU!
Linux Mint 14 x64, PureBasic 5.11 x64 (außerdem 4.41, 4.50, 4.61, 5.00, 5.10)

Die deutsche Rechtschreibung ist Freeware, du darfst sie kostenlos nutzen – Aber sie ist nicht Open Source, d. h. du darfst sie nicht verändern oder in veränderter Form veröffentlichen.


Nach oben
 Profil  
 
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 62 Beiträge ]  Gehe zu Seite Vorherige  1, 2, 3, 4, 5 ... 7  Nächste

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 2 Gäste


Sie dürfen keine neuen Themen in diesem Forum erstellen.
Sie dürfen keine Antworten zu Themen in diesem Forum erstellen.
Sie dürfen Ihre Beiträge in diesem Forum nicht ändern.
Sie dürfen Ihre Beiträge in diesem Forum nicht löschen.

Suche nach:
Gehe zu:  
cron

 


Powered by phpBB © 2008 phpBB Group | Deutsche Übersetzung durch phpBB.de
subSilver+ theme by Canver Software, sponsor Sanal Modifiye