一百分送你,怎样在vC中发eml

时空隧道 2002-05-15 04:24:37
一百分送你,怎样在vC中发eml
...全文
77 点赞 收藏 11
写回复
11 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
时空隧道 2002-05-15
这分怎么给呀,为什么最大只能给一百分呀
回复
时空隧道 2002-05-15
怎么这么急呀,谁说不用你回答了,说得对者我多加点分就是,大家探讨没什么大不了呀
回复
xuying 2002-05-15
发送email主要使用SMTP协议,接收则使用pop3协议。
SMTP协议的是由RFC 821, RFC 1869(扩展) 和 RFC 2554(认证扩展) 定义的。

SMTP主要由一些服务原语组成,通过它在客户机和服务器间交互,发送邮件。
如程序用到的"HELO", "MAIL FORM", "RECP TO", "DATA"
详细的信息,还包括一些编码格式等,你应该看这些RFC
回复
kkk16 2002-05-15

看来不用我再回答了。
回复
时空隧道 2002-05-15
to xuyiang看了你的源程序,大致得到有如下认识,发一个eml文件,主要是协议的问题,可以祥细说明一下发eml相关协议呢
回复
xuying 2002-05-15
谢谢:)
回复
时空隧道 2002-05-15
to xuying就冲你这爽快我也要给你100分
回复
xuying 2002-05-15
我有一个vc的例子,先给你看发送的部分。需要的话给我来信xuying@nlsde.buaa.edu.cn
void CChildFrame::OnSendMail()
{
int nLineCount;
CWaitCursor wc;
CEditView* pView;
CMailClientDoc* pDocument;
CSocket socket;
CString str, strResponse;

VERIFY (NULL != (pView = (CEditView *)m_wndSplitter.GetPane(1, 0)));
VERIFY (NULL != (pDocument = (CMailClientDoc *)pView->GetDocument()));

TRY
{
socket.Create();
if (socket.Connect(pDocument->m_strSMTP, pDocument->m_uSMTPPort))
{
CSocketFile file(&socket);
CArchive arIn(&file, CArchive::load | CArchive::bNoFlushOnDelete);
CArchive arOut(&file, CArchive::store | CArchive::bNoFlushOnDelete);

while (TRUE)
{
// SMTP server ready
arIn.ReadString(strResponse);
if ("220" != strResponse.Left(3)) break;

// HELP command
//arOut.WriteString("HELP\r\n"); arOut.Flush();
//arIn.ReadString(strResponse);

// HELO command
// str.Format("HELO %s\r\n", (LPCSTR)pDocument->m_strEMail.Mid
// (pDocument->m_strEMail.Find('@') + 1));
CString strTemp;
gethostname(strTemp.GetBuffer(256), 256);
strTemp.ReleaseBuffer();
str.Format("HELO %s\r\n", (LPCSTR)strTemp);

arOut.WriteString(str); arOut.Flush();
arIn.ReadString(strResponse);
if ("250" != strResponse.Left(3)) break;

// MAIL FROM command
str.Format("MAIL FROM:<%s>\r\n", (LPCSTR)(LPCSTR)pDocument->m_strEMail);
arOut.WriteString(str); arOut.Flush();
arIn.ReadString(strResponse);
if ("250" != strResponse.Left(3)) break;

int nLength, n;
LPTSTR lp;
CString strBuffer;

nLineCount = pView->GetEditCtrl().GetLineCount();
for (n = 0; n < nLineCount; ++ n)
{
nLength = pView->GetEditCtrl().LineLength(n);
lp = strBuffer.GetBuffer(nLength + 1);
pView->GetEditCtrl().GetLine(n, lp);
if (0 == strnicmp(lp, "To: ", 4))
{
lp[nLength] = 0;
str = &lp[4];
break;
}
}

// RCPT TO command
str = "RCPT TO:<" + str + ">\r\n";
arOut.WriteString(str); arOut.Flush();
arIn.ReadString(strResponse);
strResponse = strResponse.Left(3);
if (("250" != strResponse) && ("251" != strResponse)) break;

// DATA command
arOut.WriteString("DATA\r\n"); arOut.Flush();
arIn.ReadString(strResponse);
strResponse = strResponse.Left(3);
if (("250" != strResponse) && ("354" != strResponse))break;

// Start mail input: end with .<CRLF>
for (n = 0; n < nLineCount; ++ n)
{
nLength = pView->GetEditCtrl().LineLength(
pView->GetEditCtrl().LineIndex(n));
lp = strBuffer.GetBuffer(nLength + 2);
nLength = pView->GetEditCtrl().GetLine(n, lp, nLength);
lp[nLength] = 0;
strBuffer.ReleaseBuffer();

// . -> ..
// .. -> ...
if ((!strBuffer.IsEmpty()) && ('.' == strBuffer[0]))
strBuffer = '.' + strBuffer;

str = strBuffer + "\r\n";
arOut.WriteString(str);
}
arOut.WriteString(".\r\n"); arOut.Flush();
arIn.ReadString(strResponse);
if ("250" != strResponse.Left(3)) break;

// QUIT command
arOut.WriteString("QUIT\r\n"); arOut.Flush();
arIn.ReadString(strResponse);

return;
}
} else
{
str.Format("SMTP Host %s can't reach.", (LPCSTR)pDocument->m_strSMTP);
AfxMessageBox(str);
return;
}
}
CATCH_ALL(e)
{
e->Delete();
}
END_CATCH_ALL

AfxMessageBox("Connection is reset.");
return;
}
回复
masterz 2002-05-15
http://www.codeguru.com/cgi-bin/bbs/wt/showpost.pl?Board=vc&Number=228550&page=&view=&sb=
回复
ytweiwei 2002-05-15
去www.vckbase.com上找找吧,现成的代码一大堆 :)
回复
suduan 2002-05-15
ShellExecute(m_hWnd, NULL, "mailto:aaa@yahoo.com.cn", NULL, NULL, NULL);
回复
相关推荐
发帖
VC/MFC
创建于2007-09-28

1.5w+

社区成员

VC/MFC相关问题讨论
申请成为版主
帖子事件
创建了帖子
2002-05-15 04:24
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……