Autor Beitrag
LuMa86
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 76



BeitragVerfasst: Di 22.01.13 14:26 
Hallo,
ich würde gerne eine Mail aus einem FireMonkey Programm erstellen. Ich benutze FireMonkey nur wegen dem Design und nicht weil ich das ganze in OSX umsetzen möchte. Daher kann ich auch VCL Komponenten manuell deklarieren. Unter VCL habe ich immer JvMail benutzt. Das ging auch super. Habe es unter Firemonkey versucht, aber das geht schief (Anwendungsfehler beim Button OnClick):

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
procedure TfrmCheckOut.BtnCheckoutClick(Sender: TObject);
var
  i: Integer;
begin
  if frmSettings.ListMail.Items.Count > 0 then
    for i := 0 to frmSettings.ListMail.Items.Count do
      Mail.Recipient.AddRecipient(frmSettings.ListMail.Items[i]); // Empfänger aus der ListBox der Einstellungs-Form

   Mail.Subject := 'Trainingsprotokoll KW' + frmMain.KWS; //
   Mail.Body.Add(frmSettings.MailText.Text); //

  if MPath.Items.Count > 0 then
    for i := 0 to MPath.Items.Count do
      Mail.Attachment.Add(MPath.Items[i]); // Anhänge aus einer ListBox

  try
    Mail.SendMail(False);
  except
    ShowMessage('Beim erstellen der E-Mail ist ein Fehler aufgetreten.');
  end;
end;


Das interessante ist, das der Fehler nur kommt, wenn ich eine Eigenschaft wie Subject oder Body fülle. Lasse ich alles leer, kommt statt des Fehlers die ShowMessage im "try..except"-Block.

Hier nochmal der Fehler:
screenshot

Ich hoffe mir kann jemand helfen oder eine Alternative zeigen.


Moderiert von user profile iconNarses: Topic aus Sonstiges (Delphi) verschoben am Di 22.01.2013 um 16:26
Moderiert von user profile iconNarses: Bild als Anhang hochgeladen.
Einloggen, um Attachments anzusehen!
Nersgatt
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1581
Erhaltene Danke: 279


Delphi 10 Seattle Prof.
BeitragVerfasst: Di 22.01.13 14:51 
Wie und wo ist denn "Mail" deklariert und wo erzeugst Du die Instanz von Mail?

_________________
Gruß, Jens
Zuerst ignorieren sie dich, dann lachen sie über dich, dann bekämpfen sie dich und dann gewinnst du. (Mahatma Gandhi)
LuMa86 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 76



BeitragVerfasst: Di 22.01.13 15:16 
Mail ist die TJvMail-Komponente. Da sie nicht in der Komponentenliste am Rand steht, habe ich sie manuell unter public deklariert.
Hmm stimmt, eine Instanz habe ich garnicht erzeugt. Aber wie ist das mit andern Komponenten. Habe auf einer anderen Form die JvSerialMaker. Die läuft zwar unter OSX, ist aber auch nicht in der Komponentenliste aufgeführt. Habe sie auch unter public dekalriert. Deswegen habe ich auch kaine Instanz von Mail erzeugt.

Lukas
Nersgatt
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1581
Erhaltene Danke: 279


Delphi 10 Seattle Prof.
BeitragVerfasst: Di 22.01.13 15:18 
Die Instanz musst Du aber zwingend erstellen. Aber nur einmal, sonst baust Du dir ggf. ein Speicherleck. Also z.B. im FormCreate erstellen.

_________________
Gruß, Jens
Zuerst ignorieren sie dich, dann lachen sie über dich, dann bekämpfen sie dich und dann gewinnst du. (Mahatma Gandhi)

Für diesen Beitrag haben gedankt: LuMa86
LuMa86 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 76



BeitragVerfasst: Di 22.01.13 15:26 
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
Mail := TJvMail.Create(Self);  // ist im FormCreate

  if frmMain.TPData.FindKey([1]) = true then
  begin
    frmMain.TPData.Edit;
    frmMain.TPDataGewicht.AsString := EdWeight.Text;
    frmMain.TPData.Post;
  end;

  if frmSettings.ListMail.Items.Count > 0 then
    for i := 0 to frmSettings.ListMail.Items.Count do
      Mail.Recipient.AddRecipient(frmSettings.ListMail.Items[i]);

  Mail.Subject := 'Trainingsprotokoll KW' + frmMain.KWS;
  Mail.Body.Add(frmSettings.MailText.Text);

  if MPath.Items.Count > 0 then
    for i := 0 to MPath.Items.Count do
      Mail.Attachment.Add(MPath.Items[i]);

  try
    Mail.SendMail(True);
  except
    ShowMessage('Beim erstellen der E-Mail ist ein Fehler aufgetreten.');
  end;

  Mail.Free;  // ist im FormCreate


So, jetzt geht es :)
Also der SerialMaker tut seine Arbeit auch ohne das erzeugen einer Instanz :D
Nersgatt
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1581
Erhaltene Danke: 279


Delphi 10 Seattle Prof.
BeitragVerfasst: Di 22.01.13 15:31 
Entweder ist das mit dem SerialMaker purer Zufall, oder das Dingen hat nur Klassenprozeduren. Aber das wäre wohl ein neues Thema.

_________________
Gruß, Jens
Zuerst ignorieren sie dich, dann lachen sie über dich, dann bekämpfen sie dich und dann gewinnst du. (Mahatma Gandhi)