E-Mail Schreibe Programm

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
R4z0r1989
Beiträge: 521
Registriert: 12.06.2005 18:06
Kontaktdaten:

E-Mail Schreibe Programm

Beitrag 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
Benutzeravatar
MVXA
Beiträge: 3823
Registriert: 11.09.2004 00:45
Wohnort: Bremen, Deutschland
Kontaktdaten:

Beitrag 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.
Bild
Benutzeravatar
R4z0r1989
Beiträge: 521
Registriert: 12.06.2005 18:06
Kontaktdaten:

Beitrag von R4z0r1989 »

sorry das hab ich jetzt nicht verstanden das musst du mir etwas besser erklären.

Danke im Voraus!!!
Benutzeravatar
MVXA
Beiträge: 3823
Registriert: 11.09.2004 00:45
Wohnort: Bremen, Deutschland
Kontaktdaten:

Beitrag von MVXA »

Code: Alles auswählen

Test$ = "Hallo Welt!"
Debug Test$
Test$ = Str(Test$)
Debug Test$
Bild
Benutzeravatar
rolaf
Beiträge: 3843
Registriert: 10.03.2005 14:01

Beitrag 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!
:::: WIN 10 :: PB 5.73 :: (x64) ::::
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag 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
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
rolaf
Beiträge: 3843
Registriert: 10.03.2005 14:01

Beitrag 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.
Zuletzt geändert von rolaf am 13.08.2005 12:28, insgesamt 3-mal geändert.
:::: WIN 10 :: PB 5.73 :: (x64) ::::
Benutzeravatar
Kiffi
Beiträge: 10719
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag 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
a²+b²=mc²
Benutzeravatar
Green Snake
Beiträge: 1394
Registriert: 22.02.2005 19:08

Beitrag 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.
-.-"
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag 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.
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Antworten