當前位置:名人名言大全網 - 短信平臺 - Xcode 編寫的程序,程序運行完,給發個電子郵件,求幫助

Xcode 編寫的程序,程序運行完,給發個電子郵件,求幫助

/*

純c郵件程序,

默認為163郵箱服務器,可修改,

默認需要手動輸入帳號及密碼,

修改變量為常量即可實現自動使用固定帳號登錄服務器,

修改接受郵箱帳號可以向指定郵箱發送郵件

嵌入其他c語言代碼中可實現c郵件函數

*/

#include <windows.h>

#include <winsock.h>

#include <assert.h>

#include <iostream>

#include <string>

#include <stdio.h>

#include <ctime>

#pragma comment(lib,"WS2_32.lib")

using namespace std;

//base64編碼

string Base64Encode(LPCTSTR lpszSrc);

//base64解碼

string Base64Decode(LPCTSTR lpszSrc);

int main()

{

//1.首先需要連接郵件服務器 這裏用socket 郵件服務器端口 25

WSADATA Wsa;

//進行WINSOCK的設置

WSAStartup(0x0101,&Wsa);

SOCKET s = socket(AF_INET,SOCK_STREAM,IPPROTO_IP);

SOCKADDR_IN sin;

LPHOSTENT lphost = gethostbyname("smtp.163.com");//這裏是用網易的郵件服務器 也可以修改

if(lphost)

sin.sin_addr.s_addr = ((LPIN_ADDR)lphost->h_addr)->s_addr;

else

{

printf("%s\n","獲取地址失敗");

return 1;

}

sin.sin_family = AF_INET;

//註意郵件服務器的偵聽端口 25

sin.sin_port = htons(IPPORT_SMTP);

//連接服務器

if(connect(s,(LPSOCKADDR)&sin,sizeof(sin))==SOCKET_ERROR)

{

printf("%s\n","連接錯誤");

return 1;

}

printf("%s\n","連接成功");

//接收服務器初次回應

char buff[1024];

memset(buff,0,sizeof(buff));

recv(s,buff,sizeof(buff),0);

printf("服務說:%s\n",buff);

/////上面已經完成連接了/////

string szLine="\r\n";//相當於妳按下回車

//2.現在就是和服務器對話了

//問候服務器

string szHelo = "HELO smtp.163.com" + szLine;

printf("我說:%s\n",szHelo.c_str());

send(s,szHelo.c_str(),szHelo.length(),0);

memset(buff,0,sizeof(buff));

recv(s,buff,sizeof(buff),0);

printf("服務說:%s\n",buff);

//請求驗證用戶密碼(需要編碼)

string szAL = "auth login" + szLine; //發送驗證命令

printf("我說:%s\n",szAL.c_str());

send(s,szAL.c_str(),szAL.length(),0);

memset(buff,0,sizeof(buff));

recv(s,buff,sizeof(buff),0);

// printf("服務說:%s\n",buff); //服務器會回答說 可以輸入帳號

//發送帳號

string szUser;

cout<<Base64Decode((LPCTSTR)(buff+4));

cin>>szUser;

szUser = Base64Encode(szUser.c_str()) + szLine; //對輸入的帳號進行base64編碼

send(s,szUser.c_str(),szUser.length(),0); //發送帳號

printf("我說:%s\n",szUser.c_str());

memset(buff,0,sizeof(buff));

recv(s,buff,sizeof(buff),0);

// printf("服務說:%s\n",buff); //服務器會回答說 可以輸入密碼

//發送密碼

string szPsw;

cout<<Base64Decode((LPCTSTR)(buff+4));

cin>>szPsw;

szPsw = Base64Encode(szPsw.c_str()) + szLine; //對輸入的密碼進行base64編碼

send(s,szPsw.c_str(),szPsw.length(),0); //發送密碼

printf("我說:%s\n",szPsw.c_str());

memset(buff,0,sizeof(buff));

recv(s,buff,sizeof(buff),0);

printf("服務說:%s\n",buff);

//然後可以用妳登陸的郵箱給其他郵箱發郵件了

string szFrom,szTo;

cout<<"from:";//妳自己的郵箱

cin>>szFrom;

cout<<"to:"; //發送給誰

cin>>szTo;

//發送者的地址

string From = "mail from:<"+szFrom+ ">"+ szLine;

//收信者地址

string To = "rcpt to:<" + szTo +">" + szLine;

//現在確定看誰發的郵件 往哪發

send(s,From.c_str(),From.length(),0);//from

printf("我說:%s\n",From.c_str());

memset(buff,0,sizeof(buff));

recv(s,buff,sizeof(buff),0);

printf("服務說:%s\n",buff);

getchar(); //只是用來暫停壹下而已 按任意字母繼續

send(s,To.c_str(),To.length(),0); //to

printf("我說:%s\n",To.c_str());

memset(buff,0,sizeof(buff));

recv(s,buff,sizeof(buff),0);

printf("服務說:%s\n",buff);

getchar();

//資料應該都看過了吧命令裏的data輸入後 表示輸入郵件內容了

send(s,"data\r\n",6,0); //DATA 命令發送

printf("我說:%s\n","data");

memset(buff,0,sizeof(buff));

recv(s,buff,sizeof(buff),0);

printf("服務說:%s\n",buff);

//郵件 下面的信息都是當作內容處理

//郵件頭

string szFrom_in = "from:"+szFrom + szLine;

string szTo_in = "to:"+szTo + szLine;

//發送日期

string szDate_in="Date: Sat, 20 Aug 2011 13:39:29 +0800" + szLine;//這裏我就直接寫上去日期了 為了方便

//郵件標題

string szSubject_in = "Subject:我是郵件標題" + szLine;

//郵件正文

string szBody_in = "我就是傳說中的郵件體" + szLine;

string szContent = szFrom_in + szTo_in + szDate_in + szSubject_in;

szContent += szLine;//添加壹個空白行

szContent += szBody_in;

//上面是最基本的格式//

send(s,szContent.c_str(),szContent.length(),0); //szContent

printf("我說:%s\n",szContent.c_str());

memset(buff,0,sizeof(buff));

// recv(s,buff,sizeof(buff),0);

// printf("服務說:%s\n",buff);

getchar();

//發送完了說明下結束

send(s,".\r\n",3,0); //說明內容結束了

printf("我說:%s\n",".");

memset(buff,0,sizeof(buff));

recv(s,buff,sizeof(buff),0);

printf("服務說:%s\n",buff);

getchar();

//退出服務器連接

send(s,"quit\r\n",6,0); //退出

printf("我說:%s\n","quit");

memset(buff,0,sizeof(buff));

recv(s,buff,sizeof(buff),0);

printf("服務說:%s 發送郵件成功\n",buff);

return 0;

}