Seite 1 von 2

E-Mail Schreibe Programm

Verfasst: 12.08.2005 20:18
von R4z0r1989
Wieso geht es nicht, ich schaffe es einfach nicht.
Könnte mir wer helfen oder versuchen mir den Fehler zu schildern dass ich ihn kein 2. Mal mache Danke im voraus.

Code: Alles auswählen




If OpenWindow(0,1,1,200,300,#PB_Window_SystemMenu | #PB_Window_ScreenCentered | #PB_Window_MinimizeGadget | #PB_Window_SizeGadget,"E-Mail")

    If CreateGadgetList(WindowID())
      
      StringGadget(1,10,21,180,20,"")

      ButtonGadget(2,5,260,90,35,"Senden")
      
      ButtonGadget(3,105,260,90,35,"Abbruch")
      
      TextGadget(4,10,10,180,20,"Server-Adresse")
      
      TextGadget(5,10,50,180,20,"Absender")
      
      StringGadget(6,10,61,180,20,"")
      
      TextGadget(7,10,90,180,20,"Empfänger")
      
      StringGadget(8,10,101,180,20,"")
      
      TextGadget(9,10,130,180,20,"Betreff")
      
      StringGadget(10,10,141,180,20,"")

      TextGadget(11,10,170,180,20,"Text")
      
      StringGadget(12,10,181,180,65,"",#PB_String_Multiline)
      
      
      
    EndIf
    
  Repeat

  EventID = WaitWindowEvent()      
     Select EventID
     
       Case #PB_Event_CloseWindow
       End
           
       Case #PB_Event_Gadget 
         Select EventGadgetID() 
          
        
          Case 2 : 
          Goto label1
          
          Case 3 :
          Goto labelend
          

         EndSelect
     EndSelect
   
  ForEver

EndIf


label1 :

Server$ = GetGadgetText(1)
Absender$ = GetGadgetText(6)
Empfanger$ = GetGadgetText(8)
Titel$ = GetGadgetText(10)
Text$ = GetGadgetText(12)




Global res.s, cr.s, ConnID.l 
cr.s=Chr(13)+Chr(10) 


Procedure send(msg.s) 
  SendNetworkData(ConnID,@msg,Len(msg)) 
  Debug "send: "+msg 
EndProcedure 

Procedure.s wait() 
  res="" 
  For tmp=1 To 4999 
    res+" " 
  Next 
  ReceiveNetworkData(ConnID,@res,4999) 
  Debug "received: "+res 
  res=Left(res,3) 
  ProcedureReturn res 
EndProcedure 

Procedure.l sendmail(mailserver.s,mailto.s,mailfrom.s,subject.s,msgbody.s) 
  If InitNetwork() 
    ConnID = OpenNetworkConnection(mailserver,25) 
    If ConnID 
      wait() 
      error=0 
      If res="220" 
        send("HELO CGIapp"+cr) 
        wait()    
        If res="250" 
          Delay(100) 
          send("MAIL FROM: <"+mailfrom+">"+cr) 
          wait() 
          If res="250" 
            send("RCPT TO: <"+mailto+">"+cr) 
            wait() 
            If res="250" 
              send("DATA"+cr) 
              wait() 
              If res="354" 
                Delay(100) 
                send("Date: "+cr) 
                send("From: <"+mailfrom+">"+cr) 
                send("To: <"+mailto+">"+cr) 
                send("Subject: "+subject+cr) 
                send("X-Mailer: PBMailer"+cr) 
                Delay(100) 
                send("--"+cr+"--"+cr+cr) 
                send(msgbody) 
                Delay(100) 
                send(""+cr) 
                send("."+cr) 
                wait() 
                If res="250" 
                  Delay(100) 
                  send("QUIT"+cr) 
                  wait() 
                  ProcedureReturn 1 
                EndIf 
              EndIf 
            EndIf 
          EndIf 
        EndIf 
      EndIf 
      CloseNetworkConnection(ConnID) 
    EndIf 
  EndIf  
EndProcedure 

;============================== 
;-Enter Appropriate Information 

mailserver.s=Str(Sever$) 
mailto.s=Str(Empfanger$) 
mailfrom.s=Str(Absender$) 
subject.s=Str(Titel$) 
msgbody.s=Str(Text$)

  If sendmail(mailserver,mailto,mailfrom,subject,msgbody) 
    MessageRequester("Done","Mail Sent Successfully!",0) 
    Else 
    MessageRequester("Error","Error Sending Mail.",#MB_ICONERROR) 
  EndIf
 




labelend :





End

Verfasst: 12.08.2005 20:47
von MVXA
mailserver.s=Str(Sever$)
mailto.s=Str(Empfanger$)
mailfrom.s=Str(Absender$)
subject.s=Str(Titel$)
msgbody.s=Str(Text$)

wird in den Variablen vor dem = den Pointer zu den Variablen in str() speichern.

Verfasst: 12.08.2005 20:49
von R4z0r1989
sorry das hab ich jetzt nicht verstanden das musst du mir etwas besser erklären.

Danke im Voraus!!!

Verfasst: 12.08.2005 20:50
von MVXA

Code: Alles auswählen

Test$ = "Hallo Welt!"
Debug Test$
Test$ = Str(Test$)
Debug Test$

Verfasst: 13.08.2005 12:11
von rolaf
MVXA hat geschrieben:

Code: Alles auswählen

Test$ = "Hallo Welt!"
Debug Test$
Test$ = Str(Test$)
Debug Test$
Hallo, müßte PureBasic da nicht einen Fehler ausgeben, wenn man einen String in einen String umwandeln will? :o
Ich meine JA!

Verfasst: 13.08.2005 12:16
von ts-soft
Falo hat geschrieben:
MVXA hat geschrieben:

Code: Alles auswählen

Test$ = "Hallo Welt!"
Debug Test$
Test$ = Str(Test$)
Debug Test$
Hallo, müßte PureBasic da nicht einen Fehler ausgeben, wenn man einen String in einen String umwandeln will? :o
Ich meine JA!
Nein, der Fehler liegt ja nur beim Programmierer. Ansonsten ist es nämlich ein Feature. Hab schon DLLs gehabt, die wollten den Pointer zu einem String, der den Pointer zu einem String enthält, haben :D

Verfasst: 13.08.2005 12:21
von rolaf
ts-soft hat geschrieben:Nein, der Fehler liegt ja nur beim Programmierer. Ansonsten ist es nämlich ein Feature. Hab schon DLLs gehabt, die wollten den Pointer zu einem String, der den Pointer zu einem String enthält, haben :D
Hallo, ok - nur dann sollte sowas auch in der Hilfe für den Befehl Str() zu finden sein (bei 3.93 jedenfalls nicht).

Edit:
Und wie man sieht ist solcherlei unkommentierte Doppelfunktionen für Anfänger tötlich. Würde es richtigerweise einen Fehler auswerfen, wäre der Fehler sofort erkennbar gewesen.

Verfasst: 13.08.2005 12:23
von Kiffi
> Hallo, müßte PureBasic da nicht einen Fehler ausgeben, wenn man einen
> String in einen String umwandeln will? :o

nun, wenn man versucht, mittels Val() eine Zahl in eine Zahl
umzuwandeln, dann gibt PB einen Fehler aus.

Ich sehe keinen Grund, warum Fred das nicht auch bei Strings so einbauen
sollte (zumal das derzeitige Verhalten von PB immer wieder zu
Mißverständnissen führt).

Code: Alles auswählen

MeineZahl.l = 12
Debug Val(MeineZahl) ; Fehler

MeinString.s = "Hallo"
Debug Str(MeinString) ; Kein Fehler
Grüße ... Kiffi

Verfasst: 13.08.2005 12:32
von Green Snake
ts-soft meinte ja, dass man das ap und zu braucht.

vieleicht wäre es besser, wenn pb bei dem eine warnung ausgeben würde, sich das programm aber trotzdem komplieren lassen kann.

warnungen wären auch an anderen stellen recht nützlich.
zb wenn code DIREKT zb hinter end stehen würde, dass dan eine warnung mit: Code wird nie erreicht rauskommt.

Verfasst: 13.08.2005 13:09
von ts-soft

Code: Alles auswählen

text$ = "Hallo die Enten"
a.s = Str(@text$)
b.s = Str(text$)
Debug a
Debug b
Durch diese autom. Umwandlung Funktionieren diverse DLL- und API-Aufrufe, wo ein Pointer erwartet wird und stattdessen einfach nur der String übergeben wird. Eine Änderung würde bedeuten das sehr viele PB-Codes nicht mehr läuffähig sind. Dann müßten dort immer tatsächlich Pointer übergeben werden und nicht. Beispiel aus der Hilfe:

Code: Alles auswählen

If OpenLibrary(0, "USER32.DLL")

  *F = IsFunction(0, "MessageBoxA")
  If *F
    CallFunctionFast(*F, 0, "Body", "Title", 0)
  EndIf
  
  CloseLibrary(0)
EndIf
müßte umgeschrieben werden in:

Code: Alles auswählen

If OpenLibrary(0, "USER32.DLL")

  *F = IsFunction(0, "MessageBoxA")
  If *F
    body.s = "Body"
    title.s = "Title"
    CallFunctionFast(*F, 0, @body, @title, 0)
  EndIf
  
  CloseLibrary(0)
EndIf
Auch das weglassen von @ würde zu Fehlern führen, genauso wie @"Body"
Das hängt alles zusammen mit der autom. Konvertierung, die sehr hilfreich ist und von vielen benutzt wird, ohne darüber nachzudenken.