亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C++ > 正文

C++實現郵件群發的方法

2020-01-26 15:02:53
字體:
來源:轉載
供稿:網友

本文實例講述了C++實現郵件群發的方法。分享給大家供大家參考。具體如下:
關于生成隨機QQ郵箱不精確的問題,在之后版本打算另寫一個采集器插件進行帳號采集,所以,這個軟件只用來進行內容發送,郵箱進行隨機生成

如果你已經有采集來的QQ號,請復制到SendList.txt 替換內容即可
可以直接復制HTML代碼到郵件內容,保存即可。目前郵件內容最大設置為10000字節,如果有增大的必要,歡迎提交留言。

這是我學習后VC編程中涉及到多線程,socket,及一些WINDOWS API的宗合應用
使用說明:

一、SMTP設置

1、SMTP設置中,收件箱地址:填寫郵箱地址為帳號測試郵箱,可以填寫你自己的郵箱作為接收測試。打星號為必填。郵箱帳號及密碼,是即將用于群發的帳號和密碼
2、群發發送時間間隔,默認為零,可以選擇填寫發送間隔時間,單位為秒,防止多次快速發送相同內容被停用。
3、勾選郵件標題后插入系統時間,可以在標題上加上系統時間
4、導入群發列表,勾選后,可以點擊群發,暫停,繼續。(群發列表為程序目錄中SendList.txt)如果你有郵箱采集軟件,可以把彩集的郵箱地址按照格式,一行一個,放入其中),沒有的話,可以點擊“收件箱”頁面生成隨機QQ郵箱

二、郵件內容

1、填寫郵件標題,郵件內容可以為純文本,也可以是HTML代碼,附件目前只支持TXT文本。
2、群發前,請測試郵件內容,是否完整。附件是否正常接收。

三、收件箱

1、收件箱中順序生成QQ郵箱,請不要超過6位數QQ號,位數過大,生成時間過長,容易造成假死。
2、群發前,先生成QQ郵箱列表。如果你有采集郵箱帳號,可以按格式放入SendList.txt 中

版本更新說明:

1、可增加多個附件。
2、修復標題插入日期造成程序崩潰的BUG。
3、增加發送間隔時間選項。
4、支持HTML代碼
5、增加干預碼

#include "stdafx.h"#include <windows.h>#include <windowsx.h>#include "Resource.h"#include "TabDlg1.h"#include "winsock2.h"#define MAXSTRING 10000static int flag=0;     //標記是否群發TCHAR* pTitle = NULL;     //指向標題文件內容的指針HANDLE hThread=NULL;     //線程返回句柄long i=0;        //列表控件“行”計數static long sendNum=1;    //發送郵件數量#pragma comment(lib,"WSOCK32.LIB")extern TCHAR tcRunPath[MAX_PATH];  //程序當前路徑目錄extern TCHAR shortPath[MAX_PATH];  //文件路徑,TAB2中的全局變量extern TCHAR titlePath[256];   //郵件標題文件路徑extern TCHAR mtPath[256];    //郵件內容文件路徑extern TCHAR sendListPath[MAX_PATH]; //發送列表文件路徑extern BOOL attach;     //是否添加了附件extern TCHAR file[MAXSTRING];   //附件部份代碼BOOL WINAPI TAB1_Proc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam){ switch(uMsg) {  HANDLE_MSG(hWnd, WM_INITDIALOG, TAB1_OnInitDialog);  HANDLE_MSG(hWnd, WM_COMMAND, TAB1_OnCommand);  HANDLE_MSG(hWnd,WM_CLOSE, TAB1_OnClose); } return FALSE;}BOOL TAB1_OnInitDialog(HWND hwnd, HWND hwndFocus, LPARAM lParam){ InitLVColumn(hwnd); InitComboBox(hwnd); return TRUE;}void TAB1_OnCommand(HWND hwnd, int id, HWND hwndCtl, UINT codeNotify){  IsChecked(hwnd);   //判斷勾選框是否被勾選 IsRadioChecked(hwnd); //RADIO控件是否被選擇 switch(id) {  case IDC_MAIL_TEST:  {     if(IsDlgButtonChecked(hwnd,IDC_RADIO_QQ)!=BST_CHECKED && IsDlgButtonChecked(hwnd,IDC_RADIO_163)!=BST_CHECKED)   {    MessageBox(hwnd,TEXT("請選擇發QQ郵箱或163信箱"),"",MB_OK);    return;   }   else   {    flag=0;    hThread=CreateThread(NULL,0,ThreadFunc,hwnd,0,0);   }  }  break;  case IDC_BUTTON_START:  {     if(IsDlgButtonChecked(hwnd,IDC_RADIO_QQ)!=BST_CHECKED && IsDlgButtonChecked(hwnd,IDC_RADIO_163)!=BST_CHECKED)   {    MessageBox(hwnd,TEXT("請選擇發QQ郵箱或163信箱"),"",MB_OK);    return;   }   else   {    flag=1;    hThread=CreateThread(NULL,0,ThreadFunc,hwnd,0,0);   }  }  break;  case IDC_BUTTON_PAUSE:  {      if(NULL!=hThread)   {    SuspendThread(hThread);    }   else   {    return;   }  }  break;  case IDC_BUTTON_RESUME:  {      if(NULL!=hThread)   {    ResumeThread(hThread);    }   else   {    return;   }  }  break;  default:  break; }}void TAB1_OnClose(HWND hwnd){ EndDialog(hwnd, 0);}int InitLVColumn(HWND hwnd)    //列表初始化設置,視圖選為報表視圖{ LVCOLUMN lvColumn; MyLVColumn MyColumn[2] = {{TEXT("編號"), 0x30, LVCFMT_CENTER},{TEXT("郵箱帳號"), 0x99, LVCFMT_CENTER}}; lvColumn.mask = LVCF_TEXT|LVCF_FMT|LVCF_WIDTH|LVCF_SUBITEM; DWORD dwStyle =ListView_GetExtendedListViewStyle(GetDlgItem(hwnd, IDC_LIST));   //得到列表當前拓展風格 dwStyle |= LVS_EX_FULLROWSELECT; //選中某行使整行高亮(只適用與report風格的listctrl) dwStyle |= LVS_EX_GRIDLINES;  //網格線(只適用與report風格的listctrl)// dwStyle |= LVS_EX_CHECKBOXES;  //item前生成checkbox控件 ListView_SetExtendedListViewStyle(GetDlgItem(hwnd, IDC_LIST),dwStyle);     //設置列表擴展風格 for(int i = 0; i < 2; i++) {  lvColumn.pszText = MyColumn[i].szColumnName;  lvColumn.cx = MyColumn[i].cx;  lvColumn.fmt = MyColumn[i].fmt;  SendDlgItemMessage(hwnd, IDC_LIST, LVM_INSERTCOLUMN, i, (LPARAM)&lvColumn); }  return 0;}int InitComboBox(HWND hwnd)//窗口控件初始化設置{ HWND hwndCombo=GetDlgItem(hwnd,IDC_COMBO_SLEEPTIME); ComboBox_InsertString(hwndCombo,-1,TEXT("0")); ComboBox_InsertString(hwndCombo,-1,TEXT("1")); ComboBox_InsertString(hwndCombo,-1,TEXT("2")); ComboBox_InsertString(hwndCombo,-1,TEXT("5")); ComboBox_InsertString(hwndCombo,-1,TEXT("10")); ComboBox_InsertString(hwndCombo,-1,TEXT("20")); ComboBox_SetText(hwndCombo,TEXT("0")); SetDlgItemText(hwnd,IDC_EDIT_MAILADD,TEXT("12345678@qq.com")); ComboBox_InsertString(GetDlgItem(hwnd,IDC_COMBO_SMTP),0,TEXT("smtp.qq.com")); ComboBox_InsertString(GetDlgItem(hwnd,IDC_COMBO_SMTP),1,TEXT("smtp.163.com")); ComboBox_SetText(GetDlgItem(hwnd,IDC_COMBO_SMTP),TEXT("smtp.qq.com")); SetDlgItemText(hwnd,IDC_EDIT_MAILPORT,TEXT("25"));  SetDlgItemText(hwnd,IDC_EDIT_USERNAME,TEXT(""));  return 1;}int IsChecked(HWND hwnd)  //checkbox未選中的設置為只讀{ if(IsDlgButtonChecked(hwnd,IDC_CHECK_QUNFA)!=BST_CHECKED) {  EnableWindow(GetDlgItem(hwnd, IDC_BUTTON_START), false);  EnableWindow(GetDlgItem(hwnd, IDC_BUTTON_RESUME), false);  EnableWindow(GetDlgItem(hwnd, IDC_BUTTON_PAUSE), false);  return 0; } else {  EnableWindow(GetDlgItem(hwnd, IDC_BUTTON_START), true);  EnableWindow(GetDlgItem(hwnd, IDC_BUTTON_RESUME), true);  EnableWindow(GetDlgItem(hwnd, IDC_BUTTON_PAUSE), true);  return 1; } return 0;}int IsRadioChecked(HWND hwnd) //RADIO控件被選中,則設置相應的SMTP 地址{ if(IsDlgButtonChecked(hwnd,IDC_RADIO_QQ)==BST_CHECKED) {  ComboBox_SetText(GetDlgItem(hwnd,IDC_COMBO_SMTP),TEXT("smtp.qq.com"));  return 1; } if(IsDlgButtonChecked(hwnd,IDC_RADIO_163)==BST_CHECKED) {  ComboBox_SetText(GetDlgItem(hwnd,IDC_COMBO_SMTP),TEXT("smtp.163.com"));  return 2; } return 0;}TCHAR* readText1(HWND hwnd)    //讀取文件--郵件發送內容{ int nLen = 0; FILE *pF = fopen(titlePath , "r"); //打開文件 fseek(pF, 0, SEEK_END);    //文件指針移到文件尾 nLen = ftell(pF);     //得到當前指針位置, 即是文件的長度 rewind(pF);       //文件指針恢復到文件頭位置 pTitle = (char*) malloc(sizeof(char)*nLen+1);//動態申請空間, 為保存字符串結尾標志/0, 多申請一個字符的空間 if(!pTitle) {  MessageBox(hwnd,TEXT("內存不夠!"),"錯誤",MB_ICONWARNING);  exit(0); } nLen = fread(pTitle, sizeof(char), nLen, pF); pTitle[nLen] = '/0';   //添加字符串結尾標志 if(IsDlgButtonChecked(hwnd,IDC_CHECK_TITLE)==BST_CHECKED) //是否勾選在郵件標題 加入系統當前時間 {  SYSTEMTIME stLocal;  GetLocalTime(&stLocal); //得到系統當前時間  TCHAR strTime[256];  ZeroMemory(strTime,sizeof(strTime)/sizeof(TCHAR));  wsprintf(strTime,"%04u-%02u-%02u %02u:%02u:%02u",stLocal.wYear,stLocal.wMonth,stLocal.wDay,stLocal.wHour,stLocal.wMinute,stLocal.wSecond);  strcat(pTitle,strTime); //在標題后加入系統時間 } fclose(pF);     //關閉文件 TCHAR* pText = NULL; pF = fopen(mtPath , "r"); //打開文件 fseek(pF, 0, SEEK_END);  nLen = ftell(pF);  rewind(pF);  pText = (char*) malloc(sizeof(char)*nLen+1); //動態申請空間, 為保存字符串結尾標志/0, 多申請一個字符的空間 if(!pText) {  MessageBox(hwnd,TEXT("內存不夠!"),"錯誤",MB_ICONWARNING);  exit(0); } nLen = fread(pText, sizeof(char), nLen, pF); pText[nLen] = '/0';   //添加字符串結尾標志 fclose(pF);     //關閉文件 TCHAR chText[MAXSTRING];   TCHAR* encText=base64_encode(pText,strlen(pText));   strcpy(chText,encText);  //BASE64加密結果 free(encText);    //釋放指針 free(pText);     //釋放空間 return chText;}DWORD WINAPI ThreadFunc(LPVOID lpParam)//發郵件線程{ HWND hwnd=(HWND)lpParam; TCHAR userName[256];    //用戶帳號 TCHAR userPassWord[256];   //用戶密碼 GetDlgItemText(hwnd,IDC_EDIT_USERNAME,userName,sizeof(userName)/sizeof(TCHAR)); GetDlgItemText(hwnd,IDC_EDIT_USERPASSWORD,userPassWord,sizeof(userPassWord)/sizeof(TCHAR)); TCHAR *name=userName;  int i = 0;  int j = strlen(name);  TCHAR *encName = base64_encode(name, j);    //給用戶名base64加密編碼   ZeroMemory(userName,sizeof(userName)/sizeof(TCHAR));  wsprintf(userName,"%s/n", encName);      //在加編碼后加入回車符 TCHAR *passWord=userPassWord;  int k = strlen(passWord);  TCHAR *encPassWord = base64_encode(passWord, k);  //給用戶密碼base64加密編碼     // int len = strlen(enc);  // TCHAR *dec = base64_decode(enc, len);    //反編  ZeroMemory(userPassWord,sizeof(userPassWord)/sizeof(TCHAR));  wsprintf(userPassWord,"%s/n", encPassWord); /*ZeroMemory(userName,sizeof(userName)/sizeof(TCHAR));  wsprintf(userName,"/ndecoded : %s", dec); MessageBox(hwnd,userName,"",MB_OK);*/     //反編譯用戶名,如果需要,可以把用戶名密碼反編后發到指定郵箱。 free(encName);           //釋放指針 free(encPassWord); //free(dec);  if(1==flag)            //全局標記,點擊群發還是測試,1為群發,0為測試 {   HANDLE wFile;   int szId;   TCHAR ch;   TCHAR szState[256];   strcpy(sendListPath,tcRunPath);   strcat(sendListPath,"http://SendList.txt");   //拼接全路徑及文件名   TCHAR *sFileName=sendListPath;   FILE *fp=fopen(sFileName,"r");   if(fp==NULL)   {    return FALSE;        //打開文件失敗,則返回,不讀取   }   fseek(fp, 0, SEEK_END);   int length = ftell(fp);      //length為0,則是空的   rewind(fp);         //把指針移回文件頭部 還可以用 fseek(fp, 0, SEEK_SET);效果一樣   if(length==0)         //判斷文件如果為空,則關閉文件,返回,   {    fclose(fp);        //要關閉打開的文件,不然退出時,無法保存    return FALSE;   }   while(!feof(fp))   {     fscanf(fp,"%s/r/n",szState);    SocketQ(hwnd,userName,userPassWord,szState);    TCHAR sTime[256];        unsigned long iTime;    ComboBox_GetText(GetDlgItem(hwnd,IDC_COMBO_SLEEPTIME),sTime,sizeof(sTime)/sizeof(TCHAR));    iTime=atoi(sTime);    iTime=iTime*1000;    Sleep(iTime);   }    fclose(fp); } else {  Socket(hwnd,userName,userPassWord);  } CloseHandle(hThread);  return 0;}void SocketQ(HWND hwnd,TCHAR userName[],TCHAR userPassWord[],TCHAR szState[])//傳入加密的用戶名跟密碼連接163{   /*******************************************************************   使用Socket的程序在使用Socket之前必須調用WSAStartup函數。   該函數的第一個參數指明程序請求使用的Socket版本,   其中高位字節指明副版本、低位字節指明主版本;   操作系統利用第二個參數返回請求的Socket的版本信息。   當一個應用程序調用WSAStartup函數時,操作系統根據請求的Socket版本來搜索相應的Socket庫,   然后綁定找到的Socket庫到該應用程序中。   以后應用程序就可以調用所請求的Socket庫中的其它Socket函數了。   該函數執行成功后返回0。   *****************************************************************/  TCHAR* pText;  pText = readText1(hwnd);  int WSA_return;  WSADATA wsaData;     WSA_return=WSAStartup(MAKEWORD(2,0),&wsaData);   //初始化Socket庫    SOCKET sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);//創建SOCKET  hostent* host = NULL;   SOCKADDR_IN sa;  sa.sin_family=AF_INET;         //設置電線連接服務器端的端口  TCHAR cPort[100];  GetDlgItemText(hwnd,IDC_EDIT_MAILPORT,cPort,sizeof(cPort)/sizeof(TCHAR));  int iPort=atoi(cPort);  sa.sin_port = htons(iPort);     //sa.sin_addr.S_un.S_addr = inet_addr("123.58.178.203");//可以寫死IP地址      HOSTENT *host_entry;         //存放主機域名,如smtp.qq.com   TCHAR host_name[256]="";   ZeroMemory(host_name,sizeof(host_name)/sizeof(TCHAR));    ComboBox_GetText(GetDlgItem(hwnd,IDC_COMBO_SMTP),host_name,sizeof(host_name)/sizeof(TCHAR));   TCHAR str_ipAdd[256];   if(WSA_return==0)   {   host_entry=gethostbyname(host_name);     // 要解析的域名或主機名    if(host_entry!=NULL)   {   wsprintf(str_ipAdd,"%d.%d.%d.%d",    (host_entry->h_addr_list[0][0]&0x00ff),    (host_entry->h_addr_list[0][1]&0x00ff),    (host_entry->h_addr_list[0][2]&0x00ff),    (host_entry->h_addr_list[0][3]&0x00ff));       }   }  sa.sin_addr.S_un.S_addr = inet_addr(str_ipAdd);   //得到域名IP地址  if(connect(sock,(SOCKADDR *)&sa,sizeof(sa))==SOCKET_ERROR)  {  ShowError();  return;  }  TCHAR buffer[256];          //對話過程    ZeroMemory(buffer,sizeof(buffer)/sizeof(TCHAR));  int iRet=recv(sock,buffer,256,0);      //接收問候語    if(SOCKET_ERROR==iRet)  {   ShowError();      return;  }  TCHAR Hello[] = "HELO SMTP/r/n";      //注意不能忘了末尾的回車    send(sock,Hello,lstrlen(Hello),0);   ZeroMemory(buffer,sizeof(buffer)/sizeof(TCHAR));   iRet=recv(sock,buffer,256,0);  if(SOCKET_ERROR==iRet)  {   ShowError();      return;  }  TCHAR Ehlo[] = "EHLO SMTP/r/n";    send(sock,Ehlo,lstrlen(Ehlo),0);   ZeroMemory(buffer,sizeof(buffer)/sizeof(TCHAR));   iRet=recv(sock,buffer,256,0);  if(SOCKET_ERROR==iRet)  {   ShowError();      return;  }  TCHAR login[] = "AUTH LOGIN/r/n";      //登陸命令  send(sock,login,lstrlen(login),0);   ZeroMemory(buffer,sizeof(buffer)/sizeof(TCHAR));   iRet=recv(sock,buffer,256,0);  if(SOCKET_ERROR==iRet)  {   ShowError();      return;  }  if(IsDlgButtonChecked(hwnd,IDC_RADIO_QQ)==BST_CHECKED)  {   strcat(userName,"/r/n");   send(sock,userName,lstrlen(userName),0);   //發送加密的用戶名   ZeroMemory(buffer,sizeof(buffer)/sizeof(TCHAR));    iRet=recv(sock,buffer,256,0);   if(SOCKET_ERROR==iRet)   {    ShowError();       return;   }   strcat(userPassWord,"/r/n");   send(sock,userPassWord,lstrlen(userPassWord),0); //發送加密的密碼   ZeroMemory(buffer,sizeof(buffer)/sizeof(TCHAR));    iRet=recv(sock,buffer,256,0);   if(SOCKET_ERROR==iRet)   {    ShowError();       return;   }  }  if(IsDlgButtonChecked(hwnd,IDC_RADIO_163)==BST_CHECKED)  {   send(sock,userName,lstrlen(userName),0);   //發送加密的用戶名   ZeroMemory(buffer,sizeof(buffer)/sizeof(TCHAR));    iRet=recv(sock,buffer,256,0);   if(SOCKET_ERROR==iRet)   {    ShowError();       return;   }   send(sock,userPassWord,lstrlen(userPassWord),0); //發送加密的密碼   ZeroMemory(buffer,sizeof(buffer)/sizeof(TCHAR));    iRet=recv(sock,buffer,256,0);   if(SOCKET_ERROR==iRet)   {    ShowError();       return;   }  }  TCHAR userF[256];  TCHAR userL[256];  TCHAR temp[256];  GetDlgItemText(hwnd,IDC_EDIT_USERNAME,userF,sizeof(userF)/sizeof(TCHAR));   ComboBox_GetText(GetDlgItem(hwnd,IDC_COMBO_SMTP),temp,sizeof(host_name)/sizeof(TCHAR));  strcat(userF,"@");  strncpy(userL,temp+5,sizeof(userL));  strcat(userF,userL);  TCHAR mailFrom[256];  //MessageBox(hwnd,userF,"",MB_OK);  wsprintf(mailFrom,TEXT("MAIL FROM:<%s>/r/n"),userF);  send(sock,mailFrom,lstrlen(mailFrom),0);  ZeroMemory(buffer,sizeof(buffer)/sizeof(TCHAR));   iRet=recv(sock,buffer,256,0);  if(SOCKET_ERROR==iRet)  {   ShowError();      return;  }   TCHAR mailTo[256];   wsprintf(mailTo,TEXT("RCPT TO:<%s>/r/n"),szState);   send(sock,mailTo,lstrlen(mailTo),0);   ZeroMemory(buffer,sizeof(buffer)/sizeof(TCHAR));    iRet=recv(sock,buffer,256,0);   if(SOCKET_ERROR==iRet)   {    ShowError();       return;   }  TCHAR dataCommad[]="DATA/r/n";  send(sock,dataCommad,lstrlen(dataCommad),0);   ZeroMemory(buffer,sizeof(buffer)/sizeof(TCHAR));   iRet=recv(sock,buffer,256,0);  if(SOCKET_ERROR==iRet)  {   ShowError();      return;  }  //下面是發送正文及附件部份  TCHAR data[50000];  TCHAR SetMailHead[1024];      //郵件頭部信息  wsprintf(SetMailHead,TEXT("To:%s/r/nFrom:%s/r/nSubject: %s/r/n"         "Date:2012-8-24/r/nX-Mailer:Kevin's mailer/r/nMIME-Version:1.0/r/n"         "Content-Type: multipart/mixed;/r/n"         " boundary=/"----=_NextPart_5039E410_D41071F0_120ABDFB/";/r/n"         "This is a multi-part message in MIME format./r/n/r/n"         "------=_NextPart_5039E410_D41071F0_120ABDFB/r/n"         "Content-Type: multipart/alternative;/r/n"         " boundary=/"----=_NextPart_5039E410_D41071F0_53510C95/";/r/n/r/n"         "------=_NextPart_5039E410_D41071F0_53510C95/r/n"         "Content-Type: text/plain;/r charset=/"gb2312/"/r/n"         "Content-Transfer-Encoding: base64/r/n/r/n"),szState,userF,pTitle);  strcat(SetMailHead,pText);     //郵件頭部再加上正文文本內容  strcat(SetMailHead,TEXT("/r/n/r/n"));  strcpy(data,SetMailHead);  TCHAR SetMailHtml[1024];     //郵件HTML代碼部份  wsprintf(SetMailHtml,TEXT("------=_NextPart_5039E410_D41071F0_53510C95/r/n"         "Content-Type: text/html;/r/n"         " charset=/"gb2312/"/r/n"         "Content-Transfer-Encoding: base64/r/n/r/n"));  strcat(SetMailHtml,pText);     //加入郵件內容  strcat(SetMailHtml,TEXT("/r/n/r/n------=_NextPart_5039E410_D41071F0_53510C95--/r/n/r/n"));  strcat(data,SetMailHtml);  if(TRUE==attach)       //判斷是否添加了附件路徑  {   strcat(data,file);      //加入附件部份代碼   strcat(data,TEXT("------=_NextPart_5039E410_D41071F0_120ABDFB--/r/n"));  }  send(sock,data,lstrlen(data),0);  TCHAR cN[]="/r/n./r/n";     //郵件結束標志  send(sock,cN,lstrlen(cN),0);  ZeroMemory(buffer,sizeof(buffer)/sizeof(TCHAR));   iRet=recv(sock,buffer,256,0);   if(SOCKET_ERROR==iRet)   {    ShowError();       return;   }  TCHAR cQuit[] = "QUIT/r/n";     //退出命令  send(sock,cQuit,lstrlen(cQuit),0);   ZeroMemory(buffer,sizeof(buffer)/sizeof(TCHAR));   iRet=recv(sock,buffer,256,0);  TCHAR cNum[256];  if(SOCKET_ERROR==iRet)  {   ShowError();      return;  }    else  {    TCHAR str[256];      //輸出已發送列表   wsprintf(str,"%i",sendNum);   LVITEM lvItem;   lvItem.mask = LVIF_TEXT;   lvItem.iSubItem = 0;   int ItemCount = ListView_GetItemCount(GetDlgItem(hwnd, IDC_LIST));   lvItem.iItem = ItemCount;    lvItem.pszText = str;   SendDlgItemMessage(hwnd, IDC_LIST, LVM_INSERTITEM, 0, (LPARAM)&lvItem);    ListView_SetItemText(GetDlgItem(hwnd, IDC_LIST), i++, 1, szState);          sendNum++;  }  free(pTitle);        //釋放空間    closesocket(sock);       //關閉SOCKET   WSACleanup();  return;}void Socket(HWND hwnd,TCHAR userName[],TCHAR userPassWord[])//傳入加密的用戶名跟密碼連接163{  TCHAR* pText;  pText = readText1(hwnd);  int WSA_return;  WSADATA wsaData;     WSA_return=WSAStartup(MAKEWORD(2,0),&wsaData);//初始化Socket庫  SOCKET sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);  hostent* host = NULL;   SOCKADDR_IN sa;  sa.sin_family=AF_INET;      //設置電線連接服務器端的端口  TCHAR cPort[100];  GetDlgItemText(hwnd,IDC_EDIT_MAILPORT,cPort,sizeof(cPort)/sizeof(TCHAR));  int iPort=atoi(cPort);  sa.sin_port = htons(iPort);     HOSTENT *host_entry;   TCHAR host_name[256]="";   ZeroMemory(host_name,sizeof(host_name)/sizeof(TCHAR));    ComboBox_GetText(GetDlgItem(hwnd,IDC_COMBO_SMTP),host_name,sizeof(host_name)/sizeof(TCHAR));   TCHAR str_ipAdd[256];   if(WSA_return==0)   {      host_entry=gethostbyname(host_name); // 即要解析的域名或主機名     if(host_entry!=NULL)    {     wsprintf(str_ipAdd,"%d.%d.%d.%d",    (host_entry->h_addr_list[0][0]&0x00ff),    (host_entry->h_addr_list[0][1]&0x00ff),    (host_entry->h_addr_list[0][2]&0x00ff),    (host_entry->h_addr_list[0][3]&0x00ff));         }   }  sa.sin_addr.S_un.S_addr = inet_addr(str_ipAdd);    if(connect(sock,(SOCKADDR *)&sa,sizeof(sa))==SOCKET_ERROR)  {   ShowError();   return;   }  TCHAR buffer[256];      //對話過程   ZeroMemory(buffer,sizeof(buffer)/sizeof(TCHAR));    int iRet=recv(sock,buffer,256,0);  //接收問候語   if(SOCKET_ERROR==iRet)  {   ShowError();      return;  }  TCHAR Hello[] = "HELO SMTP/r/n";  //注意不能忘了末尾的回車   send(sock,Hello,lstrlen(Hello),0);   ZeroMemory(buffer,sizeof(buffer)/sizeof(TCHAR));   iRet=recv(sock,buffer,256,0);  if(SOCKET_ERROR==iRet)  {   ShowError();      return;  }  TCHAR Ehlo[] = "EHLO SMTP/r/n";    send(sock,Ehlo,lstrlen(Ehlo),0);   ZeroMemory(buffer,sizeof(buffer)/sizeof(TCHAR));   iRet=recv(sock,buffer,256,0);  if(SOCKET_ERROR==iRet)  {   ShowError();      return;  }  TCHAR login[] = "AUTH LOGIN/r/n";      //登陸命令  send(sock,login,lstrlen(login),0);   ZeroMemory(buffer,sizeof(buffer)/sizeof(TCHAR));   iRet=recv(sock,buffer,256,0);  if(SOCKET_ERROR==iRet)  {   ShowError();      return;  }  if(IsDlgButtonChecked(hwnd,IDC_RADIO_QQ)==BST_CHECKED)  {   strcat(userName,"/r/n");   send(sock,userName,lstrlen(userName),0);   //發送加密的用戶名   ZeroMemory(buffer,sizeof(buffer)/sizeof(TCHAR));    iRet=recv(sock,buffer,256,0);   if(SOCKET_ERROR==iRet)   {    ShowError();       return;   }   strcat(userPassWord,"/r/n");   send(sock,userPassWord,lstrlen(userPassWord),0); //發送加密的密碼   ZeroMemory(buffer,sizeof(buffer)/sizeof(TCHAR));    iRet=recv(sock,buffer,256,0);   if(SOCKET_ERROR==iRet)   {    ShowError();       return;   }  }  if(IsDlgButtonChecked(hwnd,IDC_RADIO_163)==BST_CHECKED)  {   send(sock,userName,lstrlen(userName),0);   //發送加密的用戶名   ZeroMemory(buffer,sizeof(buffer)/sizeof(TCHAR));    iRet=recv(sock,buffer,256,0);   if(SOCKET_ERROR==iRet)   {    ShowError();       return;   }   send(sock,userPassWord,lstrlen(userPassWord),0); //發送加密的密碼   ZeroMemory(buffer,sizeof(buffer)/sizeof(TCHAR));    iRet=recv(sock,buffer,256,0);   if(SOCKET_ERROR==iRet)   {    ShowError();       return;   }  }  TCHAR userF[256];  TCHAR userL[256];  TCHAR temp[256];  GetDlgItemText(hwnd,IDC_EDIT_USERNAME,userF,sizeof(userF)/sizeof(TCHAR));   ComboBox_GetText(GetDlgItem(hwnd,IDC_COMBO_SMTP),temp,sizeof(host_name)/sizeof(TCHAR));  strcat(userF,"@");  strncpy(userL,temp+5,sizeof(userL));  strcat(userF,userL);  TCHAR mailFrom[256];  //MessageBox(hwnd,userF,"",MB_OK);  wsprintf(mailFrom,TEXT("MAIL FROM:<%s>/r/n"),userF);  send(sock,mailFrom,lstrlen(mailFrom),0);  ZeroMemory(buffer,sizeof(buffer)/sizeof(TCHAR));   iRet=recv(sock,buffer,256,0);  if(SOCKET_ERROR==iRet)  {   ShowError();      return;  }   TCHAR mailAdd[256];   GetDlgItemText(hwnd,IDC_EDIT_MAILADD,mailAdd,sizeof(mailAdd)/sizeof(TCHAR));   TCHAR mailTo[256];   wsprintf(mailTo,TEXT("RCPT TO:<%s>/r/n"),mailAdd);   send(sock,mailTo,lstrlen(mailTo),0);   ZeroMemory(buffer,sizeof(buffer)/sizeof(TCHAR));    iRet=recv(sock,buffer,256,0);   if(SOCKET_ERROR==iRet)   {    ShowError();       return;   }  TCHAR dataCommad[]="DATA/r/n";  send(sock,dataCommad,lstrlen(dataCommad),0);   ZeroMemory(buffer,sizeof(buffer)/sizeof(TCHAR));   iRet=recv(sock,buffer,256,0);  if(SOCKET_ERROR==iRet)  {   ShowError();      return;  }  //下面是發送正文及附件部份  TCHAR data[50000];  TCHAR SetMailHead[1024];      //郵件頭部信息  wsprintf(SetMailHead,TEXT("To:%s/r/nFrom:%s/r/nSubject: %s/r/n"         "Date:2012-8-24/r/nX-Mailer:Kevin's mailer/r/nMIME-Version:1.0/r/n"         "Content-Type: multipart/mixed;/r/n"         " boundary=/"----=_NextPart_5039E410_D41071F0_120ABDFB/";/r/n"         "This is a multi-part message in MIME format./r/n/r/n"         "------=_NextPart_5039E410_D41071F0_120ABDFB/r/n"         "Content-Type: multipart/alternative;/r/n"         " boundary=/"----=_NextPart_5039E410_D41071F0_53510C95/";/r/n/r/n"         "------=_NextPart_5039E410_D41071F0_53510C95/r/n"         "Content-Type: text/plain;/r charset=/"gb2312/"/r/n"         "Content-Transfer-Encoding: base64/r/n/r/n"),mailAdd,userF,pTitle);  strcat(SetMailHead,pText);      //郵件頭部再加上正文文本內容  strcat(SetMailHead,TEXT("/r/n/r/n"));  strcpy(data,SetMailHead);  TCHAR SetMailHtml[1024];      //郵件HTML代碼部份  wsprintf(SetMailHtml,TEXT("------=_NextPart_5039E410_D41071F0_53510C95/r/n"         "Content-Type: text/html;/r/n"         " charset=/"gb2312/"/r/n"         "Content-Transfer-Encoding: base64/r/n/r/n"));  strcat(SetMailHtml,pText);      //加入郵件內容  strcat(SetMailHtml,TEXT("/r/n/r/n------=_NextPart_5039E410_D41071F0_53510C95--/r/n/r/n"));  strcat(data,SetMailHtml);  if(TRUE==attach)        //判斷是否添加了附件路徑  {   strcat(data,file);       //加入附件部份代碼   strcat(data,TEXT("------=_NextPart_5039E410_D41071F0_120ABDFB--/r/n"));  }  send(sock,data,lstrlen(data),0);  TCHAR cN[]="/r/n./r/n";      //郵件結束標志  send(sock,cN,lstrlen(cN),0);  ZeroMemory(buffer,sizeof(buffer)/sizeof(TCHAR));   iRet=recv(sock,buffer,256,0);  if(SOCKET_ERROR==iRet)  {   ShowError();      return;  }  TCHAR cQuit[] = "QUIT/r/n";      //退出命令  send(sock,cQuit,lstrlen(cQuit),0);   ZeroMemory(buffer,sizeof(buffer)/sizeof(TCHAR));   iRet=recv(sock,buffer,256,0);  TCHAR cNum[256];  if(SOCKET_ERROR==iRet)  {   ShowError();      return;  }    else  {     MessageBox(hwnd,TEXT("測試發送成功"),TEXT("恭喜"),MB_OK);  }   free(pTitle);         //釋放空間  closesocket(sock);        //關閉SOCK    WSACleanup();  return;}void ShowError(){ TCHAR* lpMsgBuf; FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER|  //自動分配消息緩沖區 FORMAT_MESSAGE_FROM_SYSTEM,      //從系統獲取信息 NULL,GetLastError(),        //獲取錯誤信息標識 MAKELANGID(LANG_NEUTRAL,SUBLANG_DEFAULT),   //使用系統缺省語言 (LPTSTR)&lpMsgBuf,        //消息緩沖區 0, NULL); MessageBox(NULL,lpMsgBuf,"",MB_ICONERROR); }

希望本文所述對大家的C++程序設計有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩精品极品在线观看| 久久999免费视频| 日韩精品高清视频| 久久久久久成人精品| 国产盗摄xxxx视频xxx69| 亚洲无亚洲人成网站77777| 久久九九免费视频| 亚洲男人天堂古典| 久久久久久香蕉网| 国产精品永久免费在线| 欧美国产激情18| 高清欧美电影在线| 不卡av电影院| 国产精品极品美女在线观看免费| 欧美日韩国产丝袜美女| 国产精品久久久久免费a∨大胸| 日韩在线一区二区三区免费视频| 日韩欧美在线播放| 日韩一区av在线| 亚洲视频一区二区三区| 国产成人精品最新| 亚洲伊人一本大道中文字幕| 国产中文字幕亚洲| 国产精品视频免费观看www| 日韩欧美中文在线| 欧美一级电影免费在线观看| 久久躁狠狠躁夜夜爽| 亚洲国产免费av| 在线电影欧美日韩一区二区私密| 国产日韩欧美在线视频观看| 国产区精品视频| 色综合天天狠天天透天天伊人| 亚洲精品视频网上网址在线观看| 国产精品视频yy9099| 国产成人精品免费久久久久| 欧洲成人午夜免费大片| 性欧美长视频免费观看不卡| 亚洲精品国产拍免费91在线| 日韩精品高清视频| 国产成一区二区| 91精品久久久久久久久久另类| 在线成人一区二区| 日韩av影片在线观看| 国产精品一区二区av影院萌芽| 久久国产视频网站| 欧美日韩在线看| 欧美大片在线看免费观看| 亚洲人成自拍网站| 亚洲精品欧美日韩专区| 欧美日韩国产二区| 91精品国产亚洲| 国产精品丝袜高跟| 亚洲欧美精品中文字幕在线| 久久中文字幕在线视频| 91精品国产一区| 久久久久久免费精品| 尤物tv国产一区| 亚洲色图综合久久| 亚洲成人精品视频| 一个色综合导航| 欧美日韩国产中文字幕| 欧美超级乱淫片喷水| 深夜福利日韩在线看| 热99精品里视频精品| 精品香蕉一区二区三区| 亚洲国产精久久久久久久| 亚洲а∨天堂久久精品9966| 亚洲jizzjizz日本少妇| 日韩成人中文电影| 中文字幕欧美日韩va免费视频| 亚洲精品美女在线观看| www国产亚洲精品久久网站| 国产一区二区欧美日韩| 亚洲综合社区网| 国产小视频国产精品| 狠狠躁夜夜躁人人躁婷婷91| 久久影视电视剧免费网站清宫辞电视| 96sao精品视频在线观看| 成人写真视频福利网| 亚洲欧美在线免费| 国产午夜精品久久久| 91精品国产高清久久久久久| 国产精品爽黄69| 欧美高清视频在线观看| 欧美激情视频一区二区| 一区二区日韩精品| 日韩精品中文字幕在线播放| 成人黄色免费看| 亚洲人成人99网站| 欧美日韩中文在线观看| 日韩免费观看高清| 国产精品www网站| 国产精品日韩专区| 国产精品日韩专区| 欧洲中文字幕国产精品| 亚洲性视频网址| 国产精品444| 久久久国产精彩视频美女艺术照福利| 91av在线免费观看视频| 国产成人综合精品| 日韩av成人在线| 黑人巨大精品欧美一区二区免费| 美女国内精品自产拍在线播放| 成人免费视频网址| 97人人模人人爽人人喊中文字| 中文字幕亚洲综合久久筱田步美| 久久色精品视频| 国产九九精品视频| 亚洲精品91美女久久久久久久| 成人中心免费视频| 亚洲香蕉在线观看| 免费av一区二区| 国产日韩欧美自拍| 欧美特黄级在线| 日本高清不卡的在线| 国产精品一区二区久久久久| 欧美日韩激情网| 国产精品久久久久久久久久东京| 国产一区二区三区久久精品| 在线视频国产日韩| 精品日本美女福利在线观看| 亚洲激情视频在线播放| 国产精品久久久久秋霞鲁丝| 国产精品久久久久久久久久| 亚洲激情 国产| 欧美亚洲国产精品| 69视频在线免费观看| 国产一区二区三区在线视频| 日韩中文字幕久久| 亚洲精品一区二区网址| 97热精品视频官网| 成人午夜小视频| 性欧美暴力猛交69hd| 国产一区二区三区网站| 亚洲色图综合网| 国产精品69久久| 91日本在线观看| 在线免费看av不卡| 午夜精品蜜臀一区二区三区免费| 欧美成人自拍视频| 另类色图亚洲色图| 亚洲最大成人在线| 毛片精品免费在线观看| 久久精品99无色码中文字幕| 欧美一区二区.| 亚洲国产精品字幕| 欧美裸体xxxx极品少妇| 综合网日日天干夜夜久久| 色偷偷偷综合中文字幕;dd| 一本一本久久a久久精品综合小说| 啊v视频在线一区二区三区| 91豆花精品一区| 亚洲第一精品久久忘忧草社区| 国产精品一区二区三区久久| 在线激情影院一区| 国产精品最新在线观看| 亚洲国产精彩中文乱码av| 日韩精品一二三四区| 国产精品视频区1| 欧美美女18p| 成人h猎奇视频网站| 91在线观看免费网站| 浅井舞香一区二区| 亚洲男人av在线|