接分
问题:使用indy9不能发送邮件的兄弟注意了,这里有解决方法! ( 积分:10, 回复:71, 阅读:2843 )
分类:Internet/TCPIP ( 版主:luyear, robertcool )
来自:lzf1010, 时间:2006-2-21 14:26:00, ID:3359545 [显示:小字体 | 大字体]
1、
找到procedure TIdSMTP.Send(AMsg: TIdMessage);这个函数将SendCmd('RSET');这行注销
2、IdMessageCoderMIME这个单元,将下面的常量IndyMIMEBoundary,IndyMultiPartAlternativeBoundary,IndyMultiPartRelatedBoundary改成你自己需要的就可以了。
从这里可以看出,部分门户网站的免费邮箱专门针对indy组件做了限制!现在borland已经决定出售delphi了,这些门户还暗地里捅上一刀,真是阴险!
来自:zqw0117, 时间:2006-2-21 14:50:02, ID:3359594
顶一下,其实很早之前就有好多邮件服务器把indy特征记录了,一般用Indy原始代码都发不出去的,呵呵,自己动手丰衣足食!改改就不错!请问一句,那个SendCmd('RSET')是什么 意思?通讯的时候是不是可以忽略这个cmd?
来自:lzf1010, 时间:2006-2-21 14:52:52, ID:3359599
是要注释掉这一行才行,不注释掉这行会报异常!
是最近两个星期才出现发不出邮件的现象的,之前一直没问题。
来自:lzf1010, 时间:2006-2-21 14:54:23, ID:3359601
呵呵,2006自带那个indy10就没问题,不过还是建议要改掉那三个常量,因为说不准那天就又被封杀了
来自:zqw0117, 时间:2006-2-21 15:06:25, ID:3359614
呵呵,明白了。
恩,常量一定要改,建议一劳永逸的改成一个自动生成初始化值的常量,在单元的initialization中动态初始化,这样每次执行程序都会不同:)嘻嘻。更保险。
来自:lzf1010, 时间:2006-2-21 15:24:17, ID:3359648
看来indy开发组已经注意到自己的控件被人封杀了,2006自带的Indy10现在这三个常量已经是每次执行程序都不同的了,而且也是放在initialization中动态初始化
来自:liyinwei, 时间:2006-2-23 10:08:37, ID:3361695
支持!支持!
非常感谢楼主!
来自:王思佳, 时间:2006-2-23 10:43:11, ID:3361757
非常感谢!
来自:Tuatara, 时间:2006-2-24 14:11:34, ID:3363252
THS
来自:play123456, 时间:2006-2-27 10:50:52, ID:3365374
我写了个程序测试了一下Indy9的smtp控件,发现是这样的:
1.对有的邮件服务器,这样的写法是没有问题的,比如使用foxmail服务器版做的服务端。
2.对另一些邮件服务器的确会出错。但把顺序改一下,先进行身份验证auth,然后再发送RSET指令就正确了。
3.换用Indy10后就正确了。仔细比较了Indy9和Indy10的这部分代码,觉得是9版本实现的有问题造成的。
来自:CoolSlob, 时间:2006-2-28 14:15:11, ID:3366849
难道非要回复了才能收藏此贴吗
测试一下
来自:vmao, 时间:2006-2-28 15:03:10, ID:3366927
[
]还是不太明白,不过确实最近我用Indy9写的程序发不了邮件了~~
来自:lzf1010, 时间:2006-2-28 15:22:21, ID:3366970
to vmao:
在你project所在文件夹中新建一个文件夹,将IdMessageClient.pas,IdMessageCoderMIME.pas这两个文件copy到这个新建的文件夹中,然后按我所说的方法修改这两个文件,最后在IDE中打开Project->Options->Directories/Conditionals->Search path中加入这个新建的文件夹所在的路径,重新编译就可以了。
来自:vmao, 时间:2006-2-28 15:24:30, ID:3366979
1.SendCmd('RSET')是什么 意思?通讯的时候是不是可以忽略这个cmd?
2.那三个常量有什么作用,把它的value随便换成什么都可以吗?
来自:lzf1010, 时间:2006-2-28 16:05:32, ID:3367090
1、SendCmd('RSET')一定要注销,否则会报异常
2、那三个常量随便换成什么都可以,不过一定要长,最好是随机的GUID(在IDE的代码编辑器里同时按下Ctrl+shift+G可以产生GUID)!因为这三个常量是用来分割邮件内容的的分隔符。
来自:vmao, 时间:2006-2-28 16:27:00, ID:3367132
我以前是好的,现在老报这个错误,是怎么回事~
550 5.7.1 Unable to relay for user@domain.com
来自:lzf1010, 时间:2006-2-28 16:31:43, ID:3367136
按照我说的来修改也不行吗?
来自:vmao, 时间:2006-2-28 16:41:09, ID:3367152
是的,我已经改过了~~,奇怪了~ 我是直接改的Indy的代码,没有复制过来,把搜索地址指向了原来的Source文件夹
来自:vmao, 时间:2006-2-28 16:48:33, ID:3367165
procedure TSendMailf.BtnSendClick(Sender: TObject);
var inifile:tinifile;
sSender:string; //发件人地址
i,j,iCount:integer;
sReceipter,sAddress:string;//收件人和地址
sBody : string; //邮件内容,有替代
begin
Unsend.Lines.Clear;
//1.删除空行
i:=0;
while (i<self.txtRecipters.Lines.Count) do
begin
if self.txtRecipters.Lines.Strings
= '' then
begin
self.txtRecipters.Lines.Delete(i);
i:=i-1;
end;
i:=i+1;
end;
if self.txtRecipters.Lines.Count = 0 then
begin
showmessage('没有收件人!');
abort;
end;
//1 总进度
self.ProgressBar.Max := self.txtRecipters.Lines.Count;
self.ProgressBar.Step :=1;
self.ProgressBar.Position :=0;
//1.读取配置文件
inifile:=tinifile.Create(extractfilepath(application.exename)+'/setting.ini');
try
self.IdSMTP.AuthenticationType := atLogin;
self.IdSMTP.Host := inifile.ReadString('Setting','HostName','');
self.IdSMTP.Port := inifile.ReadInteger('Setting','port',25);
self.IdSMTP.Username := inifile.ReadString('Setting','UserName','');
self.IdSMTP.Password := inifile.ReadString('Setting','Password','');
sSender := inifile.ReadString('Setting','Sender','');
finally
inifile.free;
end;
//2.构建Idmessage
self.IdMessage.Subject := trim(self.txtTitle.Text);
self.IdMessage.From.Text := sSender;
//3.添加附件
for i:=0 to self.ListView.Items.Count-1 do
begin
TidAttachment.Create(idMessage.MessageParts ,self.ListView.Items.Caption);
end;
//
iCount := 0;
try
IdSMTP.Connect(5000);
for i:=0 to self.txtRecipters.Lines.Count -1 do
begin
sReceipter := '';
sAddress := '';
sBody := self.txtBody.Lines.Text;
sReceipter := copy(self.txtRecipters.Lines.Strings,1,pos(',',self.txtRecipters.Lines.Strings)-1);
sAddress := copy(self.txtRecipters.Lines.Strings,length(sReceipter)+2,length(self.txtRecipters.Lines.Strings));
if sReceipter='' then sReceipter := copy(sAddress,1,pos('@',sAddress)-1); //修正receipter;
self.IdMessage.Recipients.EMailAddresses := sAddress;
sBody := stringreplace(sBody,'[Receipter]',sReceipter,[rfReplaceAll]);
self.IdMessage.Body.Text := sBody;
try
IdSMTP.Send(IdMessage);
Unsend.Lines.Add(self.txtRecipters.Lines.Strings);
iCount := iCount +1;
except
raise;
//错误地址以后处理
end;
self.ProgressBar.Position := self.ProgressBar.Position + self.ProgressBar.Step;
end;
finally
IdSMTP.Disconnect;
end;
//
showmessage('发送完成!');
end;
来自:lzf1010, 时间:2006-2-28 16:50:58, ID:3367172
你应该复制出来!!在新的文件夹里看到这两个文件的DCU生成了那些修改才算是生效了!
来自:vmao, 时间:2006-2-28 17:01:10, ID:3367193
我试试看吧~~
来自:vmao, 时间:2006-2-28 20:01:42, ID:3367392
我自己先查查吧,因为我发现用foxmail发邮件也是同样的错误,可能是我的邮件服务器或我的设置有问题.
来自:lzf1010, 时间:2006-2-28 20:41:36, ID:3367431
按我的方法修改后还是不行吗?你是用什么邮箱?
来自:jtsnyj, 时间:2006-3-9 14:54:52, ID:3376889
真的感谢lzf1010,为这件事我折腾了好几天了,也没弄好,上大富翁看看,果然有结果,哈哈!我用的是delphi6,他没有IdMessageCoderMIME.pas单元,怎么办呀?
来自:jtsnyj, 时间:2006-3-9 15:37:58, ID:3376970
lzf1010我收到的邮件内容有的是html格式,怎么办?你怎样收正文呀?
来自:hxb_leiyuan, 时间:2006-3-16 14:39:05, ID:3383925
如果 charset=text/html
建议使用HTML Component进行解析,从http://www.pbear.com/下载
来自:迷恋婷, 时间:2006-3-24 11:12:31, ID:3392092
那个html转网页显示的控件有没有中文帮助阿?小弟不太会用:(
来自:wutianlong, 时间:2006-3-27 9:20:23, ID:3394458
我用indy9发邮件怎么没有问题呢,你们说的是指哪几个门户网站的邮件服务器不行,我也想看看是不是我的也存在问题
来自:xdel, 时间:2006-4-3 10:22:40, ID:3402602
lzf1010:
我已照你的方法修改了,163.com可以成功发往163.com,但不能发往其他邮箱,如21cn.com、sina.com等,出现‘requested action not taken:smtp13‘ 错误,如何解决?
来自:w_anghe, 时间:2006-4-4 10:17:38, ID:3403828
非常感谢楼主提供宝贵信息。
来自:lzf1010, 时间:2006-4-4 10:47:24, ID:3403875
xdel:
我测试了一下,好像没有出现你说的错误
来自:xdel, 时间:2006-4-4 16:37:33, ID:3404457
lzf1010:
有时行,有时不行,不知何解?
来自:pllink_qyd, 时间:2006-4-4 16:50:40, ID:3404487
不錯。。
来自:wutianlong, 时间:2006-4-7 12:52:36, ID:3407603
鎴戞渶杩戠敤ipsmtp鍙戠粰鍥藉?瀹㈡埛鐨勯偖浠舵湁浜涗細鏈夌┖鐧?杩欐槸涓轰粈涔?
鍝?綅澶т緺鐭ラ亾,缁欎釜鎻愮ず,璋㈣阿
来自:xdel, 时间:2006-4-15 20:06:47, ID:3416359
lzf1010:
用indy9 demo 自带的MailClient 发送邮件,在MailClient中接收,发现只能接收主题等,不能接收'Body',(带附件的除外),大家有无这种情况,如何解决?
来自:chlf6312, 时间:2006-5-20 23:47:57, ID:3448568
不错不错 问题已经解决 十分感谢
来自:chlf6312, 时间:2006-5-21 0:31:49, ID:3448579
发送也没问题了,但是出现了新的问题,就是不能重复发送,也就是当发送一次后,修改一下内容(比如主题、信件内容、或者收件人之类的)之后再点击发送按钮,就出错了
出错信息是:
Access violation at address 0046BC81 in module
程序主体如下:
IdMessage1.Clear;
IdMessage1.Body.Assign(Contents.Lines); //Text
IdMessage1.From.Text := SenderAddress.Text; //Address
IdMessage1.Recipients.EMailAddresses := ReceiverAddress.Text;
IdMessage1.Subject := Title.Text;
//IdMessage1.ContentType := 'Text';
IdSMTP1.AuthenticationType := atLogin;
IdSMTP1.Username := SenderName.Text;
IdSMTP1.Password := Password.Text;
IdSMTP1.Host := HostName.Text;
IdSMTP1.Port := 25;
try
try
StatusBar1.SimpleText := 'Connecting...';
StatusBar1.Update;
IdSMTP1.Connect;
except
MessageBox(0, '连接服务器失败', nil, MB_OK or MB_ICONERROR);
StatusBar1.SimpleText := 'Connect Failed';
StatusBar1.Update;
Exit;
end;
StatusBar1.SimpleText := 'Connected';
StatusBar1.Update;
try
StatusBar1.SimpleText := 'Sending...';
StatusBar1.Update;
IdSMTP1.Send(IdMessage1);
StatusBar1.SimpleText := 'Send Successed';
StatusBar1.Update;
MessageBox(0, '邮件已经发送成功', nil, MB_OK or MB_ICONINFORMATION);
except
StatusBar1.SimpleText := 'Send Failed';
StatusBar1.Update;
MessageBox(0, '邮件发送失败', nil, MB_OK or MB_ICONERROR);
end;
finally
IdMessage1.Free;
IdSmtp1.Free;
end;
请高手赐教啊
来自:shiwei-l, 时间:2006-5-23 13:29:01, ID:3450556
我用的是delphi6,他没有IdMessageCoderMIME.pas单元,怎么办呀?
我改了IdMessageClient.pas单元的MultiPartBoundary, MultiPartAlternativeBoundary,MultiPartRelatedBoundary三个常量结果不可以,但是按楼主说的改Delphi7的就可以了,请问delphi6的怎么办,可不可以卸载delphi 6的indy装上delphi 7的indy????,那又如何卸载delphi 6的indy???
来自:lzf1010, 时间:2006-5-23 14:33:29, ID:3450729
indy9不是有for D6的吗?安装包里有说明如何删除旧版INDY的方法,你按照上面说的就可以了
来自:shiwei-l, 时间:2006-5-23 14:56:08, ID:3450766
To:lzf1010,你好,我找不indy9的组件,你能否传一份给我,对了,我不会删除旧版indy,你能否告之,谢谢了,你可以去http://www.delphibbs.com/delphibbs/dispq.asp?lid=3448531拿份
来自:shiwei-l, 时间:2006-5-23 16:32:53, ID:3450989
问题搞定了,但是怎么发送Html正文呢
来自:ranran, 时间:2006-8-7 16:57:36, ID:3527745
我没有改,为什么现在可以了?确实要改吗?
来自:ranran, 时间:2006-8-7 17:20:58, ID:3527777
测试了一下午,发现都能收,不知道还要不要改!
来自:lzf1010, 时间:2006-8-18 21:28:15, ID:3539318
我只是说不能发,没有说不能收
来自:ranran, 时间:2006-8-19 8:53:07, ID:3539432
有时能发出有时不能发,TOM的每天只能发五封。。。163这两天又不能发了。
来自:ranran, 时间:2006-8-19 11:34:49, ID:3539555
就是改了也不行(163),另:
procedure TIdSMTP.Send(AMsg: TIdMessage);
procedure WriteRecipient(const AEmailAddress: TIdEmailAddressItem);
begin
SendCmd('RCPT TO:<' + AEMailAddress.Address + '>', [250, 251]); {Do not Localize}
end;
没有找到SendCmd('RSET');
来自:shiwei-l, 时间:2006-9-8 0:37:20, ID:3566283
我觉的还是用indy10,我就是用这个开发的
来自:davidtseng, 时间:2006-9-8 15:03:34, ID:3566859
我现在用indy10开发邮件客户端程序遇到 问题,哪位大侠帮助解决?
如何使用indy邮件组建通过 proxy发送邮件
来自:lzf1010, 时间:2006-9-15 18:37:53, ID:3573520
使用TIdSMTP、TIdIOHandlerStack、TIdSocksInfo就可以用代理发送邮件了!
来自:yeschoto21cn, 时间:2006-9-16 16:12:38, ID:3574009
如何用使用TIdSMTP、TIdIOHandlerStack、TIdSocksInfo进行使用代理发送邮件?
来自:lucky.gong, 时间:2006-12-8 23:45:37, ID:3641462
好多看不懂,现在又要用到各位说的东东.唉,要学的东西太多了.
来自:竹音, 时间:2006-12-11 18:13:15, ID:3643083
我通过这种方式,解决了163发不出的问题。但是gmail还是发不出去,发送报异常,E.message是一串随机值,形如“d19sm7049513and”。解决了的话开帖给分~~谢了
来自:ufo!, 时间:2006-12-11 20:09:12, ID:3643151
先查询dns,获取gmail的mx值的ip,然后可以用idsmtp直接发邮件给gmail,只是有时会被规类到垃圾邮件去。
来自:ARRAYlyf, 时间:2006-12-12 11:35:42, ID:3643533
哪位能提供一完整代码,并配上注释,让小弟学学啊?
来自:51zhan.com, 时间:2006-12-26 12:24:57, ID:3645622
我用indy10,也遇到问题,欢迎大家继续讨论.
来自:51zhan.com, 时间:2006-12-28 22:05:40, ID:3647827
这样改了也是白改,都不行, Smtp.Host := sMX;
function TfrmMain.GetMxList(vDns, vDomain: string): TstringList;
var
k: Integer;
IdDNS:TIdDnsResolver;
begin
Result := TstringList.Create;
IdDNS := TIdDnsResolver.Create(nil);
if vDns='' then vDns := '202.118.4.238';
IdDNS.Host := vDns;
IdDns.QueryRecords := [qtMX];
try IdDns.Resolve(vDomain);//(vDomain);
IdDns.Active;
for k := 0 to IdDns.QueryResult.Count-1 do
if IdDns.QueryResult[k] IS TMxRecord then
Result.Add(TMXRecord(IdDns.QueryResult[k]).ExchangeServer);
finally
IdDns.Free;
end;
end;
来自:LoveShanShan, 时间:2006-12-31 9:37:52, ID:3649397
改成任意常量都行么?
来自:lzf1010, 时间:2006-12-31 17:42:37, ID:3649785
gmail使用的是ssl链接,和普通的邮件服务器有点区别,修改一下属性值就可以了
来自:抵住诱惑, 时间:2007-1-1 10:56:00, ID:3649954
原来如此啊..
来自:51zhan.com, 时间:2007-1-3 21:03:56, ID:3651237
顶
来自:l1_jun, 时间:2007-1-3 21:15:22, ID:3651242
看来以后用Indy的话,要注意一下了。
来自:51zhan.com, 时间:2007-1-4 14:33:41, ID:3651772
用新浪(sina)的smtp(smtp.sina.com.cn)依然发送不了,谁能够解决,就奖商他500大洋.
来自:lrpgdbbk, 时间:2007-4-25 9:28:48, ID:3706289
我前两天才发现我一直用的发邮件的程式用不了,原来如此。
来自:hrp123, 时间:2007-8-28 16:13:13, ID:3828116
lzf1010:
你的这个问题解决没有?我与碰到这个问题,能否共享下?
来自:go2u, 时间:2007-9-18 13:10:14, ID:3835129
我现在用indy10 在163,sina, tom 都发不出。哪位大侠有一劳永逸的办法。
来自:txbdir, 时间:2007-9-18 13:23:11, ID:3835140
顶
来自:dali2000, 时间:2007-10-1 10:40:41, ID:3839352
来自:go2u, 时间:2007-9-18 13:10:14, ID:3835129
我现在用indy10 在163,sina, tom 都发不出。哪位大侠有一劳永逸的办法。
indy10又发不出去了?
来自:dali2000, 时间:2007-10-1 11:31:23, ID:3839355
有没有别的没被限制的发邮件的控件
来自:txbdir, 时间:2007-10-5 19:55:24, ID:3839892
楼主,请加我QQ85484058,有问题请教!
来自:dali2000, 时间:2007-10-18 11:39:02, ID:3843642
现在都不知用什么来发送邮件了!!!
来自:bigwell, 时间:2007-10-24 16:49:55, ID:3845630
也难怪的,太多人使用indy发垃圾邮件了