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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? ssmtp.c

?? ssmt郵件服務器armlinux下的郵件開發
?? 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))

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人晚上爱看视频| 欧美一二三四在线| 国产喂奶挤奶一区二区三区| 蜜臀av一级做a爰片久久| 欧美色图在线观看| 国产午夜精品久久久久久久| 久久9热精品视频| 日韩欧美一级片| 一区二区三区四区精品在线视频| 成人中文字幕电影| 久久综合色婷婷| 激情成人午夜视频| 精品入口麻豆88视频| 麻豆精品国产传媒mv男同| 日韩一区二区三区三四区视频在线观看| 亚洲国产精品嫩草影院| 欧美偷拍一区二区| 亚洲va欧美va人人爽午夜| 成人app软件下载大全免费| 欧美极品aⅴ影院| 国产成人高清在线| 国产精品乱码妇女bbbb| 99精品久久只有精品| 久久精品人人爽人人爽| 国产高清精品网站| 日韩av电影天堂| 日韩女优av电影| 风间由美一区二区三区在线观看 | 欧美一区二区三区性视频| 同产精品九九九| 欧洲精品中文字幕| 亚洲一区二区在线视频| 欧美日韩一区中文字幕| 一区二区三区在线观看欧美| av色综合久久天堂av综合| 91精品在线免费| 国产一区二区三区不卡在线观看| 久久婷婷久久一区二区三区| 日本美女一区二区三区| 久久久综合视频| 91在线看国产| 热久久一区二区| 制服丝袜亚洲色图| 蜜臀av性久久久久蜜臀aⅴ流畅| 7799精品视频| 国产99精品在线观看| 国产精品嫩草影院av蜜臀| 91丨九色丨蝌蚪丨老版| 亚洲蜜臀av乱码久久精品蜜桃| 欧美日韩在线免费视频| 国产成人免费网站| 欧美激情综合五月色丁香小说| 97久久精品人人澡人人爽| 国产精品国产精品国产专区不片| 91玉足脚交白嫩脚丫在线播放| 亚洲午夜免费视频| 精品国产乱码久久久久久蜜臀 | 亚洲国产经典视频| 欧美日韩性生活| 成人一区二区三区视频| 日本伊人精品一区二区三区观看方式| 欧美三级韩国三级日本一级| 精品影院一区二区久久久| 久久久久亚洲综合| 自拍视频在线观看一区二区| 国产高清视频一区| 精品国产制服丝袜高跟| 国产一区二区三区高清播放| 国产成人av资源| 91精品国产色综合久久不卡电影| 欧美激情一区二区三区在线| 一本到不卡免费一区二区| 一区二区三区久久久| 国产精品影视在线| 欧美日韩高清在线播放| 男女男精品视频网| 日本一区二区动态图| 欧美日韩国产一级| 成人av网站免费| 成人综合在线网站| 国产不卡视频一区二区三区| 亚洲国产精品久久久男人的天堂 | 国产精品99久久久| 日韩欧美一区电影| 狠狠色丁香婷婷综合久久片| 日韩欧美的一区| 99久久99久久精品免费看蜜桃 | 国产精品久久夜| 欧美人与禽zozo性伦| 午夜欧美2019年伦理| 中文字幕在线观看一区| 亚洲视频免费在线| 一级日本不卡的影视| 亚洲色图在线看| 亚洲国产成人在线| 2017欧美狠狠色| 久久奇米777| 在线免费一区三区| 99久久精品国产精品久久| 国内成人免费视频| 亚洲欧美一区二区三区久本道91| 日韩一级大片在线观看| 国产在线麻豆精品观看| 国产午夜久久久久| 在线观看网站黄不卡| 国产成人精品一区二区三区四区 | 精品午夜久久福利影院| 欧美三级日本三级少妇99| 麻豆精品在线看| 亚洲网友自拍偷拍| 国产情人综合久久777777| 亚洲欧美国产高清| 精品国产成人在线影院 | 日韩电影免费一区| 国产精品久久久久9999吃药| 国产精品天美传媒沈樵| 亚洲色图一区二区| 樱桃视频在线观看一区| 亚洲成a人片在线不卡一二三区 | 国产精品黄色在线观看| 自拍偷拍国产亚洲| 五月婷婷综合网| 精品一区二区三区的国产在线播放 | 黄色小说综合网站| 成人激情综合网站| 成人免费观看av| 欧美午夜不卡视频| 精品国产乱码久久久久久老虎| 中文字幕一区二区三区不卡在线| 亚洲另类色综合网站| 青青草原综合久久大伊人精品| 激情五月播播久久久精品| 久久不见久久见免费视频1| 99免费精品在线| 6080午夜不卡| 国产精品美女久久久久av爽李琼| 亚洲欧美另类在线| 欧美mv和日韩mv国产网站| 久久精品视频免费| 午夜精品在线视频一区| 99精品一区二区三区| 日韩亚洲电影在线| 国产欧美一二三区| 国产综合久久久久久鬼色| 国产制服丝袜一区| av高清久久久| 精品少妇一区二区三区免费观看| 国产精品久久久久影院| 蜜臀av在线播放一区二区三区| 色先锋资源久久综合| 亚洲免费观看高清完整版在线| 三级在线观看一区二区| 91污在线观看| 欧美精品一区视频| 午夜激情一区二区三区| 91免费小视频| 日韩免费观看高清完整版 | 91精选在线观看| 欧美一区二区福利在线| 久久久久国色av免费看影院| 亚洲伦理在线精品| 国产精品888| 欧美日韩免费一区二区三区视频| 国产精品国产三级国产三级人妇| 蜜桃视频一区二区| 亚洲精品在线电影| 久久 天天综合| 日韩午夜在线播放| 激情六月婷婷综合| 日韩免费高清视频| 久久精品夜色噜噜亚洲a∨| 在线观看成人免费视频| 亚洲综合一区在线| 亚洲综合一二区| a在线欧美一区| 欧美韩日一区二区三区四区| 另类小说欧美激情| 欧美日韩午夜精品| 亚洲国产毛片aaaaa无费看| 国产美女精品一区二区三区| 欧美日本一区二区| 亚洲乱码国产乱码精品精98午夜| 夫妻av一区二区| 精品国产亚洲在线| 国产尤物一区二区| 91天堂素人约啪| 一区二区三区色| 在线亚洲欧美专区二区| 精品1区2区在线观看| 久久99精品国产91久久来源| 欧美一区二区三区四区高清| 韩国理伦片一区二区三区在线播放| 日韩一区国产二区欧美三区| 一区二区在线观看免费视频播放| 99久久久精品| 国产欧美一区二区三区沐欲| 成人免费va视频| 一二三区精品福利视频| 欧美日韩精品三区| 免费高清成人在线|