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

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

?? ssmtp.c

?? ssmt郵件服務(wù)器armlinux下的郵件開發(fā)
?? C
?? 第 1 頁 / 共 3 頁
字號:
///////////////////////////////////////////////////////////////////////// FILE DESCRIPTION//	This file plays as simple SMTP (ssmtp) client communication//// NOTE//	For each response we wait 5 seconds since,//	you know, wireless LAN is unstable, sometimes.////	For attached file sending, we encoded it as base 64 MIME//	format by using free sourcing encode package.////	Each time sending mail, the number of attachment is only one//	Adjust it if you need to send out more than one attachments//	at function encode	//// VERSION//	0.01 (2005/11/7)//// AUTHOR//	Jerry Huang///////////////////////////////////////////////////////////////////////#include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <string.h>#include <sys/types.h>#include <sys/socket.h>#include <sys/param.h>#include <sys/time.h>#include <netinet/in.h>#include <netdb.h>#include <ctype.h>#include <arpa/inet.h>#include <errno.h>#include <fcntl.h>#include "ssmtp.h"///////////////////////////////////////////////////////////////////////// Functions///////////////////////////////////////////////////////////////////////extern char *md5digest(FILE *infile, long int *len);extern int to64(FILE *infile, FILE *outfile, long int limit);int ssmtp_usage(void);int ssmtp_init(SMTP_Client_Info *smtpinfo, int argc, char *argv[]);int ssmtp_connect(SMTP_Client_Info *smtpinfo);int ssmtp_read(SMTP_Client_Info *smtpinfo, char *buf);int ssmtp_send(SMTP_Client_Info *smtpinfo, char *buf);int ssmtp_ready(SMTP_Client_Info *smtpinfo, char *buf);int ssmtp_helo(SMTP_Client_Info *smtpinfo, char *status_code);int ssmtp_ehlo(SMTP_Client_Info *smtpinfo, char *status_code);int ssmtp_mail(SMTP_Client_Info *smtpinfo, char *status_code);int ssmtp_rcpt(SMTP_Client_Info *smtpinfo, char *status_code);int ssmtp_data(SMTP_Client_Info *smtpinfo, char *status_code);int ssmtp_content(SMTP_Client_Info *smtpinfo, char *status_code);int ssmtp_auth(SMTP_Client_Info *smtpinfo);int ssmtp_quit(SMTP_Client_Info *smtpinfo);void ssmtp_failed(int error_code);///////////////////////////////////////////////////////////////////////// Global Variables///////////////////////////////////////////////////////////////////////static char mail_date[100];static char *mail_subject="Alarm from IP-camera";static char *tmp_host="";static char *tmp_fromaddr="IP-camera";static char *tmp_toaddr="";static char *tmp_domain="";static char *tmp_auth_user="";static char *tmp_auth_pass="";static char *tmp_port="";static char *tmp_auth="";static char attachment[80];static char *mail_body="Motion detected as attachment!";static char mimetmpfile[80];// Description of the various file formats and their magic numbersstruct magic{    char *name;	// Name of the file format    char *num;	// The magic number    int len;	// Length of same (0 means strlen(magicnum))};// The magic numbers of the file formats we know aboutstatic struct magic magic[] ={    { "image/gif", "GIF", 0 },    { "image/jpeg", "\377\330\377", 0 },    { "video/mpeg", "\0\0\001\263", 4 },    { "application/postscript", "%!", 0 },};static int num_magic = (sizeof(magic)/sizeof(magic[0]));static int max_magiclen = 0; // The longest magic numberstatic char *default_type = "application/octet-stream";static const char base64digits[] =   "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";static char ssmtp_stored_message[MAXDATASIZE];///////////////////////////////////////////////////////////////////////// Function sendall////	be sure that system call send() sent out all data/////////////////////////////////////////////////////////////////////////int sendall(int s, char *buf, int len){	int total = 0;			// how many bytes we sent	int bytesleft = len;	// how many we have left to send	int n;		while(total < len)	{		n = send(s, buf+total, bytesleft, 0);		if (n < 0)		{			perror("send");			return -1;		}				total += n;		bytesleft -= n;	}	len = total;	// number of bytes actually sent	return 0;		// return -1 on failure, 0 on success}///////////////////////////////////////////////////////////////////////// Function magic_look////	Determins the format of the file "inputf".  The name//	of the file format (or NULL on error) is returned./////////////////////////////////////////////////////////////////////////char *magic_look(FILE *infile){    int i, j;    char buf[80];    int numread = 0;    if (max_magiclen == 0)    {		for (i=0; i<num_magic; i++)		{		    if (magic[i].len == 0) magic[i].len = strlen(magic[i].num);		    if (magic[i].len > max_magiclen) max_magiclen = magic[i].len;		}    }    numread = fread(buf, 1, max_magiclen, infile);    rewind(infile);    for (i=0; i<num_magic; i++)    {		if (numread >= magic[i].len)		{		    for (j=0; j<magic[i].len; j++)		    {				if (buf[j] != magic[i].num[j]) break;		    }		    if (j == magic[i].len) return magic[i].name;		}    }    return default_type;}///////////////////////////////////////////////////////////////////////// Function os_genid////	Generate a message-id/////////////////////////////////////////////////////////////////////////char *os_genid(void){    static int pid = 0;    static time_t curtime;    static char hostname[MAXHOSTNAMELEN+1];    char *result;    struct hostent *hp;        if (pid == 0)    {		pid = getpid();		time(&curtime);		gethostname(hostname, sizeof(hostname));			// If we don't have a FQDN, try canonicalizing with gethostbyname		if (!strchr(hostname, '.'))		{		    hp = gethostbyname(hostname);		    if (hp)		    {				strcpy(hostname, hp->h_name);		    }		}    }    result = malloc(25+strlen(hostname));    sprintf(result, "%d.%d@%s", pid, curtime++, hostname);    return result;}///////////////////////////////////////////////////////////////////////// Function os_createnewfile////	create file for encoded MIME output/////////////////////////////////////////////////////////////////////////FILE *os_createnewfile(char *fname){    int fd;    FILE *ret;     #ifdef O_EXCL    fd=open(fname, O_RDWR|O_CREAT|O_EXCL, 0644);#else    fd=open(fname, O_RDWR|O_CREAT|O_TRUNC, 0644);#endif    if (fd == -1)        return NULL;         ret=fdopen(fd, "w");    return ret;}///////////////////////////////////////////////////////////////////////// Function os_perror////	print out create file error/////////////////////////////////////////////////////////////////////////void os_perror(char *file){    perror(file);}///////////////////////////////////////////////////////////////////////// Function encode////	Encode a file into one or more MIME messages, each//	no larger than 'maxsize'. A 'maxsize' of zero means no size limit.//	If 'applefile' is non-null, it is the first part of a//	multipart/appledouble pair.//// PARAMETERS://	infile			= file description for the attached file//	applefile		= not used//	fname			= attached file name//	desc			= MAILMSG, mail message//	subject			= MAILSUBJECT, mail subject//	headers			= 0, not used//	maxsize			= 0, not used//	typeoverride	= 0, not used//	outfname		= file to be create for whole MIME encoded message///////////////////////////////////////////////////////////////////////int encode(FILE *infile, FILE *applefile, char *fname, char *desc, char *subject,           char *headers, long int maxsize, char *typeoverride, char *outfname){    char *type;    FILE *outfile;    char *cleanfname, *p;    char *digest, *appledigest;    long filesize, l, written;    int thispart, numparts = 1;    int wrotefiletype = 0;    char *multipartid, *msgid, *referenceid[NUMREFERENCES];    char buf[1024];    int i;    // Clean up fname for printing    cleanfname = fname;#ifdef __riscos    // This filename-cleaning knowledge will probably    // be moved to the os layer in a future version.    //    if (p = strrchr(cleanfname, '.')) cleanfname = p+1;#else    if (p = strrchr(cleanfname, '/')) cleanfname = p+1;    if (p = strrchr(cleanfname, '\\')) cleanfname = p+1;#endif    if (p = strrchr(cleanfname, ':')) cleanfname = p+1;    // Find file type    type = magic_look(infile);    if (typeoverride)    {		type = typeoverride;    }    else    {		type = magic_look(infile);    }    // Compute MD5 digests    digest = md5digest(infile, &filesize);    if (applefile)    {		appledigest = md5digest(applefile, &l);		filesize += l;    }#if 0    // See if we have to do multipart    if (maxsize)    {		filesize = (filesize / 54) * 73; // Allow for base64 expansion		// Add in size of desc file		if (descfile)		{		    free(md5digest(descfile, &l)); 	// XXX		    filesize += l;		}		numparts = (filesize-1000)/maxsize + 1;		if(numparts < 1) numparts = 1;    }#endif    multipartid = os_genid(); // generate output ID (message ID)    for (i=0; i<NUMREFERENCES; i++)    {		referenceid[i] = 0;    }    // main encode loop    for (thispart=1; thispart <= numparts; thispart++)    {	written = 0;	/* Open output file */	if (numparts == 1)	{	    outfile = os_createnewfile(outfname);	}	else	{#ifdef __riscos	    /* Arrgh, riscos uses '.' as directory separator */	    sprintf(buf, "%s/%02d", outfname, thispart);#else	    sprintf(buf, "%s.%02d", outfname, thispart);#endif	    outfile = os_createnewfile(buf);	}	if (!outfile) // file open failed	{	    os_perror(buf);            return 1;    }		msgid = os_genid();	fprintf(outfile, "Message-ID: <%s>\r\n", msgid);	fprintf(outfile, "Mime-Version: 1.0\r\n");	if (headers) fputs(headers, outfile);	if (numparts > 1)	{	    fprintf(outfile, "Subject: %s (%02d/%02d)\r\n", subject, thispart, numparts);	    if (thispart == 1)	   	{			referenceid[0] = msgid;	    }	    else	    {			// Put out References: header pointing to previous parts			fprintf(outfile, "References: <%s>\r\n", referenceid[0]);			for(i=1; i<NUMREFERENCES; i++)			{			    if (referenceid[i])			    	fprintf(outfile, "\t <%s>\r\n", referenceid[i]);			}						for(i=2; i<NUMREFERENCES; i++)			{			    referenceid[i-1] = referenceid[i];			}						referenceid[NUMREFERENCES-1] = msgid;	    }	    	    fprintf(outfile, "Content-Type: message/partial; number=%d; total=%d;\r\n", thispart, numparts);	    fprintf(outfile, "\t id=\"%s\"\r\n", multipartid);	    fprintf(outfile, "\r\n");	}	if (thispart == 1)	{        // if multi-part, new Message-ID has to be appended	    if (numparts > 1)	    {			fprintf(outfile, "Message-ID: <%s>\r\n", multipartid);			fprintf(outfile, "MIME-Version: 1.0\r\n");	    }			    fprintf(outfile, "Subject: %s\r\n", subject);	    fprintf(outfile, "Content-Type: multipart/mixed; boundary=\"-\"\r\n");	    fprintf(outfile, "\r\nThis is a MIME encoded message.  Decode it with \"munpack\"\r\n");	    fprintf(outfile, "or any other MIME reading software.  Mpack/munpack is available\r\n");	    fprintf(outfile, "via anonymous FTP in ftp.andrew.cmu.edu:pub/mpack/\r\n");	    written = 300;        // SMTP body message here!!        // Original from a file, now modified from a string	    if (desc)	    {			fprintf(outfile, "---\r\n\r\n");			#if 0			while(gets(buf, sizeof(buf), desc))			{			    // Strip multiple leading dashes as they may become MIME boundaries			    p = buf;			    			    if (*p == '-')			    {					while (p[1] == '-') p++;			    }				    fputs(p, outfile);			    written += strlen(p);			}			#endif			p = desc;			if(*p=='-')			{				while(p[1] == '-')					p++;			}						fputs(p, outfile);			fprintf(outfile, "\r\n\r\n");	    }    	    fprintf(outfile, "---\r\n"); // SMTP body message boundary        // jry, we are not applefile	    if (applefile)	    {			fprintf(outfile, "Content-Type: multipart/appledouble; boundary=\"=\"; name=\"%s\"\r\n", cleanfname);			fprintf(outfile, "Content-Disposition: inline; filename=\"%s\"\r\n", cleanfname);			fprintf(outfile, "\r\n\r\n--=\r\n");			fprintf(outfile, "Content-Type: application/applefile\r\n");			fprintf(outfile, "Content-Transfer-Encoding: base64\r\n");			fprintf(outfile, "Content-MD5: %s\r\n\r\n", appledigest);			free(appledigest);			written += 100;	    }	}    // jry, we are not applefile	if(applefile && !feof(applefile))	{	    if (written == maxsize)	    	written--; // avoid a nasty fencepost error	    	    written += to64(applefile, outfile, (thispart == numparts) ? 0 : (maxsize-written));	    if (!feof(applefile))

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
岛国av在线一区| proumb性欧美在线观看| 国产嫩草影院久久久久| 91在线播放网址| 狠狠色狠狠色综合系列| 一区二区三区在线高清| 国产欧美精品一区| 欧美sm极限捆绑bd| 欧美日韩国产123区| 99精品久久久久久| 国产麻豆精品在线| 蜜桃久久精品一区二区| 一区二区三区在线观看动漫| 中文字幕久久午夜不卡| 精品粉嫩超白一线天av| 制服丝袜激情欧洲亚洲| 91高清视频在线| 不卡免费追剧大全电视剧网站| 国产呦精品一区二区三区网站| 五月激情综合网| 亚洲国产欧美另类丝袜| 亚洲精品va在线观看| 亚洲三级在线看| 国产精品视频在线看| 久久蜜桃一区二区| 欧美大度的电影原声| 欧美一区二区视频在线观看2022 | 国产九色sp调教91| 麻豆久久一区二区| 丝袜美腿亚洲一区二区图片| 亚洲成人av电影在线| 一区二区三区精品| 亚洲综合图片区| 一区二区三区**美女毛片| 亚洲欧洲www| 亚洲女爱视频在线| 亚洲人午夜精品天堂一二香蕉| 国产精品色眯眯| 中国色在线观看另类| 欧美国产精品v| 国产精品理伦片| 国产精品毛片无遮挡高清| 国产精品欧美经典| 国产精品久久久久久久久免费丝袜| 久久精品免费在线观看| 久久久久久9999| 亚洲国产精品99久久久久久久久 | 欧美日韩午夜精品| 91麻豆精品国产自产在线 | 精品国产1区二区| 久久久综合视频| 国产日韩三级在线| 国产精品传媒在线| 亚洲一级二级在线| 国产精品自拍av| www.66久久| 欧美日韩国产乱码电影| 日韩三级精品电影久久久| 精品久久久久久久久久久院品网 | 国产精品一区专区| 播五月开心婷婷综合| 色94色欧美sute亚洲13| 欧美日韩国产成人在线免费| 欧美zozo另类异族| 自拍偷拍欧美激情| 午夜精品福利一区二区三区蜜桃| 久久国产精品免费| a亚洲天堂av| 337p亚洲精品色噜噜噜| 久久人人97超碰com| 亚洲激情自拍视频| 另类的小说在线视频另类成人小视频在线 | 亚洲美女在线国产| 丝袜亚洲另类欧美综合| 国产精品白丝av| 一本一道波多野结衣一区二区| 777xxx欧美| 日本一区二区三区在线观看| 亚洲一区二区三区在线看| 免费欧美日韩国产三级电影| 成人高清免费观看| 欧美日本不卡视频| 国产精品丝袜久久久久久app| 亚洲国产va精品久久久不卡综合| 黄色精品一二区| 欧美久久久影院| 国产精品超碰97尤物18| 日韩成人dvd| 91网站最新地址| 欧美精品一区男女天堂| 亚洲一级二级三级在线免费观看| 韩国女主播成人在线| 欧美性感一类影片在线播放| 久久精品欧美日韩| 日韩av电影免费观看高清完整版在线观看| 国产激情视频一区二区三区欧美| 在线观看亚洲成人| 国产日韩欧美精品在线| 蜜臀av性久久久久av蜜臀妖精| 色综合色狠狠天天综合色| 2024国产精品视频| 三级欧美韩日大片在线看| 91丨九色丨黑人外教| 久久精品视频网| 久久99精品一区二区三区| 欧美私模裸体表演在线观看| 国产精品卡一卡二| 国产福利91精品| 日韩久久久精品| 日韩中文字幕一区二区三区| 色网综合在线观看| 中文字幕一区二区在线播放 | 日韩精品一区二区在线| 亚洲在线中文字幕| 91免费精品国自产拍在线不卡 | 亚洲天堂免费看| 丁香啪啪综合成人亚洲小说| 日韩午夜激情免费电影| 午夜国产精品一区| 色婷婷综合久久久中文一区二区| 亚洲欧美在线视频| 成人永久aaa| 国产欧美精品在线观看| 国产精品主播直播| 国产亚洲欧美中文| 国产精品一区二区三区乱码 | 香港成人在线视频| 在线观看91视频| 一区二区三区不卡视频在线观看| 91丨九色porny丨蝌蚪| 亚洲天天做日日做天天谢日日欢| 成人一区二区三区中文字幕| 国产视频在线观看一区二区三区| 国内精品国产成人国产三级粉色 | 国产精品成人在线观看| www.av亚洲| 亚洲男同性恋视频| 91精品办公室少妇高潮对白| 亚洲激情在线激情| 91福利国产成人精品照片| 一区二区三区欧美| 欧美日韩免费一区二区三区视频| 亚洲chinese男男1069| 欧美图片一区二区三区| 午夜激情一区二区三区| 日韩视频免费观看高清完整版 | 欧美性生活久久| 亚洲444eee在线观看| 欧美一区三区二区| 美女在线视频一区| 欧美国产丝袜视频| 91黄色免费观看| 视频一区二区三区在线| 精品国产91洋老外米糕| 成人永久免费视频| 亚洲午夜激情av| 精品精品国产高清一毛片一天堂| 国产一区二区三区视频在线播放| 亚洲国产精品国自产拍av| 91蜜桃传媒精品久久久一区二区| 亚洲一二三级电影| 日韩欧美电影在线| 成人性生交大片免费| 亚洲成人免费视| 久久婷婷国产综合精品青草| 91首页免费视频| 日韩不卡一区二区| 国产三级一区二区三区| 欧美午夜免费电影| 精品午夜久久福利影院| 亚洲精品中文字幕在线观看| 91精品福利在线一区二区三区| 成人爽a毛片一区二区免费| 一级日本不卡的影视| 欧美一区二区三区爱爱| 成人午夜精品一区二区三区| 亚洲电影视频在线| 久久久99久久| 欧美欧美欧美欧美首页| 国产精品一区二区三区四区| 亚洲mv大片欧洲mv大片精品| 国产午夜精品久久久久久久| 欧美日韩亚洲国产综合| 成人精品亚洲人成在线| 91成人免费在线| 紧缚奴在线一区二区三区| 亚洲一区中文在线| 国产欧美日韩另类一区| 日韩一区二区影院| 91丨九色porny丨蝌蚪| 国产乱子伦视频一区二区三区 | 中文字幕一区av| 欧美大胆一级视频| 欧美三级一区二区| www.亚洲色图| 国内精品视频666| 男女男精品视频网| 亚洲电影第三页| 亚洲免费av在线| 国产精品久久午夜夜伦鲁鲁|