高分求购一个delphi发送邮件的源程序(怎么绕过现有isp的smtp认证啊?) 可以利用nmsmtp控件。procedure nmsmtp1sendstart(sender:Tobject);being nmsmtp1.finalheader.text:=’’;//去掉所有的报头。end; 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 通常,实现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.NMSMTP1ConnectionFailed(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.NMSMTP1HeaderIncomplete(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.NMSMTP1RecipientNotFound(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认证!!! 听说要用indy组件,谁又这方面的文章和例子也行,谢谢!!!! 我没有做过这种软件,但知道的原理可能正确,望指教。第一步,打个比方对于一般人来说,如果拥有一个[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控件同样使用。发信的好像也有吧,应该不难找的。 你要的邮件发送程序,发给你了。自己改改,可以发件人不填,一样发送而且特别快,针对SINA我试过了完全符合你的要求。 就是直接把邮件发到收件人的邮箱, 不经过 ISP 的存贮转发。 寻在最好的delphi教程,书籍…… 大家有没发现TWebbrower的一个BUG? 转换。等着急, 急~~急~~急,有关word字体设置问题,,在线等 帮忙啊!关于用程序实现数据的批量写入数据库? 奇怪的访问冲突,各位帮忙看看 十分危险的问题! 如何捕获其它程序控件上的值 关于DBComboBox奇怪的问题,怪胎!!!,是高手就请进来分析分析,来者有分 DELPHI7下用superobject读取中国天气网的JSON数据的天气预报 谁有邮件内容解码函数MimeDecodeString吗!我给100分!!! ◆◇◆邮件附件的问题!!哪位大虾帮帮忙阿!!!◆◇◆
< 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认证!!!
第一步,打个比方对于一般人来说,如果拥有一个[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控件同样使用。发信的好像也有吧,应该不难找的。