BOOL CEmailThread::DoThread( LPVOID pData ) { HANDLE phCmd[ 3 ]; phCmd[ 0 ] = m_hStop; phCmd[ 1 ] = m_hEmail; // Wait DWORD ret = WaitForMultipleObjects( 2, phCmd, FALSE, INFINITE ); // Verify range if ( ret < WAIT_OBJECT_0 ) return TRUE; // Get event index ret -= WAIT_OBJECT_0; // Check for stop if ( ret == 0 ) return FALSE; // Do we want to send an e-mail? else if ( ret == 1 ) { SendEmail(); ResetEvent( m_hEmail ); } // end else if return TRUE; }
int main(int artc, char **argv) { S8 s8EmailTo[128] = {"*****@*****.**"};/* 邮件发送地址 */ S8 s8EmailFrom[128] = {"*****@*****.**"};/* 邮件发送账户 */ S8 s8EmailPwd[128]= {"3306492351"}; /* 邮件发送账户密码 */ S8 s8EmailTitle[128]={"test"};/* 邮件标题 */ S8 s8EmailBody[1024]={"It's an email test with two jpeg picture!"};/* 邮件内容 */ S8 s8EmailAccount[128] ={"tango_zhu"}; S8 s8AttachName[32] = {"9.jpg"}; S8 s8AttachPath[32] = {"./9.jpg"}; S8 s8AttachName1[32] = {"8.jpg"}; S8 s8AttachPath1[32] = {"./8.jpg"}; int i; EMAIL_INFO_STRU stEmailInfo; ATTACHMENT_ARRAY_STRU stAttach; stEmailInfo.ps8EmailBody = s8EmailBody; stEmailInfo.ps8EmailFrom = s8EmailFrom; stEmailInfo.ps8EmailPwd = s8EmailPwd; stEmailInfo.ps8EmailTitle = s8EmailTitle; stEmailInfo.ps8EmailTo = s8EmailTo; stEmailInfo.ps8EmailAccount = s8EmailAccount; memset(&stAttach, 0, sizeof(ATTACHMENT_ARRAY_STRU)); stAttach.stAttachment[0].ps8FileName = s8AttachName; stAttach.stAttachment[0].ps8FilePath = s8AttachPath; stAttach.stAttachment[1].ps8FileName = s8AttachName1; stAttach.stAttachment[1].ps8FilePath = s8AttachPath1; stAttach.u32AttachSum = 2; while(1) { i ++; printf("send email %d times \n",i); SendEmail(&stEmailInfo, &stAttach); sleep(1800); } return 0; }
void main(int argc, char *argv[]) { void getBinPath(char* argv, char* des); char receiver[50]={0};//收件人 char subject[1024]={0}; //主题 char content[EMAILLEN]={0};//正文 FILE *fp; //printf("%s\n",argv[0]); char path[1024]; char path1[1024]; getBinPath(argv[0], path); //printf("%s\n", path); strcpy(path1, path); strcat(path1, "/receiver"); if(fp = fopen(path1,"r")) { fgets(receiver, 50, fp); fclose(fp); } else printf("open receiver fail\n"); strcpy(path1, path); strcat(path1, "/subject"); if(fp = fopen(path1,"r")) { fgets(subject, 1024, fp); fclose(fp); } else printf("open subject fail\n"); strcpy(path1, path); strcat(path1, "/content"); //下面先把content进行一次字符转换,不然在windows受到邮件中文会乱码 /***********/ char temp[1024]; // strcpy(temp, "iconv -f utf-8 -t gb2312 "); // strcpy(temp, "iconv -f utf-8 -t GPK "); strcpy(temp, "iconv -f UTF-8 -t CP936 "); strcat(temp, path1); strcat(temp, " -o "); strcat(temp, path); strcat(temp, "/content.temp"); //printf("%s\n",temp); system(temp); strcpy(temp, "mv "); strcat(temp, path); strcat(temp, "/content.temp "); strcat(temp, path1); //printf("%s\n", temp); system(temp); /***********/ if(fp = fopen(path1,"r")) { char temp[1024]={0}; while(1) { if(NULL == fgets(temp, 1024, fp)) break; strcat(content, temp); } fclose(fp); } else printf("open content fail\n"); //printf("%s\n",receiver); //printf("%s\n",subject); //printf("%s\n",content); SendEmail(receiver, content, subject); }
BOOL CHwSMTP::SendEmail ( LPCTSTR lpszSmtpSrvHost, LPCTSTR lpszUserName, LPCTSTR lpszPasswd, BOOL bMustAuth, LPCTSTR lpszAddrFrom, LPCTSTR lpszAddrTo, LPCTSTR lpszSubject, LPCTSTR lpszBody, LPCTSTR lpszCharSet, // 字符集类型,例如:繁体中文这里应输入"big5",简体中文时输入"gb2312" CStringArray *pStrAryAttach/*=NULL*/, LPCTSTR pStrAryCC/*=NULL*/, UINT nSmtpSrvPort,/*=25*/ LPCTSTR pSender, LPCTSTR pToList ) { TRACE ( _T("发送邮件:%s, %s\n"), lpszAddrTo, lpszBody ); m_StrAryAttach.RemoveAll(); m_StrCC += GET_SAFE_STRING(pStrAryCC); m_csSmtpSrvHost = GET_SAFE_STRING ( lpszSmtpSrvHost ); if ( m_csSmtpSrvHost.GetLength() <= 0 ) { m_csLastError.Format ( _T("Parameter Error!") ); return FALSE; } m_csUserName = GET_SAFE_STRING ( lpszUserName ); m_csPasswd = GET_SAFE_STRING ( lpszPasswd ); m_bMustAuth = bMustAuth; if ( m_bMustAuth && m_csUserName.GetLength() <= 0 ) { m_csLastError.Format ( _T("Parameter Error!") ); return FALSE; } m_csAddrFrom = GET_SAFE_STRING ( lpszAddrFrom ); m_csAddrTo = GET_SAFE_STRING ( lpszAddrTo ); // m_csFromName = GET_SAFE_STRING ( lpszFromName ); // m_csReceiverName = GET_SAFE_STRING ( lpszReceiverName ); m_csSubject = GET_SAFE_STRING ( lpszSubject ); m_csBody = GET_SAFE_STRING ( lpszBody ); this->m_csSender = GET_SAFE_STRING(pSender); this->m_csToList = GET_SAFE_STRING(pToList); m_nSmtpSrvPort = nSmtpSrvPort; if ( lpszCharSet && lstrlen(lpszCharSet) > 0 ) m_csCharSet.Format ( _T("\r\n\tcharset=\"%s\"\r\n"), lpszCharSet ); if ( m_csAddrFrom.GetLength() <= 0 || m_csAddrTo.GetLength() <= 0 ) { m_csLastError.Format ( _T("Parameter Error!") ); return FALSE; } if ( pStrAryAttach ) { m_StrAryAttach.Append ( *pStrAryAttach ); } if ( m_StrAryAttach.GetSize() < 1 ) m_csMIMEContentType = FormatString ( _T( "text/plain; %s" ), m_csCharSet); // 创建Socket m_SendSock.Close(); if ( !m_SendSock.Create () ) { int nResult = GetLastError(); m_csLastError.Format ( _T("Create socket failed!") ); return FALSE; } // 连接到服务器 if ( !m_SendSock.Connect ( m_csSmtpSrvHost, m_nSmtpSrvPort ) ) { m_csLastError.Format ( _T("Connect to [ %s ] failed"), m_csSmtpSrvHost ); TRACE ( _T("%d\n"), GetLastError() ); return FALSE; } if ( !GetResponse( _T("220") ) ) return FALSE; m_bConnected = TRUE; BOOL ret= SendEmail(); m_SendSock.Close(); return ret; }
BOOL CHwSMTP::SendSpeedEmail ( LPCTSTR lpszAddrFrom, LPCTSTR lpszAddrTo, LPCTSTR lpszSubject, LPCTSTR lpszBody, LPCTSTR lpszCharSet, CStringArray *pStrAryAttach, LPCTSTR pStrAryCC, UINT nSmtpSrvPort, LPCTSTR pSend ) { BOOL ret=true; CString To; To += GET_SAFE_STRING(lpszAddrTo); To += _T(";"); To += GET_SAFE_STRING(pStrAryCC); std::map<CString,std::vector<CString>> Address; int start = 0; while( start >= 0 ) { CString one= To.Tokenize(_T(";"),start); one=one.Trim(); if(one.IsEmpty()) continue; CString addr; addr = GetServerAddress(one); if(addr.IsEmpty()) continue; Address[addr].push_back(one); } std::map<CString,std::vector<CString>>::iterator itr1 = Address.begin(); for( ; itr1 != Address.end(); ++itr1 ) { PDNS_RECORD pDnsRecord; PDNS_RECORD pNext; DnsQuery(itr1->first , DNS_TYPE_MX,DNS_QUERY_STANDARD, NULL, //Contains DNS server IP address. &pDnsRecord, //Resource record that contains the response. NULL ); CString to; to.Empty(); for(int i=0;i<itr1->second.size();i++) { to+=itr1->second[i]; to+=_T(";"); } if(to.IsEmpty()) continue; pNext=pDnsRecord; while(pNext) { if(pNext->wType == DNS_TYPE_MX) if(SendEmail(pNext->Data.MX.pNameExchange,NULL,NULL,false, lpszAddrFrom,to,lpszSubject,lpszBody,lpszCharSet,pStrAryAttach,pStrAryCC, 25,pSend,lpszAddrTo)) break; pNext=pNext->pNext; } if(pNext == NULL) ret = false; //SendEmail(itr1.first,NULL,NULL,false,lpszAddrFrom,,lpszFromname); DnsRecordListFree(pDnsRecord,DnsFreeRecordList); } return ret; }