我试着用jmail公司写的邮件自动发动程序的Delphi实例发送一下邮件,Delphi编译器老是报出"容难性故障"的错误,不知道是为什么。现在要为网站做一个邮件自动发送的服务程序,因数据量大,不能用网络语言实现,正急着
    高手们请说明一下jmail在Delphi环境下的使用吧。如果不用jmail,又用什么呢?(最好能有源程序说明一下)。

解决方案 »

  1.   

    你调用下outlook不行么。多简单
      

  2.   

    貼一段以前的老代碼給你參考一下吧,
    我用來在console下發email的 . 
    2003年寫的. 寫得有點丑.但可以運行.
    僅供參考,缺少控件,你可能無法編譯.看看smtp RFC,發送郵件其實很簡單.
    難點在於mime編碼與你的特殊需求.
    unit AuthNMSMTP;interfaceuses
    Classes,NMsmtp ,idGlobal, IdCoder3To4 ,idsmtp,blcksock,SysUtils;type
        TAuthNMSMTP = class(TNMSMTP)
        private
            FPassword :String ;
            FProxy: String;
            FProxyPort: String;
            FUseProxy :Boolean ;
            FSocksBlockSocket : TSocksBlockSocket ;
        protected
            Procedure   ConnectProxy() ;
            procedure   closeProxy() ;      
        public
           property   Password :String read FPassword write FPassword ;
           property   Proxy: String  read FProxy write FProxy;
           property   ProxyPort: String  read FProxyPort write FProxyPort;       procedure  Connect  ; override  ;
           constructor Create(AOwner: TComponent); override;
           destructor Destroy; override ; 
        end ;implementationuses func;
    constructor TAuthNMSMTP.Create(AOwner: TComponent);
    begin
      inherited Create(AOwner);
      FUseProxy := False  ;end;procedure TAuthNMSMTP.Connect;
    begin
      if  length(Fproxy) >0 then begin
        ConnectProxy ;
      
      end else begin
          inherited
      end ;
      if Length(Fpassword) >0 then begin
        self.Transaction('EHLO') ;
        self.Transaction('AUTH LOGIN');
        self.Transaction(Base64Encode(Userid));
        self.Transaction(Base64Encode(FPassword));
      end ;
    end;
    procedure TAuthNMSMTP.ConnectProxy;
    begin
        FSocksBlockSocket  := TSocksBlockSocket.Create ;
        FSocksBlockSocket.SocksIP := Fproxy ;
        FSocksBlockSocket.SocksPort := FProxyPort ;
        FSocksBlockSocket.Connect(Host, IntToStr(Port));
        if  FsocksBlockSocket.SocksOpen then 
            dbugmsg('connect Proxy') ;    self.ThisSocket :=  FSocksBlockSocket.Socket ;
        self.FConnected :=true ;
        self.FSocketWindow :=0 ;
        FUseProxy :=true ;
    end;procedure TAuthNMSMTP.closeProxy;
    begin
        self.ThisSocket :=  0;
        self.FConnected := False ;    FSocksBlockSocket.CloseSocket ;
        FSocksBlockSocket.Free ;
    end;destructor TAuthNMSMTP.Destroy;
    begin
      if FuseProxy then
        CloseProxy ;
        
      inherited Destroy;
    end;end.program mail;// programer :Gan Jian Hui
    //
    // Modify Date 2003-07-15
    // Modify Date 2005-08-02
    {$APPTYPE CONSOLE}{$R *.res}//type//type
    // TNotifyEvent = procedure (Sender: TObject) ofobject;uses
      SysUtils,
      classes,
      windows,
      Variants,
      regexpr,
      U_main in 'U_main.pas',
      func in '..\..\public\func.pas',
      AuthNMSMTP in 'AuthNMSMTP.pas';const
        cMail = 'MAIL' ;
        cProxy = 'SOCKS_PROXY' ;
        csubject  = '-s' ;
        cccaddr   = '-c' ;
        cbccaddr  = '-b' ;
        chelp     = '-h' ;
        cAttch    = '-f' ;
        cVersion  = 'v' ;
    var
        sender :  TAuthNMSMTP ;
        mMail :String ;
        mProxy :String ;
        msubject,mtoaddr ,mccaddr,mbccaddr,mAttch  :String ;    mbody :String ;
        Regexpr1 :TRegexpr ;{ Tsmail }
    begin  msubject := FindCmdLineStr( csubject );
      mccaddr  := FindCmdLineStr( cccaddr ) ;
      mbccaddr := FindCmdLineStr( cbccaddr );
      mAttch   := FindCmdLineStr( cattch) ;
      if FindCmdLineSwitch('-v',['-'],true) then Begin
            showversion();
            System.exit ;
      end else  if (paramcount() <= 0) or
        FindCmdLineSwitch('h',['-'],true) then begin
            usage() ;
            System.exit ;
      end ;  mtoaddr :=paramstr(paramcount()) ;  sender :=TAuthNMSMTP.Create(nil) ;  mMail :=  GetEnvironmentVariable(cMail) ;
      Regexpr1 := TRegexpr.Create ;
      Regexpr1.Expression   :='[smtp|imap]://(.*):(.*)@(.*)/' ;  if  RegExpr1.Exec(mMail) then begin
        Sender.UserID   := regExpr1.Substitute('$1') ;
        sender.Password := regExpr1.Substitute('$2') ;
        sender.Host :=  regExpr1.Substitute('$3')  ;
      end ;
      {
     writeln( Sender.UserID ) ;
     writeln( Sender.Password ) ;
     writeln( Sender.Host ) ;
      }
      
      mProxy :=  GetEnvironmentVariable(cProxy) ;
      Regexpr1.Expression   :='[socks]://(.*):(\d*)$' ;
      if  RegExpr1.Exec(mProxy) then begin
        Sender.Proxy :=regExpr1.Substitute('$1') ;
        Sender.ProxyPort :=  regExpr1.Substitute('$2')  ;
        writeln(Sender.Proxy);
        writeln(Sender.ProxyPort);
      end ;
      
      Regexpr1.Free ;  sender.Charset :='big5' ;
      with sender.PostMessage do begin
          Subject :=mSubject ;      ToCarbonCopy.Append(mccaddr) ;
          ToBlindCarbonCopy.Append(mbccaddr) ;
          FromAddress :=mtoaddr  ;
          ToAddress.Append(mtoaddr)  ;
          if not (trim(mattch)='') then
              Attachments.Append(mattch)   ;
          AssignFile(Input,'');
          Reset(Input);      while not eof(Input) do begin
              readln(Input,mbody) ;
              Body.Append(mbody) ;
          end ;  end ; 
      sender.Connect ;
      if sender.Connected then  begin
          sender.SendMail ; ;
     end ;  sender.Disconnect ;
      sender.Free ;end.
      

  3.   

    我的代碼有點亂.
    除去regex分離信息,與透過proxy部份,
    發email的其實只有一小段
      

  4.   

    现在我用TIdSMTP控件了,已经可以通过tom.com发邮件。往下,还有Helo与smtp建立连接与用Base64编码用户名与密码这个难题。如果解决,就可直接对网易与hotmail等发邮件。
        有朋友做过吗?如果做过,请给个提示吧
      

  5.   

    TIdSMTP不是有下面的屬性麼,沒測試.
    userid=user
    password=pass
    AuthenticationType=atLogin
    以前是自己寫socket的.