C++メール群送信の実現方法

29069 ワード

本稿では,C++によるメール群送信の実現方法について述べる.皆さんの参考にしてください.具体的には以下の通りである:ランダムQQメールボックスの生成が不正確な問題については、その後のバージョンで別のコレクタープラグインを書いてアカウント収集を行う予定であるため、このソフトウェアはコンテンツ送信のみに使用され、メールボックスはランダム生成を行う
すでにQQ番号を取得している場合は、SendListにコピーしてください.txt置換コンテンツはHTMLコードを直接メールコンテンツにコピーして保存すればよい.現在、メールの内容は最大10000バイトに設定されており、必要に応じてメッセージを提出してください.
これは私が学習したVCプログラミングでマルチスレッド、socket、およびいくつかのWINDOWS APIの宗合応用使用説明です.
一、SMTP設定
1、SMTPの设定の中で、受信箱のアドレス:メールアドレスを记入してアカウントのテストメールボックスで、あなたの自分のメールボックスを记入して受信テストとすることができます.アスタリスクは必須です.メールアドレスのアカウントとパスワードは、間もなくグループ送信に使用されるアカウントとパスワード2、グループ送信時間間隔であり、デフォルトはゼロであり、送信間隔時間を秒単位で記入することができ、同じ内容が複数回の迅速な送信で停止されることを防止することができる.3、メールのタイトルをチェックしてからシステム時間を挿入し、タイトルにシステム時間4を加えて、群発リストを導入することができ、チェックした後、群発をクリックして、一時停止して、継続することができます.(群発リストはプログラムディレクトリの中でSendList.txt)メールボックス収集ソフトがあれば、カラーセットのメールアドレスをフォーマットに従って、1行1つ、中に入れることができます)、なければ、「受信ボックス」ページをクリックしてランダムQQメールボックスを生成することができます
二、メールの内容
1、メールのタイトルを記入して、メールの内容は純粋なテキストでもHTMLコードでもよく、添付ファイルは現在TXTテキストしかサポートしていない.2、群発する前に、メールの内容が完全かどうかをテストしてください.添付ファイルが正常に受信されているかどうか.
三、受信箱
1、受信箱の中で順番にQQメールボックスを生成してください.6桁のQQ番号を超えないでください.桁が大きすぎて、生成時間が長すぎて、仮死になりやすいです.2、群発する前に、先生はQQメールのリストになりました.メールアカウントを取得している場合は、フォーマットでSendListに入れることができます.txt中
バージョン更新の説明:
1、添付ファイルを複数追加できます.2、タイトル挿入日でプログラムがクラッシュしたバグを修正する.3、送信間隔を増やすオプション.4、HTMLコード5のサポート、介入コードの追加

#include "stdafx.h"
#include 
#include 
#include "Resource.h"
#include "TabDlg1.h"
#include "winsock2.h"
#define MAXSTRING 10000
static 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("[email protected]"));
 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
", 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
", encPassWord); /*ZeroMemory(userName,sizeof(userName)/sizeof(TCHAR)); wsprintf(userName,"
decoded : %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,"\\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
",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
"; // 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
"; 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
"; // 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
"); 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
"); 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:\r
"),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:\r
"),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
"; 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
From:%s\r
Subject: %s\r
" "Date:2012-8-24\r
X-Mailer:Kevin's mailer\r
MIME-Version:1.0\r
" "Content-Type: multipart/mixed;\r
" " boundary=\"----=_NextPart_5039E410_D41071F0_120ABDFB\";\r
" "This is a multi-part message in MIME format.\r
\r
" "------=_NextPart_5039E410_D41071F0_120ABDFB\r
" "Content-Type: multipart/alternative;\r
" " boundary=\"----=_NextPart_5039E410_D41071F0_53510C95\";\r
\r
" "------=_NextPart_5039E410_D41071F0_53510C95\r
" "Content-Type: text/plain;\r charset=\"gb2312\"\r
" "Content-Transfer-Encoding: base64\r
\r
"),szState,userF,pTitle); strcat(SetMailHead,pText); // strcat(SetMailHead,TEXT("\r
\r
")); strcpy(data,SetMailHead); TCHAR SetMailHtml[1024]; // HTML wsprintf(SetMailHtml,TEXT("------=_NextPart_5039E410_D41071F0_53510C95\r
" "Content-Type: text/html;\r
" " charset=\"gb2312\"\r
" "Content-Transfer-Encoding: base64\r
\r
")); strcat(SetMailHtml,pText); // strcat(SetMailHtml,TEXT("\r
\r
------=_NextPart_5039E410_D41071F0_53510C95--\r
\r
")); strcat(data,SetMailHtml); if(TRUE==attach) // { strcat(data,file); // strcat(data,TEXT("------=_NextPart_5039E410_D41071F0_120ABDFB--\r
")); } send(sock,data,lstrlen(data),0); TCHAR cN[]="\r
.\r
"; // 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
"; // 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
"; // 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
"; 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
"; // 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
"); 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
"); 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:\r
"),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:\r
"),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
"; 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
From:%s\r
Subject: %s\r
" "Date:2012-8-24\r
X-Mailer:Kevin's mailer\r
MIME-Version:1.0\r
" "Content-Type: multipart/mixed;\r
" " boundary=\"----=_NextPart_5039E410_D41071F0_120ABDFB\";\r
" "This is a multi-part message in MIME format.\r
\r
" "------=_NextPart_5039E410_D41071F0_120ABDFB\r
" "Content-Type: multipart/alternative;\r
" " boundary=\"----=_NextPart_5039E410_D41071F0_53510C95\";\r
\r
" "------=_NextPart_5039E410_D41071F0_53510C95\r
" "Content-Type: text/plain;\r charset=\"gb2312\"\r
" "Content-Transfer-Encoding: base64\r
\r
"),mailAdd,userF,pTitle); strcat(SetMailHead,pText); // strcat(SetMailHead,TEXT("\r
\r
")); strcpy(data,SetMailHead); TCHAR SetMailHtml[1024]; // HTML wsprintf(SetMailHtml,TEXT("------=_NextPart_5039E410_D41071F0_53510C95\r
" "Content-Type: text/html;\r
" " charset=\"gb2312\"\r
" "Content-Transfer-Encoding: base64\r
\r
")); strcat(SetMailHtml,pText); // strcat(SetMailHtml,TEXT("\r
\r
------=_NextPart_5039E410_D41071F0_53510C95--\r
\r
")); strcat(data,SetMailHtml); if(TRUE==attach) // { strcat(data,file); // strcat(data,TEXT("------=_NextPart_5039E410_D41071F0_120ABDFB--\r
")); } send(sock,data,lstrlen(data),0); TCHAR cN[]="\r
.\r
"; // 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
"; // 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++プログラム設計に役立つことを願っています.