![]() |
TSendMail
hallo,
ich versuche seit Tagen in Delphi 10 eine Mail mit vorangestellten Werten zu erzeugen. Ich finde im WWW keine brauchbare Info, wie die TSendMail-Komponente zu verwenden ist. Wer kann mir helfen? Bekomme immer die Fehlermeldung UserAbort ohne dass das Mail-Fenster geöffnet wird. Codeauszug:
Delphi-Quellcode:
Win 10 64 Bit
type
TForm2 = class(TForm) ActionList1: TActionList; [B] InternetSendMail1: TSendMail;[/B] … procedure TForm2.Button1Click(Sender: TObject); var OK: Boolean; // RC: TRecipientCollection; // RI: TRecipientItem; // CI: TCollectionItem; begin // RI := TRecipientItem.Create(RC); // InternetSendMail1.Recipients := rc; // RC := TRecipientCollection.Create(InternetSendMail1); // RC.Clear; // InternetSendMail1.Recipients.Clear; // ri.Create(CI); InternetSendMail1.OnMailSendStatus := SendStatus; InternetSendMail1.Recipients.Add; // InternetSendMail1.Recipients.Count; InternetSendMail1.Recipients[0].Address := 'Empfänger@aon.at'; InternetSendMail1.Recipients[0].RecipientType := rtPrimary; InternetSendMail1.Recipients[0].DisplayName := 'Name'; InternetSendMail1.Subject := 'Test'; InternetSendMail1.Text.Add('Testtext'); // // rc..Assign(ri); // InternetSendMail1.Recipients.Assign(RC); // RC.Add; // RC. := InternetSendMail1.Recipients; // InternetSendMail1.Visible := True; OK := InternetSendMail1.Execute; end; Outlook 365 |
AW: TSendMail
Muss es dieses TSendMail sein? Wenn nicht, hätte ich eine bessere Lösung für dich.
Ich kenne TSendMail eh nicht. Meine Lösung braucht die Daten eines SMTP-Servers. |
AW: TSendMail
Hallo,
nimm doch mal das Bsp. aus der Hilfe. ![]() Dann musst du zwar ein paar Sache eintragen (Empfänger), aber wenn das geht, kannst du deine Sachen schrittweise wieder reinnehmen. |
AW: TSendMail
Das Beispiel ist unvollständig:
Welchen SMTP-Server nutzt Du? Welche Ports nutzt Du? Der Fehler kann bedeuten, dass mit Benutzername und Passwort, sowie SMTP-Server und / oder Port eine gültige Anmeldung nicht möglich ist. Bei Nutzung anderer Komponenten wird dieses Problem bestehen bleiben, bis auf jeden Fall alle Angaben korrekt sind. Sind sie jedoch alle korrekt, sollte die Nutzung der Komponenten egal sein. Tante Google liefert als erstes Ergebnis : ![]() Dann wäre da noch: ![]() ![]() und viele andere ... |
AW: TSendMail
Ich glaube TSendMail verwendet die MAPI Schnittstelle.
Wenn dem so ist: Wenn du ein MAPI fähiges eMail Programm P installiert hast (und dort MAPI eingeschaltet ist), dann sendet TSendMail an P und dann wird deine eMail von P aus gesendet. Im ![]() the e-mail is shown for editing (with the help of any e-mail application available on the computer). Sende doch deine eMail direkt an den Mailserver via die entsprechende Indy oder ICSOverbyte (SyncSmtpCli oder SslSmtpClient) oder irgend eine andere eMail Komponente. Mit ICSOverbyte (via Delphi "Tools > GetIt…" installierbar) SycSMTPCli zum Beispiel so:
Delphi-Quellcode:
Wobei die obigen Methoden TRUE zurückgeben, wenn OK. D.h. du solltest die Rückgabewerte von ConnectSync bis QuitSync noch sinnvoll auswerten...SyncSmtpCli1.AbortSync; SyncSmtpCli1.SignOn := 'swiss.ch'; SyncSmtpCli1.FromName := 'supp@swiss.ch'; SyncSmtpCli1.HdrFrom := 'supp@swiss.ch'; SyncSmtpCli1.Host := 'mail.swiss.ch'; SyncSmtpCli1.Password := mailpw; SyncSmtpCli1.UserName := mailID; SyncSmtpCli1.AuthType := smtpAuthLogin; SyncSmtpCli1.HdrTo := …. SyncSmtpCli1.RcptName.Clear; SyncSmtpCli1.RcptName.Add( SyncSmtpCli1.HdrTo ); SyncSmtpCli1.HdrSubject := …. SyncSmtpCli1.MailMessage.Text := …. SyncSmtpCli1.ConnectSync; SyncSmtpCli1.EhloSync; SyncSmtpCli1.AuthSync; SyncSmtpCli1.MailSync; SyncSmtpCli1.QuitSync; |
AW: TSendMail
Hier mal eine Beispielklasse, wie ich auf allen Betriebssystemen Mails versende,
dies nutzt aber nicht deinen E-Mail-Client, sondern verschickt Mails im Hintergrund über einen SMTP-Server:
Delphi-Quellcode:
P.S.: Es müssen natürlich die SMTP-Email-Infos eingetragen werden.
unit EmailUtils;
interface uses IdSMTP, IdMessage, IdEMailAddress, IdAttachmentFile, IdSSL, IdSSLOpenSSL, IdExplicitTLSClientServerBase, IdIOHandlerStack, IdSMTPBase, IdTCPClient, IdIOHandler, IdIOHandlerSocket, System.Classes, System.UITypes; type TEMailUtils = class(TObject) public class function sendEmail(receiver,subject,body,attachment:String):boolean; end; implementation {$IFDEF IOS} uses System.SysUtils,IdSSLOpenSSLHeaders_Static; {$ELSE} uses System.SysUtils; {$ENDIF} class function TEMailUtils.sendEmail(receiver,subject,body,attachment:String):boolean; var IDSMTP1:TIDSMTP; IdIOHandler:TIdIOHandler; IdMessage: TIdMessage; errorInfo:String; begin Result:=false; try IDSMTP1:=TIDSMTP.Create(); IdIOHandler:=TIdSSLIOHandlerSocketOpenSSL.Create(); try errorInfo:='fill IDSMTP1'; IDSMTP1.Host := '[smtp-server]'; IDSMTP1.Port := [Port]; IDSMTP1.IOHandler := IdIOHandler; IDSMTP1.AuthType := satDefault; IDSMTP1.UseTLS := utUseRequireTLS; IDSMTP1.Username := '[username]'; IDSMTP1.Password := '[password]'; IdMessage := TIdMessage.Create(nil); try errorInfo:='fill IdMessage'; IdMessage.From.Name:='[From]'; IdMessage.From.Address:='[From-Emailaddress]'; IdMessage.Subject:=subject; IdMessage.Body.Add(body); IdMessage.Recipients.EMailAddresses:=receiver; if (attachment<>'') then TIdAttachmentFile.Create(IdMessage.MessageParts,attachment); errorInfo:='check IDSMTP1'; if not IDSMTP1.Connected then begin errorInfo:='conect IDSMTP1'; IDSMTP1.Connect; end; errorInfo:='send IdMessage'; IDSMTP1.Send(IdMessage); Result:=true; finally IdMessage.Free; end; finally IDSMTP1.Free; IdIOHandler.Free; end; except on E: Exception do //do something end; end; end. P.P.S. : Ich habe meinen Logging-Code entfernt, damit es kompilierbar ist, kann aber nicht ausschließen, dabei etwas übersehen zu haben. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:06 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