在数据库中存有多个人的e-mail地址,我想实现以下功能:
我可以在程序中设置用于发送邮件的邮箱和邮箱密码,发送邮件的头文字和邮件内容,然后可以选择可以给这些用户群发邮件,邮件中自动将用户名以逗号分隔并且在所有的用户名后隔一个空格将头文字添加到后面然后换行自动添入邮件内容。
多谢各位!

解决方案 »

  1.   

    idsmtp1.Username:=;
        idsmtp1.Password:='';
        idsmtp1.Port:=25;
        idsmtp1.Host:=;
        try
          try
            IdSMTP1.Connect(500);
          except
            showmessage('发件服务器忙请稍后再试!');
          end;      IdMessage1.Body.Text:='asd';
          IdMessage1.Subject:=trim('23日统计');
          idmessage1.From.Address:=;
          idmessage1.From.Name:='xx;
          idmessage1.Recipients.EMailAddresses:='[email protected]';
          //IdMessage1.Recipients.      
          TIdAttachment.Create(idmessage1.MessageParts,'c:\display.txt');
          idsmtp1.Send(IdMessage1);
          showmessage('成功');
          //Ado_Address.Next;
        finally
          idsmtp1.DisconnectSocket;
          Idsmtp1.Disconnect;
        end;
    end;
      

  2.   

    http://delphifans.com/SoftView/SoftView_528.html自己看看啊
      

  3.   

    //如果上上面的连接不行,给我消息我给你发
    //下面是发送单元的代码
    unit SendMail;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, ComCtrls, DB, ADODB, Buttons,NMSMTP, Menus;type
      TfrmMailsend = class(TForm)
        GroupBox3: TGroupBox;
        chkDb: TRadioButton;
        GroupBox1: TGroupBox;
        mailList: TMemo;
        ADODataSet1: TADODataSet;
        chkText: TRadioButton;
        OpenDialog1: TOpenDialog;
        BitBtn1: TBitBtn;
        SaveDialog1: TSaveDialog;
        PopupMenu1: TPopupMenu;
        N1: TMenuItem;
        BitBtn2: TBitBtn;
        ADOQuery1: TADOQuery;
        BitBtn3: TBitBtn;
        procedure FormClose(Sender: TObject; var Action: TCloseAction);
        procedure FormCreate(Sender: TObject);
        procedure chkDbClick(Sender: TObject);
        procedure chkTextClick(Sender: TObject);
        procedure BitBtn1Click(Sender: TObject);
        procedure N1Click(Sender: TObject);
        procedure BitBtn2Click(Sender: TObject);
        procedure BitBtn3Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
        procedure getMailList();
        procedure queryMailList();
        procedure getStartDate();
        procedure setFileAdd();
      end;var
      frmMailsend: TfrmMailsend;
      mailBox:TNMSMTP;
      startDates,endDates,isQuery:integer;
      pro:TProgressBar;
      procedure InitMail();
      procedure FinalMail();
      procedure setMailCont();implementationuses mail,IniFiles;{$R *.dfm}procedure TfrmMailsend.FormClose(Sender: TObject;
      var Action: TCloseAction);
    begin
         free;
         clearSta;
         frmMain.StatusBar1.Panels[1].Text:='';
         if pro.Position>0 then
            pro.Position:=0;
    end;procedure TfrmMailsend.setFileAdd();
    var
       ff:TextFile;
       fn:string;
       str:string;
    begin
       fn:=ExtractFilePath(Paramstr(0))+'fileadd.txt';
       if not FileExists(fn) then exit;
       mailBox.PostMessage.Attachments.Clear;
       AssignFile(ff,fn);
       Reset(ff);
       try
           while Not Eof(ff) do
           begin
                Readln(ff,str);
                if Trim(str)<>'' then
                    mailBox.PostMessage.Attachments.Add(str);
           end;
       finally
           Closefile(ff);
       end;
    end;procedure TfrmMailsend.getStartDate();
    var
         ini:TiniFile;
         fn:string;
    begin
         fn:=ExtractFilePath(Paramstr(0))+'mail.ini';
         ini:=TiniFile.Create(fn);
         try
            startDates:=trunc(ini.ReadDateTime('DATEQUERY','STARTDATE',now));
            endDates:=trunc(ini.ReadDateTime('DATEQUERY','ENDDATE',now));
            isQuery:=ini.ReadInteger('DATEQUERY','ISCHECK',0);
         finally
            ini.Free;
         end;
    end;procedure TfrmMailsend.queryMailList();
    var
       sql:string;
       mail:string;
       num:string;
       ini:TiniFile;
       fn:string;
    begin
         fn:=ExtractFilePath(Paramstr(0))+'mail.ini';
         ini:=TiniFile.Create(fn);
         try
            startDates:=trunc(ini.ReadDateTime('DATEQUERY','STARTDATE',now));
            isQuery:=ini.ReadInteger('DATEQUERY','ISCHECK',0);
         finally
            ini.Free;
         end;
       if isQuery=1 then
         sql:='select * from email where inputdate>'+inttostr(startDates)
       else
         sql:='select * from email';
       ADOQuery1.SQL.Clear;
       ADOQuery1.Close;
       ADOQuery1.ConnectionString:='Provider=Microsoft.Jet.OLEDB.4.0; Data Source='+
              ExtractFilePath(Paramstr(0))+'db\GroupMail.mdb;Jet OLEDB:Database Password=820745';
       ADOQuery1.SQL.Add(sql);
       ADOQuery1.Prepared;
       ADOQuery1.Open;
       frmMain.StatusBar1.Panels[0].Text:=inttostr(ADOQuery1.RecordCount);
       ADOQuery1.Close;
    end;procedure TfrmMailsend.getMailList();
    var
        sSql:string;
        sMail:string;
        numRecord:integer;
    begin
        clearSta;
        getStartDate;
        mailList.Lines.Clear;
        if isQuery=1 then
              sSql:='select * from email where inputdate>='+inttostr(startDates)+' and inputdate<='+IntToStr(endDates)
        else
              sSql:='select * from email';
        ADODataSet1.Close;
        ADODataSet1.ConnectionString:='Provider=Microsoft.Jet.OLEDB.4.0;Data Source='+
            ExtractFilePath(paramstr(0))+'db\GroupMail.mdb;Jet OLEDB:Database Password=820745';
        ADODataSet1.CommandType:=cmdText;
        ADODataSet1.CommandText:=sSql;
        ADODataSet1.Open;
        numRecord:=ADODataSet1.RecordCount;
        ADODataSet1.First;
        while (not ADODataSet1.Eof) do
        begin
            sMail:=ADODataSet1.FieldByName('mails').AsString;
            mailList.Lines.Add(sMail);
            ADODataSet1.Next;
        end;
        ADODataSet1.Close;
        frmMain.StatusBar1.Panels[0].Text:='已经打开了邮件列表';
        frmMain.StatusBar1.Panels[2].Text:='有邮件地址:'+IntToStr(numRecord)+'条';
        GroupBox1.Caption:='邮件列表:'+IntToStr(numRecord);
    end;procedure TfrmMailsend.FormCreate(Sender: TObject);
    begin
        getMailList;
    end;procedure TfrmMailsend.chkDbClick(Sender: TObject);
    begin
       getMailList;
    end;procedure TfrmMailsend.chkTextClick(Sender: TObject);
    var
      ff:TextFile;
      txtFn:string;
      str:string;
    begin
         mailList.Lines.Clear;
         clearSta;
         OpenDialog1.Filter:='文本文件(*.txt)|*.txt';
         if OpenDialog1.Execute then
         begin
             txtFn:=OpenDialog1.FileName;
             //AssignFile(ff,txtFn);
             //Reset(ff);
           try
             //while not Eof(ff) do
                   //begin
                   //    Readln(ff,str);
                   //    if trim(str)<>'' then
                   //          mailList.Lines.Add(str);
                   //end;
                   mailList.Lines.LoadFromFile(txtFn);
           finally
             //closeFile(ff);
           end;
         end;
         frmMain.StatusBar1.Panels[2].Text:='EMAIL地址有:'+IntToStr(mailList.Lines.Count)+'条';
         GroupBox1.Caption:='群发邮件列表如下:'+IntToStr(mailList.Lines.Count);end;
      

  4.   

    procedure InitMail();
    var
       ini:TiniFile;
       fn:string;
       sHost,sUser,sFromAddress,sFromName,sTitle:string;
       nPort:integer;
    begin
        fn:=ExtractFilePath(Paramstr(0))+'mail.ini';
        ini:=TiniFile.Create(fn);
        sHost:=ini.ReadString('MAILINFO','HOST','');
        sUser:=ini.ReadString('MAILINFO','USER','');
        nPort:=ini.ReadInteger('MAILINFO','PORT',25);
        sFromAddress:=ini.ReadString('MAILINFO','FROMEMAIL','');
        sFromName:=ini.ReadString('MAILINFO','FROMNAME','');
        sTitle:=ini.ReadString('MAILCONT','MAILTITLE','');    mailBox:=TNMSMTP.Create(nil);
        mailBox.Host:=sHost;
        mailBox.Port:=nPort;
        mailBox.UserID:=sUser;
        mailBox.PostMessage.ToAddress.Clear;
        mailBox.PostMessage.ToCarbonCopy.Clear;
        mailBox.PostMessage.ToBlindCarbonCopy.Clear;
        mailBox.PostMessage.Body.Clear;
        mailBox.PostMessage.FromAddress:=sFromAddress;
        mailBox.PostMessage.FromName:=sFromName;
        mailBox.PostMessage.Subject:=sTitle;
        ini.Free;
    end;procedure FinalMail();
    begin
        mailBox.Disconnect;
        mailBox.Free;
        frmMain.StatusBar1.Panels[0].Text:='Disconnected to NMSMTP...';
    end;procedure TfrmMailsend.BitBtn1Click(Sender: TObject);
    var
         j:integer;
         sMail:string;
         nCoutMail:integer;
    begin
         pro:=TProgressBar.Create(frmMain.StatusBar1);
         pro.Parent:=frmMain.StatusBar1;
         pro.Left:=1;
         pro.Top:=3;
         pro.Height:=frmMain.StatusBar1.Height-3;
         pro.Width:=frmMain.StatusBar1.Panels[0].Width;     pro.Position:=1;
         pro.StepBy(1);
         pro.Max:=mailList.Lines.Count-1;     nCoutMail:=0;
         frmMain.StatusBar1.Panels[0].Text:='try connect to NMSMTP...';
         InitMail;
         setFileAdd;
         try
         mailBox.Connect;
         if mailBox.Connected then
         begin
              frmMain.StatusBar1.Panels[1].Text:='连接NMSMTP成功,正在发邮件...';
            setMailCont;
              mailBox.PostMessage.ToAddress.Clear;
              for j:=0 to mailList.Lines.Count-1 do
              begin
                  sMail:=mailList.Lines[j];
                  //mailBox.PostMessage.ToAddress.Clear;
                  if mailBox.PostMessage.ToAddress.Count<1 then
                        mailBox.PostMessage.ToAddress.Add(sMail)
                  else
                        mailBox.PostMessage.ToCarbonCopy.Add(sMail);
                        pro.Position:=j;
                  //mailBox.SendMail;
                  //Inc(nCoutMail);
                  //frmMain.StatusBar1.Panels[1].Text:='已发邮件: '+inttostr(nCoutMail)+'封';
              end;
              mailBox.SendMail;
              pro.Position:=0;
         end;
         //pro.Position:=mailList.Lines.Count-1;
         frmMain.StatusBar1.Panels[1].Text:='发送邮件成功,共发了'+inttostr(mailList.Lines.Count)+'封邮件';
         FinalMail;
         except
             on E:exception do
                frmMain.StatusBar1.Panels[0].Text:=E.Message;
         end;
    end;procedure setMailCont();
    var
        fs:TextFile;
        sCont,sFn:string;
    begin
        sFn:=ExtractFilePath(Paramstr(0))+'mailbody.txt';
        AssignFile(fs,sFn);
        Reset(fs);
        while (not Eof(fs)) do
        begin
            Readln(fs,sCont);
            mailBox.PostMessage.Body.Add(sCont);
        end;
        CloseFile(fs);
    end;procedure TfrmMailsend.N1Click(Sender: TObject);
    begin
        SaveDialog1.Filter:='文本文件(*.txt)|*.txt';
        if SaveDialog1.Execute then
            mailList.Lines.SaveToFile(SaveDialog1.FileName+'.txt');
    end;procedure TfrmMailsend.BitBtn2Click(Sender: TObject);
    begin
        mailList.Lines.Clear;
    end;procedure TfrmMailsend.BitBtn3Click(Sender: TObject);
    begin
         queryMailList;
    end;end.