• 全部
  • Windows SDK/API
  • 基础类
  • ActiveX
  • 数据库及相关技术
  • 网络及通讯开发
  • VCL组件使用和开发
  • 问答

如何不用smtp服务器发邮件。。。。????

COKING 2002-06-05 02:19:30
不要告诉我需要第三的程序把自己的机器变成smtp服务器哦!
要用程序欺骗pop服务器--“我就是smtp服务器",不知道怎么做。高手请指点一二了。socket 也可以。。。
...全文
51 点赞 收藏 13
写回复
13 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
COKING 2002-06-06
mark
回复
COKING 2002-06-06
协议:smtp 协议:???
本机----------->SMTP服务器-——————>pop服务器

SMTP服务器与pop服务器是什么协议呢?
回复
BCB 2002-06-05
是呀,提问者的题目就是:如何不用smtp服务器发邮件。。。。????
当然就不是普通的发信程序了
回复
bcb_fans 2002-06-05
嘿嘿,不好意思,理解力太差.
回复
bcb_fans 2002-06-05
嘿嘿,不好意思,理解力太差.
回复
yhec 2002-06-05
to BCB_FANS(四大名捕之追杀令):
提问者明显要求不是经别的SMTP服务器发送给POP信箱,
即自已的程序就是SMTP发送程序或SMTP服务器
正常的发信过程:
发送软件--->SMTP服务器----->Pop3服务器
提问者的要求是:
自已的程序------->pop3服务器
很明显,提问者的意思是如何自已编一个SMTP服务器程序,
当然不能借助于别人的SMTP服务器了( 如smtp.sina.com)
回复
shawnyau 2002-06-05


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;

**********************
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.
回复
bcb_fans 2002-06-05
上面说错了,应该是SMTP服务器.

比如123@sina.com,那应该向smtp.sina.com发送,说白了就是普通的邮件编程.
回复
BCB 2002-06-05
你的要求其实就是如何自已编一个SMTP服务器程序,不会很简单,也不会太难,涉及Socket 文本交互了,首先要懂SMTP协议
回复
bcb_fans 2002-06-05
想做"特快专递"啊! 直接查找接收人的POP3服务器地址,然后向这个地址发送就可以了.

比如向123@sina.com发送一封邮件,直接查找sina.com的地址(gethostbyname)
然后向它发就可以了.

以上意见仅供参考,具体怎么发我也不知道,因为我没作过,无法提供例子.
回复
「已注销」 2002-06-05
是的

好象索易实现了无SMTP群发邮件 很爽的

具体原理我也不知道

@_@
回复
RedGuest 2002-06-05
看stmp协议吧
<tcp/ip互联>中有一卷讲了一下的
hello remote_host
mail to <remote_mail_address>
mail from <local_mail_address>
data:


<rt><lf>
<rt><lf>

具体不太清楚:)
回复
dycdyc123 2002-06-05
我不知道!

帮你推推托!◎
回复
相关推荐
发帖
C++ Builder
创建于2007-08-02

1.3w+

社区成员

C++ Builder相关内容讨论区
申请成为版主
帖子事件
创建了帖子
2002-06-05 02:19
社区公告
暂无公告