rt,thanks.

解决方案 »

  1.   

    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;
      iCount : Integer;
      FileName : string;
    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 iCount := 0 to MaxInt do begin 
        if Mail.Values['attachment' + IntToStr(iCount)] = '' then Break;
        AttachCount := AttachCount + 1;
      end;  if AttachCount > 0 then begin
        GetMem(Attachments,SizeOf(TMapiFileDesc) * AttachCount);
        for iCount := 0 to (AttachCount - 1) do begin
          FileName := Mail.Values['attachment' + IntToStr(iCount)];
          Attachments[iCount].ulReserved := 0;
          Attachments[iCount].flFlags := 0;
          Attachments[iCount].nPosition := ULONG($FFFFFFFF);
          Attachments[iCount].lpszPathName := StrNew(PChar(FileName));
          Attachments[iCount].lpszFileName := StrNew(PChar(ExtractFileName(FileName)));
          Attachments[iCount].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']));  Result := MapiSendMail(0, Handle, MapiMessage,MAPI_DIALOG*Ord(Handle <> 0) OR MAPI_LOGON_UI OR MAPI_NEW_SESSION, 0);  for iCount := 0 to (AttachCount - 1) do begin
        strDispose(Attachments[iCount].lpszPathName);
        strDispose(Attachments[iCount].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);
    end;procedure TForm1.Button1Click(Sender: TObject);
    var
      mail: TStringList;
    begin
      mail := TStringList.Create;
      mail.Values['to'] := '[email protected]';
      mail.Values['subject'] := 'hello';
      mail.Values['body'] := 'hello man';
      mail.Values['attachment0'] := 'c:\boot.ini';
      SendEmail(Application.Handle, mail);
      mail.Free;
    end;
      

  2.   

    procedure SendOutlookMail;
    const
      olMailItem = 0;
    var
      Outlook: OleVariant;
      vMailItem: variant;
    begin
      {try
    //    Outlook := GetActiveOleObject('Outlook.Application');
      except
        Outlook := CreateOleObject('Outlook.Application');
      end;
      }
      Outlook := CreateOleObject('Outlook.Application');
      vMailItem := Outlook.CreateItem(olMailItem);
      vMailItem.Recipients.Add('[email protected]');
      vMailItem.Subject := 'test email';
      vMailItem.Body := 'This is a test';
      //vMailItem.Attachments.Add('C:\temp\sample.txt');
      vMailItem.Send;  VarClear(Outlook);
    end;