⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 maillip.c

📁 基于S3C4510的家庭网关的通讯进程程序源码
💻 C
📖 第 1 页 / 共 3 页
字号:
   if (smtp->strMessageBody && *smtp->strMessageBody)      {      strcat (strOut, "\r\n--Message-Boundary-21132\r\n");      strcat (strOut, "Content-Type: multipart/alternative;boundary=\"   \                 Message-Boundary-21132\"\r\n");      strcat (strOut, "\r\n");      smtp_send_data (iSocket, strOut);      smtp_send_data (iSocket, "\r\n");       *strOut = '\0';      strcat (strOut, "\r\n--Message-Boundary-21132\r\n");      strcat (strOut, "Content-Type: text/plain; charset=US-ASCII\r\n");      strcat (strOut, "Content-Transfer-Encoding: 7BIT\r\n");      strcat (strOut, "Content-description: Body of Messagebody\r\n\r\n");      strcat (strOut, "\r\n");          smtp_send_data (iSocket, strOut);      smtp_send_data (iSocket, "\r\n");      smtp_send_data (iSocket, smtp->strMessageBody);      smtp_send_data (iSocket, "\r\n");          smtp_send_data (iSocket, "\r\n--Message-Boundary-21132--\r\n");      smtp_send_data (iSocket, "\r\n");      }//end if there is a message body            *strOut = '\0';      if(smtp->strattachment && *smtp->strattachment)      {      	strcat (strOut, "\r\n--Message-Boundary-21132\r\n");        strcat (strOut, "Content-Type: application/msword; name=\"attachment\"\r\n");        strcat (strOut, "Content-Transfer-Encoding: base64\r\n");        strcat (strOut, "Content-description: Body of attachment\r\n\r\n");        smtp_send_data (iSocket, strOut);        smtp_send_data (iSocket, "\r\n");        smtp_send_data (iSocket, smtp->strattachment);        smtp_send_data (iSocket, "\r\n");        smtp_send_data (iSocket, "\r\n--Message-Boundary-21132--\r\n");        smtp_send_data (iSocket, "\r\n");	       }//end if there is a message attachment   /* This ends the message. */   smtp_send_data (iSocket, ".\r\n");   if (getreply (iSocket, smtp) > 400)      return -7;   /* Now log off the SMTP port. */   smtp_send_data (iSocket, "QUIT\n");   if (getreply (iSocket, smtp) > 400)   	return -8;   /*Clean-up. Close the port up. */   #if (!TESTING)	if ((smtp->sock_fd = close(smtp->sock_fd)) < 0)		{		if (show_progress)		   fprintf(stderr, "ERROR: failed to close SMTP Connection through, 		             errno=%d\n",errno);		return(-1);		} 	#endif   return 0;	} /***************************************************************从邮件服务器得到回答并解析是否出错***************************************************************/static int getreply (int iSocket, SMTP *smtp)	{  	char strRetBuff[513];   #if TESTING   return(1);	//make believe that all was well   #endif   *strRetBuff = 0;   read (iSocket, strRetBuff, 512);   /* See if we have not gotten a response back from the mail server. */   if (!*strRetBuff)     	{   	return 777;     	}   trim (strRetBuff);   strRetBuff[3] = (char)0;   return atoi (strRetBuff);	} /******************************************************************    Synopsis: Gets a sub-string from a formated string. nice strtok    replacement.    usage:      char strarray[] = { "123,456,789,abc" };      char strretbuff[4];      getstrfld (strarray, 2, 0, ",", strretbuff);    This would return the string "789" and place it also in strretbuff.    Returns a NULL if fldno is out of range, else returns a pointer to    head of the buffer.  ********************************************************************/char * getstrfld (char *strbuf, int fldno, int ofset, char *sep, char *retstr)	{   char *offset, *strptr;   int curfld;   offset = strptr = (char *)NULL;   curfld = 0;   strbuf += ofset;   while (*strbuf)     {       strptr = !offset ? strbuf : offset;       offset = strpbrk ((!offset ? strbuf : offset), sep);       if (offset)          offset++;       else if (curfld != fldno)         {           *retstr = (char)NULL;           break;         }       if (curfld == fldno)         {           strncpy (retstr, strptr,              (int)(!offset ? strlen (strptr)+ 1 :              (int)(offset - strptr)));           if (offset)              retstr[offset - strptr - 1] = 0;           break;         }       curfld++;     }   return retstr;	} 			/***************************************************************消除字符串的空格并返回字符串的首地址***************************************************************/char * trim (char *strin)	{    ltrim (strin);    strcrop (strin);    return strin;	}#define deletechar(strbuf,pos) strcpy((strbuf+pos),(strbuf+pos+1))/*******************************************************************删除字符串中超前的空格,返回指向第一个非空格字符的地址,遇到NULL结束*******************************************************************/char * ltrim (char *string)	{   	while (isspace(*string))       deletechar(string,0);   	return string;	}/*****************************************************************************舍去字符串中的空格,检测字符串最后一个非空格字符,返回字符串,如果为空则返回NULL*****************************************************************************/char * strcrop (char *string)	{    char *last;    if (string)      	{        last = string + strlen (string);        while (last > string)          	{            if (!isspace (*(last - 1)))                break;            last--;          	}        *last = 0;      	}    return (string);	}/**************************************************************将字符串合并为一个,并将其附加到已经存在的目的串中**************************************************************/char * xstrcat (char *dest, const char *src, ...)	{    char *feedback = dest;    va_list va;    while (*dest)       //找到字符结束        dest++;    va_start (va, src);    while (src)      	{        while (*src)            *dest++ = *src++;        src = va_arg (va, char *);      	}     *dest = '\0';              va_end (va);    return (feedback);	}/***********************************************************************将多个字符串合并成一个,如果目的串是空那么用给定的长度来重新分配一个新串,如果内存空间太小返回NULL***********************************************************************/char * xstrcpy (char *dest, const char *src, ...)	{    const char *src_ptr;    va_list va;    size_t dest_size;           //连接字符串的大小    //分配一个新的字符串(如果需要)	if (dest == NULL)      	{        va_start (va, src);     //开始变量参数处理        src_ptr   = src;        dest_size = 1;                         while (src_ptr)          	{            dest_size += strlen (src_ptr);            src_ptr = va_arg (va, char *);          	}         va_end (va);           //结束变量参数处理		  dest = (char *) malloc(dest_size);        if (dest == NULL)            return (NULL);     //内存太小返回NULL      	}     //开始把字符串复制到连接字符串中    va_start (va, src);        //开始变量参数处理    src_ptr  = src;    dest [0] = '\0';    while (src_ptr)      	{        strcat (dest, src_ptr);        src_ptr = va_arg (va, char *);      	}    va_end (va);               //结束变量参数处理    return (dest);	} /***************************************************************用别的字符来替代字符串中已知字符***************************************************************/char * replacechrswith (char *strbuf, char *chrstorm, char chartorlcwith)	{   char *offset;   offset = (char *)NULL;   while (*strbuf)      {         offset = strpbrk (strbuf, chrstorm);         if (offset)           {             *(offset)= chartorlcwith;           }         else             break;      }   return strbuf;	} /**************************************************************用write函数发送数据信息**************************************************************/	void smtp_send_data(int sock,char * strout)	{	#if (!TESTING)	write (sock, strout, strlen(strout));	#endif	} /**********************************************************************建立smtp连接**********************************************************************/int smtp_connect(SMTP * smtp)	{	struct sockaddr_in address;	int len;	int result;		#if TESTING	return(1);	#endif	printf("Connecting to SMTP Server at %s.\n",smtp->strSmtpServer);	//新建一个socket	if ((smtp->sock_fd = socket(AF_INET, SOCK_STREAM, 0)) < 0)		{		fprintf(stderr, "ERROR: failed to open Socket, errno = %d.\n",errno);		return(-1);		} 	address.sin_family = AF_INET;	address.sin_addr.s_addr = inet_addr(smtp->strSmtpServer);	address.sin_port = __constant_htons(25);      //smtp的端口号	len = sizeof(address);	result = connect(smtp->sock_fd,(struct sockaddr *)&address,len);	if (result == -1)		{		//connect failed		fprintf(stderr, "ERROR: failed to open SMTP Connection, errno=%d\n", errno);		return(-1);		} 	printf("Connection Made to SMTP Server.\n");	return(smtp->sock_fd);	//返回文件描述符	} 	/*****************************************************************************时间的计算格式*****************************************************************************/		#define GET_MONTH(d)        (int) (((d) % 10000L) / 100)#define GET_DAY(d)          (int) ( (d) % 100)#define GET_CCYEAR(d)       (int) ( (d) / 10000L)#define GET_YEAR(d)         (int) (((d) % 1000000L) / 10000L)#define GET_HOUR(t)         (int) ( (t) / 1000000L)#define GET_MINUTE(t)       (int) (((t) % 1000000L) / 10000L)#define GET_SECOND(t)       (int) (((t) % 10000L) / 100)#define MAKE_DATE(c,y,m,d)  (long) (c) * 1000000L +                          \                            (long) (y) * 10000L +                            \                            (long) (m) * 100 + (d)#define MAKE_TIME(h,m,s,c)  (long) (h) * 1000000L +                          \                            (long) (m) * 10000L +                            \                            (long) (s) * 100 + (c)/****************************************************************************用RFC1123格式来加密时间,其格式是:12日,1月,1995年 12:05:01(当地时间)如果时间正确则返回时间,否则返回“?”****************************************************************************/char * encode_mime_time (long date, long time)	{    int        day_week,               //星期几(0表示星期天)        month;                  //月数    static char        buffer [50];    local_to_gmt (date, time, &date, &time);    day_week = day_of_week (date);    month    = GET_MONTH   (date);    if (day_week >= 0 && day_week < 7 && month > 0 && month < 13)      {        sprintf (buffer, "%s, %02d %s %04d %02d:%02d:%02d GMT",                         days       [day_week],

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -