在vc在编写代码发送邮件
BOOL CMyEMAIL::OnInitDialog()
{
...//省略部分代码
char recvbuff[3]={0};//定义接收缓冲区
sockaddr_in addr;//定义网络地址结构对象
addr.sin_family=AF_INET;//为地址结构中的成员赋值
addr.sin_port=htons(25);
host=gethostbyname("mail.163.com");//从服务器名获取主机地址
addr.sin_addr.S_un.S_addr=inet_addr(host->h_addr_list[0]);
//设置smtp服务器的地址
s=::socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);//创建套接字
if(connect(s,(sockaddr*)&addr,sizeof(addr)))//连接SMTP服务器
{
recv(s,(LPSTR)recvbuff,3,0);//接收响应码前三位数字
if(recvbuff[0]==220)//提示用户服务器就绪
{
CString data="Data: Tue,04 Feb 2009 21:18:03+0800\r\n";
CString from="MAIL FROM:lymlrl@163.com\r\n";
CString reply="Reply-to: lymlrl@sina.com.cn\r\n";
CString send=" Sender: lymlrl@126.com, wexs@163.com,wen@126.com,wuy@sina.
com.cn\r\n";
CString to=" RCPT TO:lymlrl@126.com,data@yahoo.com.cn,ssj@sina.com.cn\r\n";
CString subject=" Subject: 新年快乐! ";
CString text="祝大家新年快乐! \r\n";
text+="程序员俱乐部 lymlrl\r\n";
char sendmessage[]={data.GetBuffer(1),
from.GetBuffer(1),reply.GetBuffer(1),
send.GetBuffer(1),to.GetBuffer(1),
"DATA\r\n",subject.GetBuffer(1),
Text.Getbuffer(1),"QUIT\r\n","\0"}
send(s,&sendmessage,sizeof(sendmessage),0);
MessageBox("邮件发送成功! ");
}
}
}
上面的代码中
首先使用套接字连接SMTP服务器
连接成功后
调用函数接收服务器的响应
如果响应码为220
则表示服务器准备就绪
可以发送邮件到服务器
接着客户端构造邮件内容
在向服务器发送邮件实际内容之前
应首先发送"DATA\r\n"通知服务器准备接收数据
邮件内容发送完毕以后还需要向服务器发送"QUIT\r\n"
表示结束会话
注意:在构造邮件时,在每句字段完成后均加上"\r\n"
并且在整个邮件构造完毕以后需要加上字符"\0"
表示发送的数据结束