German E-Mail mit Standardclient versenden

JackPodd

New Member
Hallo zusammen,

ich suche nach einer Möglichkeit, Mails über den Standardclient verdeckt zu versenden. Hintergrund ist eine Art Report-App, an deren Ende eine Report generiert und zum Kunden geschickt werden soll. Ist zum Zeitpunkt des Versandes allerdings kein Netz in Reichweite schmiert die App ab. Meine Hoffnung wäre an der Stelle, dass der "Standardmailclient" den Versand immer wieder - sprich bei nächstem Zugang zum Internet - wiederholt und damit die Mail auch wirklich versendet wird. Hat jemand da eine groben Tipp oder bereits erfolgreiche Erfahrungen gemacht? Vielen Dank für Eure Bemühungen im Voraus!
 

eurojam

Well-Known Member
Licensed User
Longtime User
Hallo JackPodd,
ich würde da eher zu der Verwendung der Net-Library raten, denn beim Standard Mail Client, muss der user dann explizit auf "Senden" drücken...also auch nicht perfekt:
https://www.b4x.com/android/forum/threads/new-net-library-android-ftp-smtp-and-pop3.10892/
das zusammen mit einem Timer, der fallsdie Mail nicht versendet wird, es in einem Intervall (z.B. 1 Minute) wieder versucht. das sieht dann etwa so aus (ganz grob, quick and dirty):
B4X:
Sub Globals
    'These global variables will be redeclared each time the activity is created.
    'These variables can only be accessed from this module.
   Private smtpClient As SMTP
   Private mTimer As Timer
End Sub

Sub Activity_Create(FirstTime As Boolean)
    'Do not forget to load the layout file created with the visual designer. For example:
    'Activity.LoadLayout("Layout1")

   If FirstTime Then
      smtpClient.Initialize("smtp.gmail.com", 587, "[email protected]",  "xxx", "SmtpClient")
      smtpClient.StartTLSMode = True
   End If
   mTimer.Initialize("mTimer",60000)
 
   mTimer.Enabled = True
 
End Sub

Sub mTimer_Tick
  smtpClient.To.Add("[email protected]")
  smtpClient.Subject = "Title"
  smtpClient.Body = "Variable1=Test1, Variable2=Test2"
  smtpClient.Send   
End Sub

Sub SmtpClient_MessageSent(Success As Boolean)
    If Success Then
      Log(" gesendet um " & DateTime.Time(DateTime.Now))
       mTimer.Enabled = False
    Else
      Log(" nicht gesendet....versuche es in 60 sekunden wieder")
      Log(LastException.Message)
    End If    
End Sub
 

JackPodd

New Member
Hallo eurojam,
vielen Dank für Deine Idee(n). Ich hab mir schon gedacht, dass ich um das Versenden aus der App nicht herumkomme - nur gehofft ... ;) Die Idee mit dem Timer ist ein guter Ansatz, ich muss nur sehen, ob ich bei vielen möglicherweise anfallenden EMails nicht den Überblick verliere ... wahrscheinlich komme ich besser, wenn ich es mittels einer eigenen Prozedur und DB sauber organisiere: Wenn Internet und App offen -> dann protokollierter Versand, wenn kein Internet -> dann halt nur in die DB für den Versand schreiben ... DANKE und ein schönes WE!
Jack
 
Top