Visualizzazione dei risultati da 1 a 3 su 3

Discussione: [delphi] invio mail

  1. #1

    [delphi] invio mail

    Dovrei inviare una mail utilizzando il client di posta elettronica
    avreste un esempio di codice?

    grazie
    Nique

  2. #2
    Subito!

    codice:
    uses 
      Mapi; 
    
    function SendEMail(Handle: THandle; Mail: TStrings): Cardinal; 
    type 
      TAttachAccessArray = array [0..0] of TMapiFileDesc; 
      PAttachAccessArray = ^TAttachAccessArray; 
    var 
      MapiMessage: TMapiMessage; 
      Receip: TMapiRecipDesc; 
      Attachments: PAttachAccessArray; 
      AttachCount: Integer; 
      i1: integer; 
      FileName: string; 
      dwRet: Cardinal; 
      MAPI_Session: Cardinal; 
      WndList: Pointer; 
    begin 
      dwRet := MapiLogon(Handle, 
        PChar(''), 
        PChar(''), 
        MAPI_LOGON_UI or MAPI_NEW_SESSION, 
        0, @MAPI_Session); 
    
      if (dwRet <> SUCCESS_SUCCESS) then 
      begin 
        MessageBox(Handle, 
          PChar('Error while trying to send email'), 
          PChar('Error'), 
          MB_ICONERROR or MB_OK); 
      end 
      else 
      begin 
        FillChar(MapiMessage, SizeOf(MapiMessage), #0); 
        Attachments := nil; 
        FillChar(Receip, SizeOf(Receip), #0); 
    
        if Mail.Values['to'] <> '' then 
        begin 
          Receip.ulReserved := 0; 
          Receip.ulRecipClass := MAPI_TO; 
          Receip.lpszName := StrNew(PChar(Mail.Values['to'])); 
          Receip.lpszAddress := StrNew(PChar('SMTP:' + Mail.Values['to'])); 
          Receip.ulEIDSize := 0; 
          MapiMessage.nRecipCount := 1; 
          MapiMessage.lpRecips := @Receip; 
        end; 
    
        AttachCount := 0; 
    
        for i1 := 0 to MaxInt do 
        begin 
          if Mail.Values['attachment' + IntToStr(i1)] = '' then 
            break; 
          Inc(AttachCount); 
        end; 
    
        if AttachCount > 0 then 
        begin 
          GetMem(Attachments, SizeOf(TMapiFileDesc) * AttachCount); 
    
          for i1 := 0 to AttachCount - 1 do 
          begin 
            FileName := Mail.Values['attachment' + IntToStr(i1)]; 
            Attachments[i1].ulReserved := 0; 
            Attachments[i1].flFlags := 0; 
            Attachments[i1].nPosition := ULONG($FFFFFFFF); 
            Attachments[i1].lpszPathName := StrNew(PChar(FileName)); 
            Attachments[i1].lpszFileName := 
              StrNew(PChar(ExtractFileName(FileName))); 
            Attachments[i1].lpFileType := nil; 
          end; 
          MapiMessage.nFileCount := AttachCount; 
          MapiMessage.lpFiles := @Attachments^; 
        end; 
    
        if Mail.Values['subject'] <> '' then 
          MapiMessage.lpszSubject := StrNew(PChar(Mail.Values['subject'])); 
        if Mail.Values['body'] <> '' then 
          MapiMessage.lpszNoteText := StrNew(PChar(Mail.Values['body'])); 
    
        WndList := DisableTaskWindows(0); 
        try 
        Result := MapiSendMail(MAPI_Session, Handle, 
          MapiMessage, MAPI_DIALOG, 0); 
        finally 
          EnableTaskWindows( WndList ); 
        end; 
    
        for i1 := 0 to AttachCount - 1 do 
        begin 
          StrDispose(Attachments[i1].lpszPathName); 
          StrDispose(Attachments[i1].lpszFileName); 
        end; 
    
        if Assigned(MapiMessage.lpszSubject) then 
          StrDispose(MapiMessage.lpszSubject); 
        if Assigned(MapiMessage.lpszNoteText) then 
          StrDispose(MapiMessage.lpszNoteText); 
        if Assigned(Receip.lpszAddress) then 
          StrDispose(Receip.lpszAddress); 
        if Assigned(Receip.lpszName) then 
          StrDispose(Receip.lpszName); 
        MapiLogOff(MAPI_Session, Handle, 0, 0); 
      end; 
    end;
    e la richiami con

    codice:
    procedure TForm1.Button1Click(Sender: TObject); 
    var 
      mail: TStringList; 
    begin 
      mail := TStringList.Create; 
      try 
        mail.values['to'] := 'Receiver-Email@test.xyz'; 
        mail.values['subject'] := 'Hello'; 
        mail.values['body'] := 'blah'; 
        mail.values['body'] := 'blah'; 
        mail.values['attachment0'] := 'C:\Test.txt'; 
        // mail.values['attachment1']:='C:\Test2.txt'; 
        sendEMail(Application.Handle, mail); 
      finally 
        mail.Free; 
      end; 
    end;
    Questo ti apre il client di posta elettronica predefinito (outlook, outlook express) con il messaggio già pronto per l'invio.

    Si può anche personalizzare che l'invio avviene in automatico, ma se non ricordo male ti appare un messaggio che devi confermare ecc.
    Prova così, se non ti va bene fammi sapere.

    Ci sono anche altri modi, come implementare il protocollo "a mano" o usare dei componenti, secondo me questo è il modo più veloce, poi fai tu.

    Ciao

  3. #3
    se vuoi ti mando un esempio su email.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.