亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? smtp.c

?? 在嵌入式linux下發(fā)送郵件的SMTP客戶端程序。基于mips平臺可直接使用
?? C
?? 第 1 頁 / 共 4 頁
字號:
		iHour = atoi(strTime);
		
		//如果是指定星期幾發(fā)送,則需要匹配星期和時間信息, 如果需要每天發(fā)送,只需要匹配時間信息	
  	
		if((IsSameWeek(strWeek, weekly) == TTRUE)||(bDay == TTRUE))
		{
			//匹配時間信息			
			if(iHour == hour)
			{
			//需要重發(fā)郵件5次,確保郵件發(fā)送成功;
			 	for(i=0; i<5; i++)
			 	{
			 		if(SendMailInfo(m_smtp) == TFALSE)
			 		{
			 			printf("Send mail fail and this is %d times!\n", i+1);
			 		}
			 		else
			 		{
			 			bSendMail = TTRUE;
			 			break;
			 		}
			 	}	
	 		}				 	 			 	
		}	
	
		//如果發(fā)送郵件成功,則繼續(xù)等待最小一個小時+15分鐘
		if(bSendMail == TTRUE)
		{
			sleep(60*60 + 60*15);
			bSendMail = TFALSE;
		}
		//沒有郵件發(fā)送,則缺省等待2分鐘
		else
		{
			sleep(60*2);
		}	
	}
}

//發(fā)送郵件信息
BOOL SendMailInfo(SMTP struMail) 
{	
	//創(chuàng)建套接字
	Create(); 

	//連接SMTP服務(wù)器
	if(!ConnectSMTP(struMail))
	{
		printf("Connect fail!\n");
		return TFALSE;
	}

	//發(fā)送MAIL命令
	if(!Mail(struMail))
	{
		printf("Mail fail!\n");
		return TFALSE;
	}
	
	//發(fā)送TO命令
	if(!SetTo(struMail))
	{
		printf("SetTo fail!\n");
		return TFALSE;
	}
	
	//發(fā)送DATA命令
	if(!Data(struMail))
	{
		printf("Data fail!\n");
		return TFALSE;
	}
	
	sleep(1);
	
	//發(fā)送QUIT命令
	if(!Disconnect())
	{
		printf("Disconnect fail!\n");
		return TFALSE;
	}
	
	//關(guān)閉sokcet通訊連接
	CloseSocket();
	return TTRUE;
	
}

//檢查郵件信息的合法性
BOOL CheckMailInfo(SMTP struMail)
{
	BOOL bRet = TTRUE;

	//檢查SMTP服務(wù)器的信息	
	if(strlen(struMail.m_strSMTPServer) <= 0)
	{
		printf("The Info of SMTP Server is invalid!\n");
		return TFALSE;
	}
	
	//檢查FROM的信息
	if(strlen(struMail.m_strSendFrom ) <= 0)
	{
		printf("The Info of From  is invalid!\n");
		return TFALSE;
	}
	
	//檢查用戶帳號信息	
	if(strlen(struMail.m_strUSERID ) <= 0)
	{
		printf("The Info of USERID  is invalid!\n");
		return TFALSE;
	}
	
	//檢查密碼信息	
	if(strlen(struMail.m_strPWD) <= 0)
	{
		printf("The Info of PWD  is invalid!\n");
		return TFALSE;
	}
	
	//檢查TO的信息
	if(strlen(struMail.m_strSendTo) <= 0)
	{
		printf("The Info of TO  is invalid!\n");
		return TFALSE;
	}	
	
	return bRet;
}

//對指定的字符串進行BASE64編碼
void EnCodeString(char* strSoure,char* strEnCode)
{
	char*	pszBody = NULL;
	int		dwSize = 0;
	int		nBodySize = 0;
	char*	pszEncoded = NULL;
	int		nEncodedSize = 0;
	int		nInPos = 0;
	int		nOutPos = 0;
	int		nThisLineSize = 0;
	//編碼
	Base64Coder Coder;
	dwSize = strlen(strSoure);
	EncodeBase(&Coder, (const unsigned char *)strSoure, dwSize);	
	
	//形成編碼后的發(fā)送內(nèi)容
	pszEncoded = EncodedMessage(Coder);
	nEncodedSize = EncodedMessageSize(Coder);
	nBodySize = nEncodedSize + (((nEncodedSize/76)+1)*2) + 1;
	pszBody = (char*)malloc(nBodySize);
	//檢查分配內(nèi)存是否成功
	if(pszBody == NULL)
	{
		return;
	}
	
	memset(pszBody, 0, nBodySize);
	--nBodySize; 	
	
	while (nInPos < nEncodedSize)
	{
		nThisLineSize = min(nEncodedSize - nInPos, SMTP_MAXLINE);
		memcpy(&pszBody[nOutPos], &pszEncoded[nInPos], nThisLineSize);
		nOutPos += nThisLineSize;
		memcpy(&pszBody[nOutPos], "\r\n", 2);
		nOutPos += 2;
		nInPos += nThisLineSize;
	}
	//以空字符串結(jié)束
	pszBody[nOutPos] = '\0'; 
	strcpy(strEnCode, pszBody);

	if(pszBody != NULL)
	{
		free(pszBody);
		pszBody = NULL;
	}
	
}

//根據(jù)Quoted printable編碼規(guī)則對數(shù)據(jù)進行編碼處理
void QuotedPrintableEncode(char* sText, char* strEncode)
{
    int				i = 0;
    char*			sTemp = NULL;	
	char*			sOut = NULL;	
    int				nStartLine = 0;
    int				nLen = 0;
    int				nSize  = 0;
	unsigned char	c;
	BOOL			bInWord = TTRUE;

	nSize = strlen(sText);
	sTemp = (char*)malloc(1024+nSize);
    for (i=0; i<nSize; i++)
    {
        c = (unsigned char) sText[i];
        //對字符進行編碼處理
        if (((c >= 33) && (c <= 60)) || ((c >= 62) && (c <= 126)) || (c == '\r') || (c == '\n') || (c == '\t') || (c == ' '))
        {
            //sTemp += char(c);   
            strcat(sTemp, (char *)c);         
        }
        else
        {      
            strcat(sTemp, "=");
            strcat(sTemp, (const char *)(HexDigit((c & 0xF0) >> 4)));
            strcat(sTemp, (const char *)(HexDigit(c & 0x0F)));
        }
    }
    
    //插入分割信息
    i=0;    
    nStartLine = 0;
    nLen = strlen(sTemp);
	sOut = (char*)malloc(1024+nLen);
    for (i=0; i<nLen; i++)
    {
        c = (unsigned char) sTemp[i];
        
        if (c == '\n' || c == '\r' || i == (nLen-1))
        {
            strcat(sOut, substr(sTemp, nStartLine, i-nStartLine+1));
            nStartLine = i+1;
            continue;
        }
        
        if ((i - nStartLine) > SMTP_MAXLINE)
        {
            bInWord = TTRUE;
            while (bInWord)
            {
                bInWord = (BOOL)(!isspace(c) && sTemp[i-2] != '=');
                if (bInWord)
                {
                    --i;
                    c = (unsigned char) sTemp[i];
                }
                
                if (i == nStartLine)
                {
                    i = nStartLine + SMTP_MAXLINE;
                    break;
                }
            }
            
            strcat(sOut, substr(sTemp, nStartLine, i-nStartLine+1));
            strcat(sOut,  "=\r\n");
            nStartLine = i+1;
        }
    }
    
    strEncode = sOut;

	if(sTemp != NULL)
	{
		free(sTemp);
		sTemp = NULL;
	}
    
}


char HexDigit(int nDigit)
{
	if (nDigit < 10)
	{
		return (char) (nDigit + '0');
	}
	else
	{
		return (char) (nDigit - 10 + 'A');
	}
}

//對SUBJECT信息進行編碼處理
char* EnSubJectCodeString(char* sText)
{
	//char* strEncode = NULL;
	const char*		strTmp = "=?";
	unsigned char	c;
	char*			sOut = NULL;
	int				nSize = 0;
	BOOL			bTranslationNeeded = TFALSE;
	int				i = 0;
	
	//檢查是否需要進行編碼
	for (i=0; i<nSize && !bTranslationNeeded; i++)
	{
		c = (unsigned char) sText[i];    
		if(c > 127)
		{
			bTranslationNeeded = TTRUE;    		
		} 
	}
	
	nSize = strlen(sText);
	sOut = (char*)malloc(nSize + 128);
	if(sOut == NULL)
	{
		return NULL;
	}
	memset(sOut, 0, nSize + 128);
	//需要進行編碼處理
	if (bTranslationNeeded)
	{
		strcpy(sOut, strTmp);
		strcat(sOut, g_stCharset);
		strcat(sOut, "?q?");		
		QuotedPrintableEncode(sText, sText);	
		strcat(sOut, sText);
		strcat(sOut, "?=");		
	}
	//不需要進行編碼處理
	else
	{   
		strcpy(sOut, sText); 
		sOut = sText;
	}
	//strcpy(strEncode, sOut); 
	return sOut;
	
	
}

//對郵件體BODY信息進行編碼處理
void EnBodyCodeString(char* sText, char* strEncode)
{
	int				nSize = strlen(sText);
	BOOL			bTranslationNeeded = TFALSE;
	unsigned char	c; 
	char*			sOut = NULL;
	int				i = 0;
	
	//檢查是否需要進行編碼	
	for (i=0; i<nSize && !bTranslationNeeded; i++)
	{
		c = (unsigned char) sText[i];
		if(c > 127)
		{
			bTranslationNeeded = TTRUE;    		
		}     
	}
	
	
	sOut = (char*)malloc(1024);
	if(sOut == NULL)
	{
		return;
	}

	//需要進行編碼處理
	if (bTranslationNeeded)
	{	   
		QuotedPrintableEncode(sText, sOut);	
	}
	//不需要進行編碼處理
	else
	{ 		
		strcpy(sOut, sText);
	}
	strcpy(sOut, strEncode);
	
}


BOOL Create()
{
	//win socket 初始化信息
	g_hSocket = socket(AF_INET, SOCK_STREAM, 0);
	if(g_hSocket != -1)
	{
		printf("Create socket successfully!\n");
		return TTRUE;
	}
	else
	{
		printf("Create socket fail!\n");
		return TFALSE;
	}	
}

BOOL ConnectServer( const char* pszHostAddress, int nPort)
{
	//驗證主機地址 
	//驗證是否socket被創(chuàng)建 
	//遠程服務(wù)器地址	

	struct sockaddr_in server_address;
	memset(&server_address, 0, sizeof(server_address));
	server_address.sin_family = AF_INET;
	server_address.sin_port = htons((u_short)nPort);
	server_address.sin_addr.s_addr = inet_addr(pszHostAddress);

  	if (server_address.sin_addr.s_addr == INADDR_NONE)
	{	  
		struct hostent* lphost;
		lphost = gethostbyname(pszHostAddress);
		if (lphost != NULL)
		{
			server_address.sin_addr.s_addr = ((struct in_addr*)lphost->h_addr)->s_addr;			
		}
		else
		{			 
			return TFALSE;
		}
	}

  //調(diào)用另外一個多態(tài)函數(shù)connect連接到服務(wù)器	
	return ConnectSvr((struct sockaddr *)&server_address, sizeof(server_address));
	

	
}

BOOL ConnectSvr(const struct sockaddr* lpSockAddr, int nSockAddrLen)
{
	int result = -1;
	result = connect(g_hSocket, lpSockAddr, nSockAddrLen);
	if(result == -1)
	{		
		printf("Connect socket fail!\n");
		return TFALSE;
	}
	else
	{		
		return TTRUE;
	}
}

BOOL SendDate(const char* pszBuf, int nBuf)
{
	int result = -1;
	result = send(g_hSocket, pszBuf, nBuf, 0);
	if(result == -1)
	{
		printf("Send socket fail!\n");
		return TFALSE;
	}
	else
	{
		printf("Send Date: %s\n", pszBuf);		
		return TTRUE;
	}
}

int Receive(char* pszBuf, int nBuf)
{
	int result = -1;
	result = recv(g_hSocket, pszBuf, nBuf, 0); 
	if(result == -1)
	{
		printf("Receive socket fail!\n");
		return TFALSE;
	}
	else
	{		
		printf("Reveive Date: %s\n", pszBuf);
		return TTRUE;
	}
}

void CloseSocket()
{
	if (g_hSocket != -1)
	{	
		//close(g_hSocket);
		g_hSocket = -1;
	}
}

/*
BOOL IsReadable(BOOL bReadible)
{
	mytimeval timeout = {0, 0};
	fd_set fds;
	FD_ZERO(&fds);
	FD_SET(g_hSocket, &fds);
	int nStatus = select(0, &fds, NULL, NULL, &timeout);
	if (nStatus == -1)
	{
		return TFALSE;
	}
	else
	{
		if(nStatus == 1)
		{
			bReadible = TTRUE;
		}
		else
		{
			bReadible = TFALSE;    
		}
		return TTRUE;
	}
}
*/
//*****************字符串處理函數(shù)********************//
//獲取子字符串信息
char*  substr(char* pstrChar, int iBegin, int nLength)
{
	
    //數(shù)據(jù)合法性檢驗    
    int iLength = 0;
    char*  strTemp = NULL;
    iLength = strlen(pstrChar);    
	
    strTemp = (char*)malloc(nLength+1);
	if(strTemp == NULL)
	{
		printf("malloc function fail in substr\n!");
		return NULL;
	}
    memset(strTemp, 0, nLength+1);
    if(nLength > (iLength - iBegin) )
    {
        memcpy(strTemp, &pstrChar[iBegin], iLength - iBegin);
    }
    else
    {
        memcpy(strTemp, &pstrChar[iBegin], nLength);
    }
    
    return strTemp;
	
}

//查找指定字符串
int   find(char* pstrChar, const char* strSoure)
{
    int		npos = -1;
	int		i = 0;
    int		ilength = 0;
    int		count = 0;

	ilength = strlen(pstrChar);
    count = strlen(strSoure);
    //如果長度太長
    if( count > ilength)  
    {
        return npos;  
    }               
	
    //從左邊開始比較   
    for(i = 0 ; i<ilength; i++)                                              
    { 
        //如果數(shù)據(jù)相等        
        if( strncmp(&pstrChar[i], strSoure, count) == 0 )   
        {
            return i;  
        }
    }                                                                             
    return npos;    
	
}
//查詢函數(shù)
int  rfind(char* strData, const char* strSoure)
{
    int			npos = -1;
	char*		strTemp = NULL;
    int			ilength = 0;
    int			count = 0;
    int end_pos = 0;
	
	ilength = strlen(strData);
    count = strlen(strSoure);
    //如果長度太長
    if( count > ilength)  
    {
        return npos;  
    }
	
   
    strTemp = (char*)malloc(ilength +1);
	if(strTemp == NULL)
	{
		return npos; 
	}
    memset(strTemp, 0, ilength +1);
	
    //從右邊的第count位開始比較
    end_pos = ilength - count - 1;                          
    
    //從右邊數(shù)據(jù)開始比較
    for( ++end_pos; end_pos-- > 0; )                                              
    { 
        //如果數(shù)據(jù)相等
        memset(strTemp, 0, ilength +1);
        memcpy(strTemp, &strData[end_pos], count);
        if( strncmp(&strData[end_pos], strSoure, count) == 0 )   
        {
            return end_pos;  
        }
    }                                                                             
    return npos;             
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品一区免费视频| 日韩一区二区免费视频| 3d动漫精品啪啪| 国产三级欧美三级日产三级99| 一区2区3区在线看| 国产精品资源站在线| 欧美乱熟臀69xxxxxx| 国产亚洲精品资源在线26u| 亚洲图片自拍偷拍| 成人午夜激情影院| 日韩精品一区二区三区视频| 一区二区三区欧美久久| 国产 日韩 欧美大片| 日韩女优av电影在线观看| 午夜视黄欧洲亚洲| 91免费在线看| 国产精品视频免费| 国产一区二区三区精品视频| 91麻豆精品国产91久久久久久久久 | 国产99一区视频免费| 欧美日韩1区2区| 亚洲三级在线免费观看| 成人国产精品免费观看视频| 精品欧美一区二区久久| 日产精品久久久久久久性色| 色偷偷久久人人79超碰人人澡| 国产精品久久久久久亚洲毛片| 精品亚洲欧美一区| 欧美成人三级电影在线| 美女视频一区在线观看| 欧美一区二区日韩一区二区| 五月天中文字幕一区二区| 欧美午夜不卡在线观看免费| 亚洲一区成人在线| 欧美伊人久久久久久久久影院| 亚洲老妇xxxxxx| 97久久精品人人澡人人爽| 国产精品亲子伦对白| 99热在这里有精品免费| 国产精品高潮久久久久无| 99久久国产免费看| 一区二区三区波多野结衣在线观看| 91原创在线视频| 亚洲综合色噜噜狠狠| 欧洲生活片亚洲生活在线观看| 亚洲一区在线免费观看| 欧美视频在线播放| 日本视频中文字幕一区二区三区| 91麻豆精品久久久久蜜臀| 亚洲成a人片综合在线| 欧美精品xxxxbbbb| 精品一区二区三区视频在线观看| 久久综合九色综合97_久久久| 国产成人精品一区二| 成人欧美一区二区三区白人| 91最新地址在线播放| 亚洲成人中文在线| 精品国产123| 成人动漫视频在线| 日本伊人精品一区二区三区观看方式 | 91精品欧美综合在线观看最新 | 亚洲成人自拍网| 日韩视频一区二区三区| 国产精品一区在线观看你懂的| 中文在线资源观看网站视频免费不卡| 91小宝寻花一区二区三区| 亚洲福中文字幕伊人影院| 精品欧美黑人一区二区三区| 99精品国产91久久久久久 | 欧美日韩精品是欧美日韩精品| 日韩精品视频网| 久久久久久亚洲综合| 在线亚洲高清视频| 激情文学综合网| 一区二区三区日本| 2014亚洲片线观看视频免费| 91在线国产观看| 美女视频第一区二区三区免费观看网站| 久久九九全国免费| 欧美日韩一区国产| 国产乱子伦视频一区二区三区 | 精品国产91洋老外米糕| 日本高清不卡在线观看| 国产一区二区三区黄视频 | 国产欧美日韩综合精品一区二区| 欧美性高清videossexo| 国产91精品入口| 天天色 色综合| 亚洲欧美国产三级| 国产日韩综合av| 亚洲福利视频一区二区| 国产综合色在线视频区| 欧美大度的电影原声| 色呦呦日韩精品| 亚洲精品成人精品456| 欧美伦理视频网站| 国产成人综合精品三级| 一区二区三区蜜桃网| 99久久精品免费观看| 国产成人精品影院| 日韩成人av影视| 中文字幕亚洲精品在线观看| 5858s免费视频成人| 成人avav在线| 精品一区二区三区影院在线午夜| 天天色综合天天| 中文字幕一区在线观看视频| 91精品久久久久久蜜臀| 99精品视频一区二区三区| 日韩成人免费电影| 亚洲精品午夜久久久| 欧美艳星brazzers| 色94色欧美sute亚洲线路一ni| 国产露脸91国语对白| 日韩国产一二三区| 亚洲伦理在线精品| 国产欧美一区二区精品婷婷| 欧美日韩一区成人| 3d成人h动漫网站入口| 欧美综合一区二区三区| 北条麻妃一区二区三区| 久久狠狠亚洲综合| 五月天中文字幕一区二区| 亚洲天堂福利av| 亚洲综合精品久久| 亚洲色图自拍偷拍美腿丝袜制服诱惑麻豆 | 国产精品一区在线观看你懂的| 日韩成人av影视| 日韩和欧美一区二区| 亚洲一区二区三区爽爽爽爽爽| 亚洲高清视频中文字幕| 一区二区三区蜜桃| 亚洲一区自拍偷拍| 亚洲资源中文字幕| 一区二区三区成人| 亚洲色图欧美在线| 午夜视频在线观看一区| 亚洲成av人片一区二区梦乃| 亚洲线精品一区二区三区 | 欧美极品美女视频| 中文字幕+乱码+中文字幕一区| 欧美精品一区二区精品网| 欧美成人video| 欧美一级爆毛片| 久久综合久久99| 久久一夜天堂av一区二区三区| 国产精品免费丝袜| 亚洲人成小说网站色在线 | 精品电影一区二区三区| 7777精品久久久大香线蕉| 国产亚洲女人久久久久毛片| 国产情人综合久久777777| 亚洲国产精品传媒在线观看| 国产精品初高中害羞小美女文 | 911精品产国品一二三产区| 欧美丝袜自拍制服另类| 精品国产网站在线观看| 亚洲免费成人av| 天天色图综合网| 国产一区三区三区| 成人av动漫在线| 欧美视频一区在线观看| 日韩免费电影一区| 国产欧美一区二区精品忘忧草| 国产精品白丝在线| 亚洲成人你懂的| 亚洲一区二区在线免费观看视频 | 成人性生交大片免费看中文| 国产精品原创巨作av| 99精品久久免费看蜜臀剧情介绍| 欧美亚洲综合色| 日韩免费性生活视频播放| 国产精品欧美久久久久一区二区| 夜夜精品视频一区二区 | 国产高清在线观看免费不卡| jiyouzz国产精品久久| 欧美美女视频在线观看| 国产欧美日韩在线| 亚洲精品伦理在线| 成人免费三级在线| 欧美精品欧美精品系列| 亚洲国产精品传媒在线观看| 天堂午夜影视日韩欧美一区二区| 国产一区二区看久久| 91精品婷婷国产综合久久| 中文字幕亚洲一区二区va在线| 日本午夜一区二区| 成人av网址在线| 日韩色在线观看| 午夜精品久久久久久久| 99精品欧美一区二区蜜桃免费| 欧美一激情一区二区三区| 亚洲麻豆国产自偷在线| 久久99在线观看| 日韩欧美国产小视频| 亚洲男人天堂av| 国产成人夜色高潮福利影视| 欧美一区午夜精品| 亚洲成av人片一区二区梦乃| 色婷婷av一区|