从网上找了一圈用Delphi 调用OutLook发邮件的帖子,但是都是收件人是一个人的。我现在要做一个,可以贴附件,并且收件人在密抄栏,动态读取stringgrid中的邮件地址,然后群发。OUTLook打开,点击发送后,总是失败,貌似把N个人的邮件地址当作一个人的。非常头疼,盼解答!
代码如下:
 for i:=1 to stringgrid2.RowCount-1 do
  begin
  mailinfo:=Trim(mailinfo)+Trim(stringgrid2.Cells[4,i])+',';
  end;
  m:=length(mailinfo);
  mailinfo:=copy(mailinfo,1,m-1);
  sjr:=StringGrid2.RowCount-1;
  mail   :=   TStringList.Create;
      mail.values['to']:=mailinfo;
      mail.values['subject']   :='测试主题'+edtxjnr.Text;
      mail.values['body']         :='测试内容';
      mail.values['attachment0']   :=filename;
      SendEMail(Application.Handle,mail);
      mail.Free;
      showmessage('发送成功!');function   TBBForm.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_Bcc;
          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;