您的位置:首页 > 理论基础 > 计算机网络

【C++】【网络】利用Socket 编写SMTP 发送邮件程序

2009-12-02 22:11 555 查看
#include <winsock.h>
#include <stdio.h>
#include <string>
#include <iostream>
using namespace std;
#define WSWENS MAKEWORD(2,0)
int main()
{
sockaddr_in sin;
WSADATA wsadata;
if(WSAStartup(WSWENS, &wsadata) !=0)
cout<<"startup failed"<<endl;

SOCKET s = socket(PF_INET,SOCK_STREAM,0);
memset(&sin, 0, sizeof(sin));
sin.sin_family = AF_INET;
sin.sin_port = htons(25);
hostent* hptr = gethostbyname("smtp.sina.com");
memcpy(&sin.sin_addr.S_un.S_addr, hptr->h_addr_list[0], hptr->h_length);
printf("IP of smpt.sina.com is : %d:%d:%d:%d",
sin.sin_addr.S_un.S_un_b.s_b1,
sin.sin_addr.S_un.S_un_b.s_b2,
sin.sin_addr.S_un.S_un_b.s_b3,
sin.sin_addr.S_un.S_un_b.s_b4);

cout << endl;
if(connect(s, (sockaddr*)&sin, sizeof(sin)))
{
cout << "connect failed" << endl;
exit(0);
}
else
{
cout << "connect success" << endl;
}

char bufferresv[10240];
int len = recv(s, bufferresv, 10240, 0);
bufferresv[len]=0;
printf("%s",bufferresv);
cout << endl;
// send "helo ehlo"
char bufferHello[] = "helo ehlo/r/n";
cout << "helo ehlo..." << endl;
send(s, bufferHello, strlen(bufferHello), 0);
len = recv(s, bufferresv, 10240, 0);
bufferresv[len]=0;
printf("%s",bufferresv);
cout << endl;
// send "auth login"
char bufferLogin[] = "auth login/r/n";
cout << "auth login..." << endl;
send(s, bufferLogin, strlen(bufferLogin),0);
len = recv(s, bufferresv, 10240, 0);

bufferresv[len]=0;
printf("%s",bufferresv);

cout << endl;
// send "username" send "psw"
char bufferUserName[] = "c3VubnlrYWhv/r/n";
char bufferpsw[] = "MjAwNzE2MTA0MDk=/r/n";

cout << "input username...." << endl;
send(s,bufferUserName,strlen(bufferUserName),0);
len = recv(s, bufferresv, 10240, 0);
bufferresv[len]=0;
printf("%s",bufferresv);
cout << endl;
cout << "input password..." << endl;
send(s,bufferpsw,strlen(bufferpsw),0);
len = recv(s, bufferresv, 10240, 0);
bufferresv[len]=0;
printf("%s",bufferresv);
cout << endl;
// mail from:<sunnykaho@sina.com>
char bufferMailFrom[] = "mail from:<sunnykaho@sina.com>/r/n";
cout << "mail from:<sunnykaho@sina.com>..." << endl;
send(s, bufferMailFrom, strlen(bufferMailFrom), 0);
len = recv(s, bufferresv, 10240, 0);
bufferresv[len]=0;
printf("%s",bufferresv);
cout << endl;
// rcpt to:<kaholi@qq.com>
char bufferRcptTo[] = "rcpt to:<kaholi@qq.com>/r/n";
cout << "rcpt to:<kaholi@qq.com>..." << endl;
send(s, bufferRcptTo, strlen(bufferRcptTo), 0);
len = recv(s, bufferresv, 10240, 0);
bufferresv[len]=0;
printf("%s",bufferresv);
cout << endl;

// data
char bufferData[] = "data/r/n";
cout << "data..." << endl;
send(s, bufferData,strlen(bufferData), 0);
len = recv(s, bufferresv, 10240, 0);
bufferresv[len]=0;
printf("%s",bufferresv);
cout << endl;
//
char bufferTo[] = "to:kaholi@qq.com/r/n";
char bufferFrom[] = "from:sunnykaho@sina.com/r/n";
cout << "to:kaholi@qq.com... " << endl;
send(s, bufferTo, strlen(bufferTo),0);
cout << "from:sunnykaho@sina.com..." << endl;
send(s, bufferFrom, strlen(bufferFrom), 0);

char bufferSubject[] = "subject:hello from kaho/r/n";
cout << "subject:hello from kaho..." << endl;
send(s, bufferSubject, strlen(bufferSubject), 0);
char bufferPoint[] = "./r/n";
send(s, bufferPoint, strlen(bufferPoint), 0);
len = recv(s, bufferresv, 10240, 0);
bufferresv[len]=0;
printf("%s",bufferresv);
cout << endl;
}


以上代码感谢超哥像春哥般的光环照耀下做出来的...

如果想引用博客内容,请在明显的地方注释清楚转帖并且包含我们原帖的地址引用,谢谢,如果有任何问题,可以在日志下面留言。我尽力解答。

原文网址:http://blog.csdn.net/sunnykaho/archive/2009/12/02/4927178.aspx
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: