![]() |
Versand per SMTP
Moin,
ich habe folgendes Testprogramm und folgende Fragen: 1: Ich würde erwarten das ich bei vier versendeten Mails immer nur 4 Anhänge (Test1-Test4) bekomme. Aber ich bekomme in der ersten Mail 4 Anhänge, in der zweiten Mail 8 usw. Ich hätte aber gedacht das das "iAttachment.Free;" am Ende des versenden reicht um die "alten" Anhänge zu löschen. 2: Ich hätte gedacht das die beiden Zeilen
Delphi-Quellcode:
den Body-Text der Mail neu setzen. Statt dessen kommt aber imer der gleiche Text der ersten Schleife und die anderen Schleifen ändern den Text nicht mehr.
Form1.Memo1.Lines.Add('Beginn Mailerstellung: ' +FloatToStr(Runde));
Form1.IdMessage1.Body.Assign(Form1.Memo1.Lines); Und nun - was mache ich denn falsch ?? Gruss Hans
Delphi-Quellcode:
unit SSLMail2Unit;
interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, IdIOHandler, IdIOHandlerSocket, IdIOHandlerStack, IdSSL, IdSSLOpenSSL, IdComponent, IdTCPConnection, IdTCPClient, IdExplicitTLSClientServerBase, IdMessageClient, IdSMTPBase, IdSMTP, IdBaseComponent, IdMessage, IDAttachment, IdAttachmentFile, IDGlobal; type TForm1 = class(TForm) Button1: TButton; IdMessage1: TIdMessage; IdSMTP1: TIdSMTP; IdSSLIOHandlerSocketOpenSSL1: TIdSSLIOHandlerSocketOpenSSL; Memo1: TMemo; procedure Button1Click(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.dfm} procedure MailConnect; begin Form1.IdSMTP1.AuthType := satDefault; // simpler Login ohne Authentifizierung Form1.IdSMTP1.Host := 'smtp.strato.de'; Form1.IdSMTP1.Port := 465; Form1.IdSMTP1.UseTLS := utUseRequireTLS; // mit SSL -> Port dann in aller Regel 587 Form1.IdSMTP1.Username := 'h.bothur@xxx.xx'; // Benutzername Form1.IdSMTP1.Password := 'Passwort'; // Passwort // Verbinden mit Server Form1.Memo1.Lines.Add('Beginn Connect'); try Form1.IdSMTP1.Connect; except on E: Exception do begin Form1.Memo1.Lines.Add('>> Fehler Connect: '); Form1.Memo1.Lines.Add('>> ' +e.message +': '); Application.MessageBox (PChar(E.Message),'Verbindungsfehler Connect!',MB_OK); Form1.IdSMTP1.Disconnect; exit; end; end; Form1.Memo1.Lines.Add('Connected'); Form1.Memo1.Lines.Add(''); end; procedure MailVersenden(Runde: integer); var iAttachment : TIdAttachment; begin Form1.Memo1.Lines.Add('Beginn Mailerstellung: ' +FloatToStr(Runde)); Form1.IdMessage1.Body.Assign(Form1.Memo1.Lines); // der eigentliche eMail -Text aus einem TMemo Form1.IdMessage1.Priority := TIdMessagePriority(2); // Priorität Form1.IdMessage1.Recipients.EMailAddresses := 'hans.hgbothur.de'; // Empfängeradresse Form1.IdMessage1.ReplyTo.EMailAddresses := 'h.bothur@hermann-juergensen.de'; // Anwortadresse Form1.IdMessage1.From.Text := 'h.bothur@hermann-juergensen.de'; // Absenderadresse Form1.IdMessage1.ContentType := 'multipart/*'; // mit Anhang! Form1.IdMessage1.Subject := 'Testmail: ' +FloatToStr(Runde); iAttachment := TIdAttachmentFile.Create(Form1.IdMessage1.MessageParts, 'i:\h.bothur\entw\rtn\mailtest\test1.pdf') ; iAttachment := TIdAttachmentFile.Create(Form1.IdMessage1.MessageParts, 'i:\h.bothur\entw\rtn\mailtest\test2.pdf') ; iAttachment := TIdAttachmentFile.Create(Form1.IdMessage1.MessageParts, 'i:\h.bothur\entw\rtn\mailtest\test3.pdf') ; iAttachment := TIdAttachmentFile.Create(Form1.IdMessage1.MessageParts, 'i:\h.bothur\entw\rtn\mailtest\test4.pdf') ; Form1.Memo1.Lines.Add('Beginn Senden: ' +FloatToStr(Runde)); try if Form1.IdSMTP1.Connected then Form1.IdSMTP1.Send(Form1.IdMessage1); except on E: Exception do begin Application.MessageBox (PChar(E.Message),'Verbindungsfehler Versand !',MB_OK); Form1.IdSMTP1.Disconnect; exit; end; end; iAttachment.Free; Form1.Memo1.Lines.Add('Ende Senden: ' +FloatToStr(Runde)); end; procedure TForm1.Button1Click(Sender: TObject); var i: Integer; begin MailConnect; for i := 1 to 4 do begin MailVersenden(i); Memo1.Lines.Add(''); end; IdSMTP1.Disconnect; end; end. |
AW: Versand per SMTP
Zitat:
Delphi-Quellcode:
Und nach dem Senden deine Message "clearen".
var
idMessageBuilder: TIdMessageBuilder; begin idMessageBuilder := TIdMessageBuilder.Create; try idMessageBuilder.PlainText.Text := '...'; idMessageBuilder.Attachments.Add('i:\h.bothur\entw\rtn\mailtest\test1.pdf'); idMessageBuilder.FillMessage(idMessage); finally idMessageBuilder.Free; end; Bis bald... Thomas |
AW: Versand per SMTP
iAttachment wird viermal was per TIdAttachmentFile.Create zugewiesen, aber das iAttachment.Free gibt es nur einmal. Das Ergebnis welcher Zuweisung wird denn hier freigegeben und was passiert mit den verbleibenden dreien?
Und da iAttachment außer bei der Zuweisung nicht verwendet wird, könnte man dann nicht direkt ganz darauf verzichten? Wenn von vier iAttachment drei nicht freigegeben werden, kann man auf die vierte Freigabe auch verzichten ;-) Ansonsten würd' ich mir mal IdMessage1.MessageParts anschauen. Das gibt es sowas wie IDMessage.MessageParts.Count. Damit dürftest Du erfahren, wieviele Anhänge an der Mail schon vorhanden sind. Tippe mal darauf, dass Du dort nach dem Mailversand ein bisserl aufräumen musst und nicht erwarten kannst, dass die Aufräumarbeiten automatisch nach vom Send oder vom Disconncet ausgeführt werden. Wäre auch nicht wirklich sinnvoll, wenn man viele Mails (z. B. in 'ner Schleife) mit den gleichen Anhängen an viele unterschiedliche Empfänger schicken möchte. Und: Nimm doch bitte im Eingangspost mal den Nutzernamen und das Passwort raus, sonst kommt noch wer auf die Idee und verschickt in Deinem Namen über Deine Firmenemail irgendwelchen Spam. Würd' mich als Chef dann eher nicht erfreuen ;-) |
AW: Versand per SMTP
Zitat:
Zitat:
Gruss Hans |
AW: Versand per SMTP
Zitat:
bei mir scheitert das schon an dem
Delphi-Quellcode:
:
idMessageBuilder: TIdMessageBuilder;
Ich binde in den Uses u.a. IdMessageBuilder ein:
Delphi-Quellcode:
bekomme dann aber in der Zeile
uses ... IdMessageBuilder ...
Delphi-Quellcode:
den TIdMessageBuilder als "E2003 undeklarierter Bezeichner TidMessageBuilder" markiert.
procedure MailVersenden(Runde: integer);
var iAttachment : TIdAttachment; idMessageBuilder: TIdMessageBuilder; Weisst Du warum ? Gruss Hans |
AW: Versand per SMTP
Die Klasse heißt IMO TIdMessageBuilderHtml oder TIdMessageBuilderPlain.
Frank |
AW: Versand per SMTP
Zitat:
Hans |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:53 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz