![]() |
EMail aus einem Dienst erzeugen
Hallo!
Mein erster Beitrag :angel2: , mal sehen ... Ich möchte aus einem Windows 2003 Server Dienst (mit D7 Prof erzeugt) eine EMail generieren, wenn ein bestimmtes Programm nicht mehr läuft und auch nicht vom Dienst wieder gestartet werden kann. Bis auf das Versenden der Mail klappt auch alles. Diese Mail versuche ich mit den Indy Komponenten TIdSMTP und TIdMessage zu senden. Wenn ich dies aus einer "normalen" EXE heraus mache, habe ich kein Problem. Aber eine durch den Dienst erzeugt Mail wird nicht versendet. Es wird eine SMTP Connection aufgebaut, doch der Send Befehl wird nicht (korrekt) ausgeführt. Hier ein Auszug aus meinem Code: ******************************************** try SMTP.Send(IdMsgSend); DebugDatei('Mail versendet'); finally if SMTP.Connected then SMTP.Disconnect; DebugDatei('Mail wurde nicht versendet'); end; ******************************************** Hinweis: Die Prozedur DebugDatei schreibt schreibt die durchlaufenen Schritte in eine Datei. Der Eintrag "Mail versendet" wird nicht ausgeführt. Hat jemand von Euch einen Tipp? Danke schon mal für die Mühe (zumindest für das Lesen). Gruß Franz |
Re: EMail aus einem Dienst erzeugen
Hallo und willkommen in der DP.
Bitte benutze die Delphi-Tags, dann sieht der gepostete Code auch so aus: (ich habe mir erlaubt, den Code auch noch entsprechend einzurücken)
Delphi-Quellcode:
1. Im Fall der Fälle wird keine Debug-Meldung abgesetzt!
try
SMTP.Send(IdMsgSend); DebugDatei('Mail versendet'); finally if SMTP.Connected then SMTP.Disconnect; DebugDatei('Mail wurde nicht versendet'); end; Nämlich, wenn SMTP.Send einen Fehler bringt und SMTP.Disconnect einen Fehler bringt. 2. Wird die Mail korrekt versendet, steht in deinem Debug:
Code:
3. Da du nicht verrätst, wie die Properties der Komponenten eingestellt sind (SMTP, IdMsgSend), ich aber mal unterstelle, dass es sich hier um TIdSMTP und TIdMessage handelt, kann dir hier auch niemand bei deinem Problem helfen.
Mail versendet
Mail wurde nicht versendet cu Oliver |
Re: EMail aus einem Dienst erzeugen
Wird das Versenden evtl. von einer Firewall geblockt?
|
Re: EMail aus einem Dienst erzeugen
Liste der Anhänge anzeigen (Anzahl: 2)
Hallo Oliver!
Danke schon mal für Deine Mühe. Wie Du vermutest (und ich im ersten Absatz meines Beitrages schrieb :) ) verwende ich die Komponenten TIdSMTP und TIdMessage. Nachfolgend der Quellcode. Der SMTP Server den ich verwende existiert und ist erreichbar. Auch die Empfängeradresse ist gültig. Die Eigenschaften der Komponenten habe ich als JPGs beigefügt.
Delphi-Quellcode:
Ich hoffe, die Informationen sind jetzt soweit vollständig, dass mir jemand weiterhelfen kann!?
procedure TsvcArchivprgUeberwachung.MailToAdmin;
begin with IdMsgSend do begin From.Text := 'Archiv_Mailsender@test.de' //Absender ReplyTo.EMailAddresses := ''; //Antwort an Recipients.EMailAddresses := 'weghaus@test.de'; //Empfänger der Mail //Mailtext Body.Clear; try IdMsgSend.MessageParts.Clear; except end; Subject := 'Archivüberwachung'; //Mailbetreff Body.Add('Nachricht vom Archivsytem:'); Body.Add(''); Body.Add('Das Archivüberwachungsprogramm läuft derzeit nicht.'); Body.Add('Es konnte auch nicht automatisch gestartet werden.'); Body.Add('Bitte überprüfen Sie dies und starten Sie das Programm.'); Body.Add(''); //Ende Mailtext Priority := mpNormal; //Priorität CCList.EMailAddresses := ''; //Kopie an BccList.EMailAddresses := ''; //Blindkopie an ReceiptRecipient.Text := ''; //Antwortnachricht end; DebugDatei('Mail zum Versand erzeugt, die Verbindung wird jetzt hergestellt.'); //Authentifikation am Mailserver SMTP.AuthenticationType := atNone; //Servername und -port vorgeben SMTP.Host := SmtpServerName; SMTP.Port := SmtpServerPort; //Nachricht senden SMTP.Connect; if SMTP.Connected then DebugDatei('Connection wurde hergestellt') else DebugDatei('Connection konnte nicht aufgebaut werden'); try SMTP.Send(IdMsgSend); DebugDatei('Mail erfolgreich gesendet'); finally SMTP.Disconnect; DebugDatei('Disconnect ist erfolgt.'); end; end; Gruß Franz |
Re: EMail aus einem Dienst erzeugen
Hallo Bernhard,
die Firewall dürfte die Mail eigentlich nicht blocken. Wenn ich eine "normale" EXE mit diesem Code (sh. Antwort an Oliver) nutze, kommt eine Mail an. Was allerdings sein könnte: Der Dienst läuft ja nicht in meinem Benutzerkontext, sondern unter "lokales System". Evtl. liegt hier der Grund? Danke für den Tipp. Gruß Franz |
Re: EMail aus einem Dienst erzeugen
Hallo Leute,
ich habe die Erzeugung der EMail in eine normal EXE verlagert, die ich aus dem Dienst heraus mit ShellExecute aufrufe. Das funktioniert einwandfrei. Danke aber für Euere Mühe. Gruß Franz :-D |
Re: EMail aus einem Dienst erzeugen
Hallo,
auch wenn Du schon eine Lösung hast, mein Dienst macht das so:
Delphi-Quellcode:
Stephan
IdMessage.Clear;
IdMessage.MessageParts.Clear; IdMessage.Date := Now; idMessage.Subject := 'Fehlerprotokoll: Dienstestatus'; IdMessage.Body.Text := slMail.Text; IdMessage.From.Text := GetEnvironmentVariable('COMPUTERNAME') + '@meinedomaene.de'; IdMessage.Recipients.EMailAddresses := iniMail.ReadString('MAILSERVER','EMailAddresses','mein.name@meinedomaene.de'); idSMTP.Host := iniMail.ReadString('MAILSERVER','HOST','ip.des.mail.servers'); idSMTP.HeloName := iniMail.ReadString('MAILSERVER','HELONAME','mein.name'); idSMTP.Password := iniMail.ReadString('MAILSERVER','PASSWORD',''); idSMTP.Username := idSMTP.HeloName; Try idSMTP.Connect(10000); idSMTP.QuickSend(iniMail.ReadString('MAILSERVER','HOST','ip.des.mail.servers'), IdMessage.Subject, IdMessage.Recipients.EMailAddresses, IdMessage.From.Text, IdMessage.Body.Text); ErrorLog('Protokoll per Mail versandt.',0); Except on e : Exception Do Begin ErrorLog(tmDienste.Name + ' Exception beim Mailversand: ' + e.Message,0); end; end; try idSMTP.Disconnect; except end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:54 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-2025 by Thomas Breitkreuz