AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi Indy IdAttachment, zu viele Paramenter ??

Indy IdAttachment, zu viele Paramenter ??

Ein Thema von hitmiccs · begonnen am 21. Jul 2005 · letzter Beitrag vom 15. Feb 2006
Antwort Antwort
Benutzerbild von hitmiccs
hitmiccs

Registriert seit: 15. Mär 2005
Ort: Bous
15 Beiträge
 
#1

Indy IdAttachment, zu viele Paramenter ??

  Alt 21. Jul 2005, 09:14
Hallo.

Ich versuche gerade, mit IdAttachment (Indy 10) eine EMail mit Anhang zu verschicken, wenn ich aber TIdAttachment.Create(msg.MessageParts,btDatei); benutze kommt die Fehlermeldung: Zu viele Parameter...

Ich hab mit der Forensuche ein paar Beiträge mit diesem Thema gefunden und bei den anderen soll das so funktionieren, hier der Rest von der Mail-versende-Prozedur:
Delphi-Quellcode:
procedure Tbtagesbericht.send_per_mailClick(Sender: TObject);
var msg: TIdMessage;
   smtp: TIdSMTP;
   atta: TIdAttachment;
   pfad: string;
begin
  msg:=TidMessage.Create;
  smtp:=TidSMTP.Create(nil);
   msg.Clear;
   msg.Body.Text:='Archivdatei vom '+DatetoStr(Now);
   msg.From.Address := 'lalilu@gmx.de';
   msg.Recipients.EMailAddresses := 'lalilu@gmx.de';
   msg.Subject := 'Zeugs halt';
// pfad:=ExtractFilePath('Maengeldatenbank.exe');
// pfad:= pfad+btDateiname;

   TIdAttachment.Create(msg.MessageParts,btDatei);

   smtp.Host := 'mail.gmx.net';
   smtp.Username := 'lalilu@gmx.de';
   smtp.Password := 'gehtkeinenwasan';
   smtp.Port := 25;
   // Am Server Anmelden und abschicken
   SMTP.Connect;
   SMTP.Send(Msg);
   sleep(3000);
   showmessage('Datei wurde versendet!');
end;
Ohne die TIdAttachment-Geschichte funktioniert alles, die Mail kommt auch an, nur fehlt halt die Datei, und das wäre das wichtigste

Danke für evtl. Lösungsvorschläge!

:EDIT:

Ich hab jetzt auch mal folgenden Code ausprobiert:
Delphi-Quellcode:
Procedure SendMail(Subject,Mailtext,
                   FromName,FromAdress,
                   ToName,ToAdress,
                   AttachedFileName,
                   DisplayFileName:string;
                   ShowDialog:boolean);
var
  MapiMessage : TMapiMessage;
  MError : Cardinal;
  Empfaenger : Array[0..1] of TMapiRecipDesc;
  Absender : TMapiRecipDesc;
  Datei : Array[0..1] of TMapiFileDesc;
begin
  with MapiMessage do begin
    ulReserved := 0;

    // Betreff
    lpszSubject := PChar(Subject);

    // Body
    lpszNoteText := PChar(Mailtext);

    lpszMessageType := nil;
    lpszDateReceived := nil;
    lpszConversationID := nil;
    flFlags := 0;

    // Absender festlegen
    Absender.ulReserved:=0;
    Absender.ulRecipClass:=MAPI_ORIG;
    Absender.lpszName:= PChar(FromName);
    Absender.lpszAddress:= PChar(FromAdress);
    Absender.ulEIDSize:=0;
    Absender.lpEntryID:=nil;
    lpOriginator := @Absender;

    // Empfänger festlegen (Hier: nur 1 Empfänger)
    nRecipCount := 1;

    Empfaenger[0].ulReserved:=0;
    Empfaenger[0].ulRecipClass:=MAPI_TO;
    Empfaenger[0].lpszName:= PChar(ToName);
    Empfaenger[0].lpszAddress:= PChar(ToAdress);
    Empfaenger[0].ulEIDSize:=0;
    Empfaenger[0].lpEntryID:=nil;
    lpRecips := @Empfaenger;

    // Dateien anhängen (Hier: nur 1 Datei)
    nFileCount := 1;

    // Name der Datei auf der Festplatte
    Datei[0].lpszPathName:= PChar(AttachedFilename);

    // Name, der in der Email angezeigt wird
    Datei[0].lpszFileName:= PChar(DisplayFilename);
    Datei[0].ulReserved:=0;
    Datei[0].flFlags:=0;
    Datei[0].nPosition:=Cardinal(-1);
    Datei[0].lpFileType:=nil;
    lpFiles := @Datei;

  end;

  // Senden
  if ShowDialog then
    MError := MapiSendMail(0, Application.Handle,
      MapiMessage, MAPI_DIALOG or MAPI_LOGON_UI, 0)
  else
    // Wenn kein Dialogfeld angezeigt werden soll:
    MError := MapiSendMail(0, Application.Handle, MapiMessage, 0, 0);

  Case MError of
    MAPI_E_AMBIGUOUS_RECIPIENT:
      MessageDlg('Empfänger nicht eindeutig. (Nur möglich, wenn Emailadresse nicht angegeben.)',mterror,[mbok],0);
   
    MAPI_E_ATTACHMENT_NOT_FOUND:
      MessageDlg('Datei zum Anhängen nicht gefunden',mterror,[mbok],0);
   
    MAPI_E_ATTACHMENT_OPEN_FAILURE:
      MessageDlg('Datei zum Anhängen konnte nicht geöffnet werden.',mterror,[mbok],0);

    MAPI_E_BAD_RECIPTYPE:
      MessageDlg('Empfängertyp nicht MAPI_TO, MAPI_CC oder MAPI_BCC.',mterror,[mbok],0);

    MAPI_E_FAILURE:
      MessageDlg('Unbekannter Fehler.',mterror,[mbok],0);

    MAPI_E_INSUFFICIENT_MEMORY:
      MessageDlg('Nicht genug Speicher.',mterror,[mbok],0);

    MAPI_E_LOGIN_FAILURE:
      MessageDlg('Benutzerlogin (z.B. bei Outlook) fehlgeschlagen.',mterror,[mbok],0);

    MAPI_E_TEXT_TOO_LARGE:
      MessageDlg('Text zu groß.',mterror,[mbok],0);

    MAPI_E_TOO_MANY_FILES:
      MessageDlg('Zu viele Dateien zum Anhängen.',mterror,[mbok],0);

    MAPI_E_TOO_MANY_RECIPIENTS:
      MessageDlg('Zu viele Empfänger angegeben.',mterror,[mbok],0);

    MAPI_E_UNKNOWN_RECIPIENT: MessageDlg('Empfänger nicht in Adressbuch gefunden. '+
     '(Nur möglich, wenn Emailadresse nicht angegeben.)',mterror,[mbok],0);

    MAPI_E_USER_ABORT:
      MessageDlg('Benutzer hat Senden abgebrochen oder MAPI nicht installiert.',mterror,[mbok],0);

    SUCCESS_SUCCESS:
      MessageDlg('Erfolgreich !!! (Aber Absenden nicht garantiert.)',mtinformation,[mbok],0);

  End;
end;
Jedoch kommt beim klick auf "Senden" ein fenster mit der Meldung: "Benutzer hat senden abgebrochen oder MAPI nicht installiert." Ich hab keine Ahnung was ich noch machen soll, will doch nur ne kleine Datei per Email verschicken
If anything can go wrong, it will !

Murphy's Law
  Mit Zitat antworten Zitat
TStringlist

Registriert seit: 1. Dez 2003
360 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: Indy IdAttachment, zu viele Paramenter ??

  Alt 21. Jul 2005, 17:41
Hallo,

ist schon eine kleine Weile her, dass ich da mal mit Indy9 herumgekurvt bin, aber zur Not könnte man ja in der fraglichen Zeile auch den zweiten Parameter erstmal weglassen und den Filenamen (des zu attachenden Files) dann nachtragen:

Delphi-Quellcode:
with TIdAttachment.Create(msg.MessageParts) do begin
  Filename := APfad;
end;
Dann gibt's nämlich keine Compiler-Errors mehr, sondern nur noch mehr Warnungen ala:

[Warnung] Unit1.pas(50): W1020 Instanz von 'TIdAttachment' mit der abstrakten Methode 'TIdAttachment.OpenLoadStream' wird angelegt

Wenn du das Ganze dann startest, gibt's als nächstes eine Exception und zwar eben auch wieder von so einer ähnlich lautenden Klasse: EAbstractError ...was ja mehr oder weniger wieder gut zu den Warnungen davor passt. Wahrscheinlich werden also zum Stream-mäßigen Verpacken eines solchen Attachments Methoden benötigt, die diese Klasse noch nicht besitzt. Das ist also alles so ähnlich wie das Verhältnis zwischen TStrings und seinem Nachkommen: TStringlist. Ergo (wenn ich jetzt nichts gänzlichst auf dem Holzweg bin) müsste es dementsprechend also bei Indy10 event. ein Nachfolge-Objekt von TIdAttachment geben, welches diese davor noch fehlenden Methoden dann besitzt und für den normalen Anwendungszweck damit auch das geeignetere wäre. Leider habe ich aber momentan noch keine Indy10-Hilfe gedownloaded, so dass du event. also mal selbst +/- etwas in diese Richtung forschen müsstest.


PS. Ok, ich habe auch das noch schnell gemacht, weil's mich selbst mal wieder interessiert hat ...und es war wie ich es vermutet hatte. Die Klasse die du dafür jetzt zu benutzten hast lautet nun: TIdAttachmentFile (...und zufälligerweise klappt es damit dann auch).
MfG (& Thx ggf.)
  Mit Zitat antworten Zitat
Benutzerbild von hitmiccs
hitmiccs

Registriert seit: 15. Mär 2005
Ort: Bous
15 Beiträge
 
#3

Re: Indy IdAttachment, zu viele Paramenter ??

  Alt 3. Aug 2005, 07:45
Danke, TStringlist, das hat schon mal geholfen, nur leider bekomme ich jetzt, egal was ich eingebe, nen anderen Fehler...

Das Programm compiliert ohne Fehlermeldungen, wenn ich jetzt aber meinen Button klicke kommt der Fehler "Datei nicht gefunden. Das System konnte den angegebenen Pfad/Datei nicht finden."

Egal wo ich die Datei hintue, ins Programmverzeichnis, in nen extra Ordner, egal ob ich mit ExtractFilePath den Pfad hole oder ihn manuell eingebe, nix funktioniert... waaaaaaaahhhh, werd noch wahsinnig. Kannst du mir evtl. dabei auch noch helfen?
If anything can go wrong, it will !

Murphy's Law
  Mit Zitat antworten Zitat
TStringlist

Registriert seit: 1. Dez 2003
360 Beiträge
 
Turbo Delphi für Win32
 
#4

Re: Indy IdAttachment, zu viele Paramenter ??

  Alt 3. Aug 2005, 13:06
Also, bei mir funktionierte es eigentlich. Deine Schwierigkeiten kann mir jetzt auch nicht anders erklären, als dass du da vielleicht doch irgendwie einen winzigen Schreibfehler eingebaut hast. Event. öffnest du ja mal den Ordner in dem die jeweilige Datei liegt und kopierst dann aus der Adressleiste des Explorers dessen Adresse. Anschließend 'insert'est du sie einfach in deinen Quellcode, noch einen Backslash dazu + dem Dateiname + der Datei-Extention und dann sollte es eigentlich klappen.

Ansonsten wüsste ich da jetzt im Moment auch nicht weiter.
MfG (& Thx ggf.)
  Mit Zitat antworten Zitat
FunkyGT

Registriert seit: 23. Jan 2004
16 Beiträge
 
Delphi 2005 Professional
 
#5

Re: Indy IdAttachment, zu viele Paramenter ??

  Alt 7. Sep 2005, 14:37
hallo,

versuch es doch mal mit

TIdAttachmentFile.Create(MessageParts,'c:\test.log'); ich hatte das gleiche problem, so funzt es bei mir

Gruß Funky
  Mit Zitat antworten Zitat
renekr

Registriert seit: 27. Feb 2005
Ort: Karlsbad
534 Beiträge
 
Delphi 2007 Enterprise
 
#6

Re: Indy IdAttachment, zu viele Paramenter ??

  Alt 15. Feb 2006, 20:54
Hallo,
Ich habe mal eine Generelle Frage?

Wo oderwie binde ich das TIdAttachment ein?


Habe Indy 10 installeirt aber finde es nicht in den Componenten.

Edit:
Also ich habe nun die IdAttachmentFile in die uses rein und geht halbwegs.


danke
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:01 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz