如题?

解决方案 »

  1.   

    两个问题:
    1.压缩,可以使用第三方的,也可以直接调用winrar命令行参数
    2.发送邮件,indy有现成的组件,可以发送附件
      

  2.   

    procedure TForm1.Button1Click(Sender: TObject);
    begin
    smtp := TIdSMTP.Create(nil);
    smtp.AuthenticationType := atLogin;
    smtp.Host := 'smtp.163.com';
    smtp.Username := '###'; //用户名
    smtp.Password := '******'; //密码
    msgsend := TIdMessage.Create(nil);
    msgsend.Recipients.EMailAddresses := '[email protected]'; //收
    件人地址(多于一个的话用逗号隔开)
    msgsend.From.Text := '###@163.com'; //自己的邮箱地址
    msgsend.Subject := 'test'; //邮件标题
    msgsend.Body.Text := RichEdit1.Text; //邮件内容
    TIdAttachment.Create(msgsend.MessageParts, 'C:\temp\1.jpg'); 
    //添加附件
    try
    smtp.Connect();
    try 
    smtp.Authenticate;
    smtp.Send(msgsend);
    ShowMessage('发送成功');
    except
    ShowMessage('邮件发送失败');
    end;
    except
    ShowMessage('无法连接邮件服务器!');
    end;
    smtp.Disconnect;end;
     编译通过,运行,就报错,哪位知道是怎么回事?
      

  3.   

    我用你的代码。在Delphi6下测试,一次就通过,而且发送成功,而且正常收到。
    你的办法正好用。
      

  4.   

    我正打算用你提供的代码写一个简单的邮件发送模块。
    另外,我只发了一个38K的Png图片。
      

  5.   

    贴点代码:
    发送邮件的线程,不合适的自己改改。
    TState = procedure (State: string) of object;  TSendMailThread = class(TThread)
      private
        FOnState: TState;
      public
        MailBox, Password: string;
        AddressList: string;
        Title: string;
        Context: TStringList;
        Attachment: TStringList;
        constructor Create(CreateSuspended: Boolean); 
        destructor Destroy(); override;
        procedure Execute(); override;
        property OnState: TState read FOnState write FOnState;
      end;{ TSendMailThread }constructor TSendMailThread.Create(CreateSuspended: Boolean);
    begin
      inherited Create(CreateSuspended);
      FreeOnTerminate := true;
      Context := TStringList.Create;
      Attachment := TStringList.Create;
    end;destructor TSendMailThread.Destroy;
    begin
      FreeAndNil(Context);
      FreeAndNil(Attachment);
      inherited;
    end;procedure TSendMailThread.Execute;
    var
      i: integer;
      smtp: TIdSMTP;
      msgsend: TIdMessage;
    begin
      inherited;    
        smtp := TIdSMTP.Create(nil);
        smtp.AuthenticationType := atLogin;
        smtp.Host := 'smtp.' + Copy(MailBox, Pos('@', MailBox) + 1, Length(MailBox));
        smtp.UserId := Copy(MailBox, 1, Pos('@', MailBox) - 1); //用户名
        smtp.Password := Password; //密码
        msgsend := TIdMessage.Create(nil);
        msgsend.Recipients.EMailAddresses := AddressList; //收件人地址(多于一个的话用逗号隔开)
        msgsend.From.Text := MailBox; //自己的邮箱地址
        msgsend.Subject := Title; //邮件标题
        msgsend.Body.AddStrings(Context); //邮件内容
        if Attachment.Count > 0 then
        begin
          for i := 0 to Attachment.Count - 1 do
            TIdAttachment.Create(msgsend.MessageParts, Attachment.Strings[i]);
        end;
        //添加附件
        try
          OnState('正在连接邮箱...');
          smtp.Connect();
          OnState('正在验证用户...');
          smtp.Authenticate;
          OnState('正在发送邮件...');
          smtp.Send(msgsend);
          OnState('邮件发送成功...');
        except
          OnState('邮件发送失败...');
        end;    smtp.Disconnect;
        FreeAndNil(smtp);
        FreeAndNil(msgsend);
    end;//调用
    procedure TFrmSendEMail.BtnSendClick(Sender: TObject);
    var
      SendMail: TSendMailThread;
    begin
      SendMail := TSendMailThread.Create(true);
      SendMail.MailBox := CoBMailBox.Text; //用户名
      SendMail.Password := StrListPassword.Strings[CoBMailBox.ItemIndex]; //密码
      SendMail.AddressList := EdtAccept.Text; //收件人地址(多于一个的话用逗号隔开);
      SendMail.Title := EdtTitle.Text; //邮件标题
      SendMail.Context.AddStrings(MemContext.Lines);//邮件内容
      if EdtAttachment.Text<> '' then
        SendMail.Attachment.Add(EdtAttachment.Text);
      SendMail.OnState := SetState;
      SendMail.Resume;
    end;