菜鸟以前用delphi作过不需验证的发邮件程序,不知道用vc能做吗?怎么做啊?或着哪有相关的源代码。

feilong2003 2003-10-17 08:20:45
菜鸟以前用delphi作过不需验证的发邮件程序,不知道用vc能做吗?怎么做啊?或着哪有相关的源代码。
...全文
381 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
newlili 2003-10-28
  • 打赏
  • 举报
回复
SMTP服务器是固定的只是为了简单。
要让他灵活把那里换成个变量就可以了吧。
要是自己发信那不得自己建邮件服务器呀。
简单的发个邮件有这个必要吗?
检查SMTP服务器返回值有必要的话可以加。
简单一点的话就不用加了。
加一个也简单。
知道返回值的含义就可以写了。
上面的代码我相信也不是万能的。
肯定有一邮件服务器不支持。
sevencat(七猫) 兄: 什么时候给我个万能的邮件发送源代码行吗?
我承认你比我了解得多。
因为我才写这样的程序不久。
只是看你说sina.com不行。
不服气,试了一下,结果可以。
sevencat 2003-10-28
  • 打赏
  • 举报
回复
我不用试,你的代码这么简单,不用试我也知道有用。

你看你用的是固定的一个SMTP服务器。
m_SmtpServer.Connect("smtp.163.com",25);//连接服务器
其实就相当于你将自己的邮箱地址搞成了发信机。
并不是你发信,还是人家发送。
还有你读的时候没检查最后两个是不是0x0d,0x0a,大部分服务器这是正确的,少部分服务器这会出问题。


你的这段代码现在有用,只是一种偷机取巧的方法。

而RFC里面的SMTP发信服务器不是这样的。
FOXMAIL中的特快专递也不依赖于特定的SMTP服务器。

还有你没有检查SMTP服务器的返回值,没有考虑中间有可能会中断的情况。在一个给客户用的程序里,这些都是要考虑的。

newlili 2003-10-27
  • 打赏
  • 举报
回复
楼主你试了没有。
我的代码行不行。
你发句话撒!
newlili 2003-10-27
  • 打赏
  • 举报
回复
我用sina.com的邮箱试了。
可以的。
不相信的可以自己试试。
用户名和密码必须是base64编码的哟!
newlili 2003-10-26
  • 打赏
  • 举报
回复
to:七猫:
我上面的程序你试了没有呀。
都没有试就说我的不行要不行。
为什么不试一下再来说呢。
我刚试了可以。
要不你再试一下。
不行再来找我!
sevencat 2003-10-26
  • 打赏
  • 举报
回复
有时候你还要处理更多的东西,比如有的要求要用BASE64来搞,
sevencat 2003-10-26
  • 打赏
  • 举报
回复
to:楼上,你这个要特定的SMTP服务器才行的。而实际上假如服务器不支持的话,就不行了。

一般的SMTP的方法是。

假如是bboy@sina.com
这种邮件格式,先查DNS上的sina.com的MX记录,
一般DNS服务器会返回好几个MX服务器给你,你根据那个参考数判定到底这个邮件发到哪个服务器好点。
然后就是你上面的,假如要保险一点,还要先查询一下目标服务器上有没有bboy这个用户名。
然后才根据RFC正式开始流程。

所以我觉得很麻烦,但是FOXMAIL的特快就是这么发的。


newlili 2003-10-25
  • 打赏
  • 举报
回复
怎么谢我!前不久才写完好的!
CSocket m_SmtpServer;
AfxSocketInit();
m_SmtpServer.Create();//创建套接字
m_SmtpServer.Connect("smtp.163.com",25);//连接服务器

TCHAR rec[30];
m_SmtpServer.Receive(rec, 30);

char chostname[80];
gethostname(chostname, 80);
CString strBuf;
strBuf.Format("HELO %s\r\n",chostname);//发送Hello
m_SmtpServer.Send(strBuf, strlen(strBuf));
m_SmtpServer.Receive(rec, 30);

strBuf.Format("AUTH LOGIN\r\n");//身份验证
m_SmtpServer.Send(strBuf, strlen(strBuf));
m_SmtpServer.Receive(rec, 30);

strBuf.Format("username\r\n");//发送用base64编码过的用户名
m_SmtpServer.Send(strBuf, strlen(strBuf));
m_SmtpServer.Receive(rec, 30);

strBuf.Format("password\r\n");发送用base64编码过的密码
m_SmtpServer.Send(strBuf, strlen(strBuf));
m_SmtpServer.Receive(rec, 30);

strBuf.Format("MAIL From: <%s>\r\n", "username@163.com"); 发送mail from
m_SmtpServer.Send(strBuf, strlen(strBuf));
m_SmtpServer.Receive(rec, 30);

strBuf.Format("RCPT TO: <%s>\r\n", "username@163.net"); 发送rctp to
m_SmtpServer.Send(strBuf, strlen(strBuf));
m_SmtpServer.Receive(rec, 30);

strBuf.Format("DATA\r\n");//开始发送邮件
m_SmtpServer.Send(strBuf, strlen(strBuf));
m_SmtpServer.Receive(rec, 30);

CTime m_time;
m_time=m_time.GetCurrentTime();
CString sDate;
sDate=m_time.Format("%a, %d %b %y %H:%M:%S %Z");
CString sHeader;
sHeader.Format( "Date: %s\r\n"\
"From: %s\r\n"\
"To: %s\r\n"\
"Subject: %s\r\n\r\n",
(LPCTSTR)sDate,
(LPCTSTR)"username@163.com",
(LPCTSTR)"username1983@163.net",
(LPCTSTR)"好友记录");


strBuf.Format("%s\r\n", sHeader);//发送邮件头
m_SmtpServer.Send(strBuf, strlen(strBuf));

strBuf.Format("%s\r\n", lpdata);//邮件正文
m_SmtpServer.Send(strBuf, strlen(strBuf));

strBuf.Format("\r\n.\r\n");//邮件结束
m_SmtpServer.Send(strBuf, strlen(strBuf));
m_SmtpServer.Receive(rec, 30);
CString str=rec;

strBuf.Format("QUIT\r\n");
m_SmtpServer.Send(strBuf, strlen(strBuf));//关闭与服务器的连接
m_SmtpServer.Receive(rec, 30);

m_SmtpServer.Close();//关闭套接字
str+=rec;
AfxMessageBox(str+"\n发送成功");
sevencat 2003-10-25
  • 打赏
  • 举报
回复
没有SMTP类,主要是用这个来实现的。

自己做很麻烦,主要在DNSQUERY那块,没有现在的函数可用(2K下有)
要自己写,还有发送的时候根据协议来就可以了。

我不知道你以前是怎么做的。
yintongshun 2003-10-17
  • 打赏
  • 举报
回复
CString nametitle="name is ";
CString emailaddress="\n email address is ";
CString returnchar="\n";

UpdateData( TRUE );

if(m_name.IsEmpty() || m_email.IsEmpty())
{
MessageBox("[姓名] 和 [Email] 不能空!","请填写",MB_ICONWARNING|MB_OK);
return;
}

CWinThread* m_Progress=AfxBeginThread(RUNTIME_CLASS(CProgressWin));

CSMTP smtp( "" );
CMailMessage msg;

smtp.SetServerProperties( m_smtp );
msg.m_sFrom = m_from;
msg.AddMultipleRecipients( m_to );
msg.m_sSubject = m_subject+m_name;

msg.m_sBody = nametitle + m_name + emailaddress + m_email + returnchar + m_body;

//AfxMessageBox(msg.m_sBody);
if( !smtp.Connect() )
{
m_Progress->PostThreadMessage(WM_QUITTHREAD,0,0);
AfxMessageBox( smtp.GetLastError() );

return;
}
if( !smtp.SendMessage( &msg ) )
{
m_Progress->PostThreadMessage(WM_QUITTHREAD,0,0);
AfxMessageBox( smtp.GetLastError() );
smtp.Disconnect();

return;
}
smtp.Disconnect();
m_Progress->PostThreadMessage(WM_QUIT,0,0);
//m_Progress->PostThreadMessage(WM_QUITTHREAD,0,0);
GetFocus();
MessageBox("您的建议已经发送出去!\n\n谢谢您的支持.","发送成功",MB_OK|MB_ICONINFORMATION);
feilong2003 2003-10-17
  • 打赏
  • 举报
回复
大侠的代码菜鸟运行后出现如下错误,请您指教
--------------------Configuration: email - Win32 Debug--------------------
Compiling resources...
Compiling...
emailDlg.cpp
C:\email\emailDlg.cpp(191) : error C2653: 'CProgressWin' : is not a class or namespace name
C:\email\emailDlg.cpp(191) : error C2065: 'classCProgressWin' : undeclared identifier
C:\email\emailDlg.cpp(193) : error C2065: 'CSMTP' : undeclared identifier
C:\email\emailDlg.cpp(193) : error C2146: syntax error : missing ';' before identifier 'smtp'
C:\email\emailDlg.cpp(193) : error C2065: 'smtp' : undeclared identifier
C:\email\emailDlg.cpp(194) : error C2065: 'CMailMessage' : undeclared identifier
C:\email\emailDlg.cpp(194) : error C2146: syntax error : missing ';' before identifier 'msg'
C:\email\emailDlg.cpp(194) : error C2065: 'msg' : undeclared identifier
C:\email\emailDlg.cpp(196) : error C2228: left of '.SetServerProperties' must have class/struct/union type
C:\email\emailDlg.cpp(196) : error C2065: 'm_smtp' : undeclared identifier
C:\email\emailDlg.cpp(197) : error C2228: left of '.m_sFrom' must have class/struct/union type
C:\email\emailDlg.cpp(197) : error C2065: 'm_from' : undeclared identifier
C:\email\emailDlg.cpp(198) : error C2228: left of '.AddMultipleRecipients' must have class/struct/union type
C:\email\emailDlg.cpp(198) : error C2065: 'm_to' : undeclared identifier
C:\email\emailDlg.cpp(199) : error C2228: left of '.m_sSubject' must have class/struct/union type
C:\email\emailDlg.cpp(199) : error C2065: 'm_subject' : undeclared identifier
C:\email\emailDlg.cpp(199) : error C2666: '+' : 4 overloads have similar conversions
C:\email\emailDlg.cpp(201) : error C2228: left of '.m_sBody' must have class/struct/union type
C:\email\emailDlg.cpp(201) : error C2065: 'm_body' : undeclared identifier
C:\email\emailDlg.cpp(201) : error C2666: '+' : 4 overloads have similar conversions
C:\email\emailDlg.cpp(204) : error C2228: left of '.Connect' must have class/struct/union type
C:\email\emailDlg.cpp(206) : error C2065: 'WM_QUITTHREAD' : undeclared identifier
C:\email\emailDlg.cpp(207) : error C2228: left of '.GetLastError' must have class/struct/union type
C:\email\emailDlg.cpp(211) : error C2228: left of '.SendMessageA' must have class/struct/union type
C:\email\emailDlg.cpp(214) : error C2228: left of '.GetLastError' must have class/struct/union type
C:\email\emailDlg.cpp(215) : error C2228: left of '.Disconnect' must have class/struct/union type
C:\email\emailDlg.cpp(219) : error C2228: left of '.Disconnect' must have class/struct/union type
Generating Code...
Compiling...
email.cpp
Generating Code...
Error executing cl.exe.

email.exe - 27 error(s), 0 warning(s)

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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