Avatar billede erve Nybegynder
23. november 2001 - 10:07 Der er 9 kommentarer og
1 løsning

Placere fil i mail-systems udbakke?

Jeg vil gerne fra et program kunne placere en fil i brugerens udbakke, således at den bliver sendt næste gang han er inde for at sende/modtage.
Mailsystemet er i princippet ukendt, og brugeren skal ikke promptes for hostname, userid,password elle.lign.
Nogle forslag til teknologi, eller andre gode ideer?
Er der en bedre gruppe at post\'e dette spørgmål i?
Mvh Erik
Avatar billede morten_s Nybegynder
23. november 2001 - 10:08 #1
kigger lige med
Avatar billede borrisholt Novice
23. november 2001 - 10:11 #2
Det er ikke så svært når bare man ved hvordan :-)

Prøv det her :

uses
  MAPI;

function SendMailMAPI(const Subject, Body, FileName, SenderName, SenderEMail, RecepientName, RecepientEMail: String) : Integer;
var
  message: TMapiMessage;
  lpSender,
  lpRecepient: TMapiRecipDesc;
  FileAttach: TMapiFileDesc;
  SM: TFNMapiSendMail;
  MAPIModule: HModule;
begin
  FillChar(message, SizeOf(message), 0);

  with message do
  begin
    if (Subject<>\'\') then
      lpszSubject := PChar(Subject);

    if (Body<>\'\') then
      lpszNoteText := PChar(Body);

    if (SenderEMail<>\'\') then
    begin
      lpSender.ulRecipClass := MAPI_ORIG;

      if (SenderName=\'\') then
        lpSender.lpszName := PChar(SenderEMail)
      else
        lpSender.lpszName := PChar(SenderName);

      lpSender.lpszAddress := PChar(SenderEMail);
      lpSender.ulReserved := 0;
      lpSender.ulEIDSize := 0;
      lpSender.lpEntryID := nil;
      lpOriginator := @lpSender;
    end;

    if (RecepientEMail<>\'\') then
    begin
      lpRecepient.ulRecipClass := MAPI_TO;
      if (RecepientName=\'\') then
        lpRecepient.lpszName := PChar(RecepientEMail)
      else
        lpRecepient.lpszName := PChar(RecepientName);

      lpRecepient.lpszAddress := PChar(RecepientEMail);
      lpRecepient.ulReserved := 0;
      lpRecepient.ulEIDSize := 0;
      lpRecepient.lpEntryID := nil;
      nRecipCount := 1;
      lpRecips := @lpRecepient;
    end
    else
      lpRecips := nil;

    if (FileName=\'\') then
    begin
      nFileCount := 0;
      lpFiles := nil;
    end
    else
    begin
      FillChar(FileAttach, SizeOf(FileAttach), 0);
      FileAttach.nPosition := Cardinal($FFFFFFFF);
      FileAttach.lpszPathName := PChar(FileName);
      nFileCount := 1;
      lpFiles := @FileAttach;
    end;
  end;

  MAPIModule := LoadLibrary(PChar(MAPIDLL));

  if MAPIModule=0 then
    Result := -1
  else
  begin
    try
      @SM := GetProcAddress(MAPIModule, \'MAPISendMail\');
      if @SM<>nil then
        Result := SM(0, Application.Handle, message, MAPI_DIALOG or MAPI_LOGON_UI, 0)
      else
        Result := 1
    finally
      FreeLibrary(MAPIModule);
    end;
  end;

  if not Result in [0,1] then
    MessageDlg(\'Error sending mail (\'+IntToStr(Result)+\').\', mtError, [mbOk],  0)
end;

Jens B
Avatar billede morten_s Nybegynder
23. november 2001 - 10:14 #3
Jens>

Og hvis nu det ikke er en fil men en Memobox
med en text som skal sendes, hvad gør man så ?
Avatar billede borrisholt Novice
23. november 2001 - 10:23 #4
  SendMailMAPI(\'Du er en hest\', Memo1.Lines.GetText,\'\',\'Hest Hansen\', \'Hest@hest.hest\', \'Pru Hest\', \'Pru@Hest.hest\');


Jens B
Avatar billede erve Nybegynder
23. november 2001 - 11:01 #5
Hej Jens
Tak for svaret, men det er nu ikke helt det vi vil. MAPI har jo den funktion at den starter mailklienten hvis ikke den er startet, og opretter en meddelelse i den og det virker fint. MEN:

Vi ønsker kun at placere meddelelsen det sted, der svarer til at man i Outlook opretter en meddelelse og trykker send mens man er Offline. Meddelelsen ligger så i \'Udbakke\' indtil brugeren log\'er på og trykker Send/modtag.
Avatar billede morten_s Nybegynder
24. november 2001 - 21:32 #6


Ja jeg så også helst at man slap for at skulle trykke på send knappen, og hvis man kunne
ville det være perfekt, kan det lade sig gøre Jens +


Jeg har selv forsøgt mig med nedenstående kode, det bygger på NMSMTP komponenten
under fastnet i D6

NMSMTP1.Host := \'Din udgående mail server\';
  if not NMSMTP1.Connected then
    NMSMTP1.Connect;
//SendingMail := true;
  if NMSMTP1.Connected then
  begin

    NMSMTP1.ClearParameters;
    NMSMTP1.PostMessage.Body.Clear;
    // text string of senders email address
    NMSMTP1.PostMessage.FromAddress := \'Din mail adr\';
    NMSMTP1.PostMessage.FromName := \'Falco Control\';  // name of sender
    NMSMTP1.PostMessage.Subject := \'Alarm !\';  // subject text
    NMSMTP1.PostMessage.Body.AddStrings(MessageMemo.Lines);
    NMSMTP1.SendMail;
    ShowMessage(\'message sent: \');
    end
    else
      ShowMessage(\'fail to connect\');
    NMSMTP1.Disconnect;

jeg har det kørende i en løkke hvor jeg sender SMS ud når jeg modtager alarmer i en DB
men det går ned ind imellem, jeg ved det også kan laves med indy komponenterne
Avatar billede borrisholt Novice
26. november 2001 - 09:06 #8
erve >> Du skal forske i MAPI. Et eller andet sted mede i MAPI.pas ligger svaret .....

Jens B
Avatar billede borrisholt Novice
29. august 2002 - 10:54 #9
?
Avatar billede erve Nybegynder
05. december 2005 - 11:20 #10
Lukkes. Det kan vist tilsyneladende ikke lade sig gøre.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester