关于在线发送邮件(50分)

  • 主题发起人 主题发起人 longwx
  • 开始时间 开始时间
L

longwx

Unregistered / Unconfirmed
GUEST, unregistred user!
我想在主页中提交表单时发送一封E-mail,
我在TWebModule1.WebModule1WebActionItem1Action下是这样写的:

with NMSMTP1 do
begin
Host:='pub3.fz.fj.cn';
Port:=25;
Connect;
with PostMessage do
begin
FromAddress:='longwx@126.com';
FromName:='longwx';
ToAddress[0]:='longwx@126.com';
Subject:='test';
end;
SendMail;
end;
Response.Content:='<html>您的邮件已成功发送,谢谢!</html>';

但结果是"HTTP 500 - 内部服务器错误 Internet Explorer ",
我是在NT上调试的,各位大虾能告诉我为什么吗?
另外我还希望连接失败、发送失败时也能在页面上显示出来,怎么做呢?谢谢!
 
cannect之后,要判断是否已经连接上服务器,最好加一个延时,或者在NMSMTP的
onConnect里面判断. 因为调用connect之后几乎不可能立即连接上.

对于第二个问题,你自己捕获NMSTMP的错误就可以了,一旦发生错误,就把错误
信息返回: response.content:=errmsg;
 
呵呵, cakk说的对, 要在nmsmtponconnect里发送.
try
nmsmtp1.connect;
except
//call error code
end;

nmsmtponconnect里用
try
sendmail;
//call ok code
except
//call error code
end;
 
我暂时还没试成功,但我又发现一个奇怪的现象,我现在先编发邮件程序,如下:
implementation

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
begin
with NMSMTP1 do
begin
Host:='pub3.fz.fj.cn';
Port:=25;
UserID:='longwx';
Connect;
end;
Edit1.Text:='Connecting...';
end;

procedure TForm1.NMSMTP1Connect(Sender: TObject);
begin
Edit1.Text:='Connected,sending message...';
with NMSMTP1.PostMessage do
begin
ToAddress.Text:='longwx@126.com';
FromAddress:='longwx@126.com';
Subject:='test';
Body.Text:='test body';
end;
NMSMTP1.SendMail;
end;

procedure TForm1.NMSMTP1Success(Sender: TObject);
begin
Edit1.Text:='Sended';
if NMSMTP1.Connected then
NMSMTP1.Disconnect;
end;

procedure TForm1.NMSMTP1Disconnect(Sender: TObject);
begin
Edit1.Text:='Disconnected';
end;
当执行完TForm1.NMSMTP1Disconnect后程序又自己回到TForm1.Button1Click执行,
最后Edit1.Text显示为’Connecting’,能告诉我为什么吗?谢谢!!!
 
呵呵, 是不是button1按多了:-)
开玩笑, 是因为你的edit1.text:='connecting'放在了connect后面了, 放在
前面就可以了:-)
 
cytown、CAKK,你们好:
我按你们说的去试了,现在只连接则正常,一加入发送部分NMSMTP1Connect则失败
‘HTTP 500 - 内部服务器错误 ’
,程序很简单,如下:
implementation

{$R *.DFM}

procedure TWebModule1.WebModule1WebActionItem1Action(Sender: TObject;
Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
begin
with NMSMTP1 do
begin
Host:='pub3.fz.fj.cn';
Port:=25;
UserID:='longwx';
Connect;
if Connected then Response.Content:='<html>Connected</html>'
else Response.Content:='<html>Connected Failed</html>';
end;
end;

procedure TWebModule1.NMSMTP1Connect(Sender: TObject);
begin
with NMSMTP1.PostMessage do
begin
ToAddress.Text:='longwx@126.com';
FromAddress:='longwx@126.com';
Subject:='test';
Body.Text:='test body';
end;
NMSMTP1.SendMail;
end;

若使用FrontPage 98自带的shtml.dll发送邮件则正常,看来服务器没有问题;上回
那个程序也能正常发送邮件,看来Delphi5也没问题;另外在NT下怎样调试ISAPI程序
呢?
 
试试用try..except捕获一下哪里出的错.
 
问一下:"FrontPage 98自带的shtml.dll"是怎么用的?
 
cAkk:
shtml.dll就是我们提交表单时使用FrontPage缺省的功能进行发送邮件或写文件时调
用的DLL。
另外我的尝试失败了,希望你能在你的机器上试试看,我曾偶尔成功了一次,后来再
未成功;现在我只好改用ASP。
 
我用SakeMail控件,试了一下,蛮好用的:

procedure TWebModule1.WebModule1indexAction(Sender: TObject;
Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
begin
SakMsg1.From := 'DreamTiger@kali.com.cn';
SakMsg1.SendTo := 'shengqh@263.net';
SakMsg1.Subject := '测试test';
SakMsg1.Text.Text := '测试test';
SakSMTP1.Host := 'smtp.kali.com.cn';
SakSMTP1.Port := '25';
SakSMTP1.TimeOut := 5;
SakSMTP1.Connect;

if(not SakSMTP1.SMTPError) then
begin
SakSMTP1.SendMessage(SakMsg1);
Response.Content:='您的邮件已成功发送,谢谢!';
end
else
Response.Content :='邮件服务器异常!';
end;

蛮好的啊。NMSMTP么,没试。
 
没说么, 用try...except先看看哪里出错再排错.
 
多人接受答案了。
 
后退
顶部