诸位高手:不通过自己邮件所在的SMTP服务器,直接发送到对方的电子信箱中,如何做到?

qqfqqf 2002-03-13 12:18:42
不通过自己邮件所在的SMTP服务器,直接发送到对方的电子信箱中,如何做到?
...全文
2690 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
sharkhu 2002-03-14
  • 打赏
  • 举报
回复
是要查询对方邮件域名的MX纪录,然后用smtp command直接与对方的smtp server 交互就可以了。
Iwant 2002-03-14
  • 打赏
  • 举报
回复
接受 Email 要个 屁的认证 啊,要不怎么接受邮件。
BCB 2002-03-13
  • 打赏
  • 举报
回复
上面的一大段程序,仍要借助SMTP.
查到对方SMTP IP也没用,对方的SMTP也可能要身份论证的
kimryo 2002-03-13
  • 打赏
  • 举报
回复
"你的smtp服务器投递邮件的过程和你直接投递的过程是一致的"

你用过OE没,看看你的账号管理下面是不是有一个我的服务器需要验证?
在HELLO命令之后直接用Base64加密你的username和password再send就OK了。

至于你登陆到服务器的mail发送管理页面的话,session早已记录下你的password,发送时直接加上password就行了。

你要用哪个SMTP Server当然得有它的地址才行。
fscyber 2002-03-13
  • 打赏
  • 举报
回复
直接用对方邮箱的smtp不久行了吗?可能我的理解有错误,你能说得清楚些吗?
qqfqqf 2002-03-13
  • 打赏
  • 举报
回复
我的意思就是如何查到对方smtp服务器的ip,直接发给对方?
shornmao 2002-03-13
  • 打赏
  • 举报
回复
to kimryo(轻*轻*前*轻*重) :

不过这个功能不大现实,现在好多SMTP Server都需要Authorize,除非你知道别人的密码。。。

你又错了,你的smtp服务器投递邮件的过程和你直接投递的过程是一致的,你难道指望你的smtp服务器直到所有邮件地址的用户名和密码吗?

smtp服务器需要认证,仅仅针对外发邮件有效,对于接受本地邮件,无需认证。否则导致根本无法完成中继投递。那是email的噩梦。
shornmao 2002-03-13
  • 打赏
  • 举报
回复
to kimryo(轻*轻*前*轻*重) :

用gethostbyname(smtp.etang.com)这个方法,那你可要知道对方的smtp主机名才可以啊,大多数邮件地址都是类似xx@etang.com啊。
必须查询dns中的mx记录,采用它才是正确的方法,作为第二种手段,才是直接查找主机名,因为一部分用户的邮件地址可能是以主机名取代域名的。
但是无论如何,SMTP标准两种邮件地址都是合法的。
ddeng 2002-03-13
  • 打赏
  • 举报
回复
得看你要使的SMTP服务器接受你的邮件地址不
kimryo 2002-03-13
  • 打赏
  • 举报
回复
这是用socket发mail的过程,随便看看吧,如果有问题请看SMTP 的RFC文档。

不过这个功能不大现实,现在好多SMTP Server都需要Authorize,除非你知道别人的密码。。。
kimryo 2002-03-13
  • 打赏
  • 举报
回复
WSADATA wsa;
CString res,str;
WSAStartup(0x0101,&wsa);
struct sockaddr_in addr;
SOCKET s;
struct hostent* p=gethostbyname(smtp.etang.com);//prase Domain to IP
if(!p){
pc->m_status+="\r\nError get IP.";
pc->GetDlgItem(IDC_STATUS)->SetWindowText(pc->m_status);
goto out;
}
s=socket(AF_INET,SOCK_STREAM,0);
addr.sin_family=AF_INET;
addr.sin_port=htons(25);
addr.sin_addr.s_addr = *(unsigned long*)p->h_addr;
if(connect(s,(struct sockaddr*)&addr,sizeof(addr))==SOCKET_ERROR){
pc->m_status+="\r\nError in connect to smtp server.";
goto out;
}
str="HELO "+pc->m_Server+"\r\n";//Say HELLO to SMTP Server.
if(send(s,(LPCSTR)str,str.GetLength(),0)==SOCKET_ERROR){
pc->m_status+="\r\nError in send HELO command.";
goto out;
}

recv(s,res.GetBufferSetLength(INFOLEN),INFOLEN,0);
pc->m_status+="\r\n"+res;
str="MAIL From: <"+soimeone@etang.com+">\r\n";//Tell the sender of this mail.
if(send(s,(LPCSTR)str,str.GetLength(),0)==SOCKET_ERROR){
pc->m_status+="\r\nError in MAIL FROM command";
goto out;
}
res.Empty();
recv(s,res.GetBufferSetLength(INFOLEN),INFOLEN,0);
pc->m_status+="\r\n"+res;
str="RCPT TO: <"+pc->m_To+">\r\n";//
if(send(s,(LPCSTR)str,str.GetLength(),0)==SOCKET_ERROR){
pc->m_status+="\r\nError in RCPT TO command";
//pc->GetDlgItem(IDC_STATUS)->SetWindowText(pc->m_status);
goto out;
}
res.Empty();
recv(s,res.GetBufferSetLength(INFOLEN),INFOLEN,0);
pc->m_status+="\r\n"+res;
str="DATA\r\n";//Start to transfer mail body.
if(send(s,(LPCSTR)str,str.GetLength(),0)==SOCKET_ERROR){
pc->m_status+="\r\nError in DATA command";
goto out;
}
res.Empty();
recv(s,res.GetBufferSetLength(INFOLEN),INFOLEN,0);
pc->m_status+="\r\n"+res;
if(send(s,(LPCSTR)pc->m_Content,pc->m_Content.GetLength(),0)==SOCKET_ERROR){
pc->m_status+="\r\nError in send mail body";
goto out;
}

res.Empty();
recv(s,res.GetBufferSetLength(INFOLEN),INFOLEN,0);
pc->m_status+="\r\n"+res;
send(s,"\r\n.\r\n",5,0);
str="VRFY "+pc->m_query+"\r\n";
send(s,str,str.GetLength(),0);
res.Empty();
recv(s,res.GetBufferSetLength(INFOLEN),INFOLEN,0);
res="HELP";
send(s,res.GetBuffer(res.GetLength()),res.GetLength(),0);
res.Empty();
recv(s,res.GetBufferSetLength(300),300,0);

send(s,"QUIT\r\n",6,0);
closesocket(s);
WSACleanup();



out:
pc->GetDlgItem(IDC_BTNSTOP)->EnableWindow(FALSE);
pc->GetDlgItem(IDC_BTNSEND)->EnableWindow(TRUE);
icefirewx 2002-03-13
  • 打赏
  • 举报
回复
indy里有个现成的例子
BCB 2002-03-13
  • 打赏
  • 举报
回复
那你得自已编个SMTP功能的程序了
icefirewx 2002-03-13
  • 打赏
  • 举报
回复
kimryo(轻*轻*前*轻*重)

死猫说得很对啊。你自己理解错了
sharkhu 2002-03-13
  • 打赏
  • 举报
回复
我已经写好了。

http://srain.chinahsp.com/download/qymail.zip
fscyber 2002-03-13
  • 打赏
  • 举报
回复
要验证身份的smtp服务器其实是用了,esmtp协议的,要通过它发邮件的话并不一定要知道什么密码的,哪个所谓的密码其实是esmtp服务器发给你的,是经过一定算法算出的,详细是怎样我没有研究过,还是多看看rfc文档吧,要不用你用foxmail发信到要esmtp认证的服务器,然后用netxray捕捉数据包,看一下内容,应该对你有帮助

13,825

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧