捐赠 | 广告 | 注册 | 发布 | 上传 | 关于我们    
  沪ICP备05001939号 DELPHI盒子 | 盒子论坛 | 盒子文章 | 盒子问答悬赏 | 最新更新 | 论坛检索 | 下载中心 | 高级搜索    
  精品专区 | 繁體中文 | 奖励公告栏 | 直通车账号登陆 | 关闭GOOGLE广告 | 临时留言    
盒子资源分类
全部展开 - 全部合拢
用ics收邮件(可接收大附件)
关键字:ics 邮件 大附件
来 自:原创
平 台:Win2k/XP/NT 下载所需:0 火柴
深浅度:初级 完成时间:2010/4/1
发布者:lyq2276959 发布时间:2010/4/1
编辑器:DELPHI6 语  种:简体中文
分 类:网络 下载浏览:7109/14156
加入到我的收藏
下载错误报错
登陆以后才能下载
 用户名:
 密 码:
自动登陆(30天有效)
图片如果打不开,说明流量不够了,请稍候下载……
通常用indy和fastnet收邮件,若邮件过大就会没有响应,收取不成功。通过试验,用ics控件包中的smpt来收邮件就没有这种问题,但是ics的帮助资料较少,其附带的例子并没有说明如何收取邮件的附件。(我用的是ics5。下载地址:http://www.overbyte.be),本例子使用SyncPop3Cli控件来下载邮件,并取得附件。

一、基本设置

  syncp3cl1.AuthType := popAuthLogin;//需要认证
  syncp3cl1.Host := 'pop3.163.com';//收邮件服务器
  syncp3cl1.MultiThreaded := False;//多线程
  syncp3cl1.PassWord := '密码';
  syncp3cl1.UserName := '用户名';
  syncp3cl1.Port := '110';//端口

二、收邮件

1、  syncp3cl1.OpenSync;//打开连接
2、syncp3cl1.StatSync;//取得当前邮件数等信息

          syncp3cl1.MsgCount;//当前邮件总数

          syncp3cl1.MsgNum := 1;//设置要获取第几个邮件的摘要
          syncp3cl1.TopSync;//取邮件摘要


3、这时就可读取一系列邮件的基本信息,如:

syncp3cl1.HeaderSubject;//取得邮件标题

syncp3cl1.HeaderDate;//日期

等等

4、

要删除邮件就这样:

          syncp3cl1.MsgNum := 1;//要删除的邮件号
          syncp3cl1.DeleSync;//执行删除
5、

要接收完整邮件就这样: 

lbl1.Caption = '数据下载中。';//设置下载标记 

syncp3cl1.MsgNum :=1;//要接收的附件号
  syncp3cl1.RetrSync; //开始下载邮件。


6、以上的操作中会触发MessageLine事件。

所以我们可以在此把收到的数据保存起来。然后再进一步处理。

procedure TForm1.syncp3cl1MessageLine(Sender: TObject);
begin
  if lbl1.Caption = '数据下载中。' then //只要下载的数据,其他信息的不要。
    memo1.lines.Add((Sender as TPop3Cli).LastResponse);//接收到的数据保存起来,若是大邮件最好用流
end;
这样就会得到一个完整的邮件了。

7、接下来就是邮件解码的工作了。

若是base64的解码,可用我找到的:http://lyq2276959.blog.163.com/blog/static/28097203201022510218725/

注意:附件的解码最好一行一行解,然后连接起来(因为附件经base64编码后会分成若干行,一行是60字符,所以解码时要去掉换行回车等非法字符。这时用流就最方便了。)

如:

    收到如下邮件信息:

Received: from lyq2276959 (unknown [59.34.112.1])
 by smtp7 (Coremail) with SMTP id C8CowLCLxwd1prFLduQ3AA--.3951S3;
 Tue, 30 Mar 2010 15:21:25 +0800 (CST)
From: <lyq2276959@163.com>
To: lyq2276959@163.com
Subject: 邮件标题
Mime-Version: 1.0
Content-Type: multipart/mixed; boundary="==========54535aavfgq===="
X-CM-TRANSID:C8CowLCLxwd1prFLduQ3AA--.3951S3
X-Coremail-Antispam: 1Uf129KBjDUn29KB7ZKAUJUUUUU529EdanIXcx71UUUUU7v73
 VFW2AGmfu7bjvjm3AaLaJ3UbIYCTnIWIevJa73UjIFyTuYvjxU0YFADUUUU
Message-Id: <4BB1A676.045482.14532@m12-11.163.com>
Date: Tue, 30 Mar 2010 15:21:26 +0800 (CST)
X-CM-SenderInfo: bdqwlmqrtzqiywtou0bp/1tbiJRCjNECeIdQRzgAAsW


--==========54535aavfgq====
Content-Type: text/plain; charset=gb2312

本邮件是测试的,测试日期:2010-03-30 15:23:11
--==========54535aavfgq====
Content-Type: application/octet-stream; name="附件名.exe"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="附件名.exe"

AAEAAFN0YW5kYXJkIEpldCBEQgAAAAAAtW4DYmAJwlXpqWdyQD8AnH6fkP+F
mjHFebrtMLzfzJ1i2eDL00H7irxOhvvsN11EnPrGXijmE7aKYFSUezbrV9+x
d/QTQ8+vsTM0YXlbkrV8KgXxfJkBG5j9Ek9KlGw+YCZflfjQiSSFZ8YfJ0TS
7s9l7f8Hx0aheBYM7ektAAAAAAAAAA
AAAAAAAAAA
AAAAAAAAAA
AAAAAAAAAA
AAAAAAAAAA
AAAAAAAAAA
AAAAAAAAAA
AAAAAAAAAA
AQAAAAwAAQQIAAQAAQAAAAwAAQQJAAQAAAAAAAwAAQQKAAQAqAMAAA==
--==========54535aavfgq====--
经分析可知邮件的附件名是:附件名.exe,其中蓝色文字部分就是附件的具体数据。

  fs := TStringStream.Create('');
  for k := 附件起始行 to  附件结束行 do  //这样分行解码,自然就去掉换行回车符的 ) : 
  begin
    a := Base64Decode(list.Strings[k]);//本邮件附件是经base64编码的,所以相应地解码
    fs.WriteString(a);
  end;
  ff := TFileStream.Create(ExtractFileDir(Application.ExeName) + '\temp.exe',  fmCreate);
  fs.Position := 0;
  ff.CopyFrom(fs, fs.Size);
  ff.Free;
  fs.Free;
这样就可得到附件temp.exe了。

8、收工

syncp3cl1.QuitSync;//退出连接
Google
 
本站原创作品,未经作者许可,严禁任何方式转载;转载作品,如果侵犯了您的权益,请联系我们
龙脉加密锁 15元起 Grid++Report 报表 申请支付@网
 相关文章
没有相关文章
相关评论
共有评论4条 当前显示最后3条评论
doorkey 2010/4/1 17:07:15

我用INDY接收的邮件上100M的邮件都可以。

ICS和INDY各有千秋。
changhui_china 2010/6/30 10:48:19
能收不是问题,
能做出发送大邮件的程序吗?
dotindeed 2010/8/12 9:37:48
ICS应该自带解码功能吧
我要发表评论 查看全部评论
 
  DELPHI盒子版权所有 1999-2012 V3.01 沪ICP备05001939号 更新RSS列表