可以利用nmsmtp控件。
procedure nmsmtp1sendstart(sender:Tobject);
being
  nmsmtp1.finalheader.text:=’’;//去掉所有的报头。
end;

解决方案 »

  1.   

    通常,实现WEBMAIL采用mailto.exe的CGI、在HTML文件中写入“< form action="mailto:电子邮箱地址" method=post >”语句或者调用WINDOWS API函数。采用WINDOWS API 和在HTML文件中写入“< form action="mailto:电子邮箱地址" method=post >”语句都要求用户的浏览器装入EXCHANGE、OUTLOOKEXPRESS、或OUTLOOK等软件,而且还有一些浏览器不支持MAILTO语句。而采用CGI的形式实现WEBMAIL对用户的浏览器没有要求,但效率不高。CGI技术正在逐渐被ISAPI/NSAPI技术所取代。本文就来讨论一下采用ISAPI技术实现WEBMAIL。        使用Delphi 4开发Web Server程序是非常简单的,Delphi 4中提供了大量的元件和对象,支持Web Server程序的开发。 下面通过一个例子来介绍如何利用DELPHI开发一个响应用户输入的ISAPI的WEBMAIL程序。只有在发送服务器上注册的用户才能通过在浏览器发送邮件。为了简单,程序没有对传送的数据提供保密。         首先,在WEB服务器端安装数据库引擎dbe,并设置好数据库别名:yh,指向一个包含用户名和用户密码的数据库文件user.db。接着建立两个HTML文件,名字分别为:dl.html,qd.html,放在WEB服务器的缺省目录下(如:C:\INETPUB\WWWROOT)。 dl.html的内容如下:
    < html >
    < head >< title >  发送邮件系统< /title >< /head >
      < body >
       < h1 >发送邮件系统< /h1 >
       < p > 请输入您的用户名及密码。< /p >
       < form method=”post” action="/scripts/xsmd" >
         < p >用户名:< input type="text" length=10 
             name="username" >
            密码:< input type="password"
                   length=10  name="password" >< /p >
         < p >< input type="submit" value="确定"  >
         < input type="reset" value="清除" >< /p >
       < /form >
    < /body >
    < /html >
    qd.html文件内容如下:
    < html >< head >< title >填表< /title >< /head >
      < body >
        < form method=”post” action="feedback" >
           < p >请填入接收邮件地址:toaddress:
          < input type=”text” length=20
            name=”toaddress” >< /p >
           < p >请填入主题。< input type="text"
               length=20 name="subject" >< /p >
           < p >内容:< /p >
           < p >< input type=“textarea”length=40 
            width=40 name=”body” >< /p >
           < p >< input type="submit" value="确定" >
        < input type="reset" value="清除" >< /p >
         < /form >
      < /body >
    < /html >
          在DELPHI中新建一个基于ISAPI的WEB SERVER APPLICATION,手动增加nmsmtp1,query1,pageproducer1。       其中:pageproducer1的property: htmlfile:c:\inetpub\www.root\qd.html。nmsmtp1的 property:host(发送邮件服务器的地址。)在这里为smtp.netease.com.。port:25。 全局变量为: sername:string;flag:boolean; 增加一个路径为/feedback的动作项,其代码如下:
    procedure TWebModule1.WebModule1WebActionItem1
        Action(Sender: TObject;Request: TWebRequest; Response:TWebResponse; var Handled: Boolean);
    Var  Count:integer;
         S:string;
    Begin
      Query1.close;
      Query1.sql.clear;
      S:=’select count(username) from
         user.db where username=”’;
      S:=s+request.contentfields.values[‘username’]+’”’;
      S:=s+’ and password=”’;
      S:=s+request.contentfields.values[‘psword’]+’”’;
      Query1.sql.add(S);
      Query1.open;
    If query1.count=0 
    then response.content:=’< html >< head >< title >
    < /title >< body >用户名、密码不正确,请重新输入
    < /body >< /html >’
    Else  
       Username:=request.contentfields.values[‘username’];
       Response.content:=pageproducer1.content;
    End;再增加一个路径为/sendmail 的动作项,它的程序代码如下:
    procedure TWebModule1.WebModule1Web
         ActionItem2Action(Sender: TObject;Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
    Var body:string;
    Begin
      Flag:=true;
      body:=request.contentfields.values[‘body’];
      Pageproducer1.htmldoc.clear;
      Pageproducer1.htmldoc.add(‘< html >< body >’);
      Nmsmtp1.postmessage.clear;
      Nmsmtp1.postmessage.fromaddress:=username+
      ’@netease.com’;
      Nmsmtp1.postmessage.from:=username;
      Nmsmtp1.postmessage.body.add(body);
      Nmsmtp1.postmessage.toaddress.add
      (request.contentfields.values[‘toaddress’]);
      Nmsmtp1.postmessage.subject:=
      request.contentfields.values[‘subject’];
      Nmsmtp1.connect;
      If flag=true then begin  Nmsmtp1.sendmail;
      nmsmtp1.disconntent;end
      pageproducer1.htmldoc.add
      (‘< /body >< /html >’);
      response.content:=pageproducer1.content;
    end;    增加nmsmtp1的事件如下:
    procedure TWebModule1.NMSMTP1Connect(Sender: TObject);
    begin
      pageproducer1.htmldoc.add
    ('< p >已经和发送邮件服务器连接< /p >');
    end;procedure TWebModule1.NMSMTP1Connection
    Failed(Sender: TObject);
    begin
      flag:=false;
      pageproducer1.htmldoc.add
    ('< p >连接失败< /P >');
    end;
    procedure TWebModule1.NMSMTP1ConnectionRequired
    (var Handled: Boolean);
    begin
      pageproducer1.htmldoc.add('< p >要求进行连接< /p >');
    end;
    procedure TWebModule1.NMSMTP1Failure(Sender: TObject);
    begin
      pageproducer1.htmldoc.add('< p >发送邮件失败< /p >');
      flag:=false;
    end;
    procedure TWebModule1.NMSMTP1Header
    Incomplete(var handled: Boolean;
      hiType: Integer);
    begin
      pageproducer1.htmldoc.add('< p >head不完整< /p >');
      flag:=false;
    end;
    procedure TWebModule1.NMSMTP1InvalidHost
    (var Handled: Boolean);
    begin
      pageproducer1.htmldoc.add('< p >
    发送邮件服务器地址无效< /p >');
      flag:=false;
    end;
    procedure TWebModule1.NMSMTP1RecipientNot
    Found(Recipient: String);
    begin
      pageproducer1.htmldoc.add
    ('< p >接受邮件地址不正确< /p >');
      flag:=false;
    end;
    procedure TWebModule1.NMSMTP1Success(
    Sender: TObject);
    begin
      pageproducer1.htmldoc.add('< p >
    成功发送邮件< /p >');
    end;       将project存为sendmail.dpr,编译后放到WEB服务器的可执行文件路径下(如:c:\intpub\scripts),即可响应HTML文件dl.htm的用户输入,并且如果用户的用户名及密码正确则可进入发送邮件的页面,用户填写接受邮件地址及主题、内容后即可发送邮件。此程序在NT SERVER上调试通过。 不好绕过现有isp的smtp认证!!!
      

  2.   

    听说要用indy组件,谁又这方面的文章和例子也行,谢谢!!!!
      

  3.   

    我没有做过这种软件,但知道的原理可能正确,望指教。
    第一步,打个比方对于一般人来说,如果拥有一个[email protected]的邮件地址,就可以使用SINA的邮件发送服务器,投出的信件必须留有sina的合法email地址,服务器才接受;后来SINA改革了,加上了用户认证,确认密码,才可发送。
    第二步,那么SINA的邮件发送服务器然后做什么呢?发送服务器根据你的信的收信人地址,送到对方(收信的服务器)的SMTP(不知道是不是叫这个),对方之所以收这个信,是因为收件人是自己的用户。如果这个邮件不是自己的用户,就会退回信件。
    注意两点,邮件发送服务器只接收自己用户发出的信,邮件接收服务器只接收寄给自己用户的信。或者把两者合在一起说,他们工作的前提是,邮件发送者或接收者是自己的用户。
    因此,绕过现有的SMTP认证是不好办的,但要想发信,还是非常容易的。你只要亲自把信投到接收方的邮件服务器就行了,你爱留什么地址留什么。如果你有带宽的话,还是非常快的,省了转信的步骤,对方几秒后就收到了。
    如何根据对方EMAIL地址确定对方接收服务器地址?使用DELPHI的INDY的DNS控件可以完成啊。原理是(拿发到[email protected] 举例)
    向域名服务器查询sina.com这个域名的MX地址就可以了。得到的可能是一个或多个IP地址(记不太清了,是不是允许多个),直接向这个IP地址用邮件发送协议发信就可以了。它才不会验证发信人是不是真的,只要收信人是自己的用户就收了。所以应该可以留下任何的EMAIL地址,可不要乱来啊,IP地址还是会记下的,作为证据还会被查出来的。所以最好在某个网络的内部进行,查不出来是谁发的:)
    以上所有这样仅限理论而已,我从来没有试过,也没有这样的需要,但原对你可能有帮助。
    忘说了,DELPHI6下的INDY控件有一个DNS的,D5也可以载一个INDY控件同样使用。发信的好像也有吧,应该不难找的。
      

  4.   

    你要的邮件发送程序,发给你了。自己改改,可以发件人不填,一样发送而且特别快,针对SINA我试过了完全符合你的要求。
      

  5.   

    就是直接把邮件发到收件人的邮箱, 不经过 ISP 的存贮转发。