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

📄 message-fun.c

📁 一个功能全面的电子邮件客户端
💻 C
📖 第 1 页 / 共 2 页
字号:
#if DEBUG > 5	printf( "in mesage_get_reply_quoted()\n" ) ;#endif	headinfo = 0 ;	body=message_load (folder_seek (folder_seek_by_name	                               (msg->rfolder)), msg);	if (tm_globs->flags&SHOW_SOME_HEADER) {		headinfo=SHOW_SOME_HEADER;	} else if (tm_globs->flags&SHOW_ALL_HEADER) {		headinfo=SHOW_ALL_HEADER;	}	tm_globs->flags&=~SHOW_SOME_HEADER;	tm_globs->flags&=~SHOW_ALL_HEADER;	att=(Attachment *)calloc (1, sizeof (Attachment));	att->name=strdup ("dummyatt");	/* Before we MIME process it, pull out some header values */	info = parse_header( body ) ;	body_processed=mime_process (body, att, 0);	free( body ) ;	/* Now, parse the fromm field to get it's parts */	parse_from_line( info -> from, &email, &first, &last ) ;	/* Insert our he said, she said string. */	body_ret = insert_reply_indicator( body_processed ) ;	free( body_processed ) ;	/* Now, place in a fancy retort for the quoted reply */	if (!body_ret) body_ret = strdup("");	if (!first) first = strdup("");	if (!last) last = strdup("");	if (!email) email = strdup("");	if (!info->subject) info->subject = strdup("");        newMsgLen = strlen(body_ret) + strlen(qvar)                + strlen (info->date) + strlen (info->from) + 1;	newMsg = malloc( newMsgLen ) ;        snprintf( newMsg, newMsgLen-1, qvar, info->date, info->from, body_ret ) ;	free( body_ret ) ;	body_ret = newMsg ;	if( first ) free( first ) ;	if( last ) free( last ) ;	if( email ) free( email ) ;	destroy_hinfo( info ) ;	tm_globs->flags|=headinfo;	return body_ret;}char *message_get_reply_quoted_stream (char *body) {	int headinfo ;	char *newMsg ;	int newMsgLen ;	Attachment *att ;	Header_Info *info ;	char *email, *first, *last ;	char *body_processed, *body_ret ;	const char qvar[] = "\n\nOn %s, %s wrote:\n%s" ;	headinfo = 0 ;#if DEBUG > 5	printf( "in mesage_get_reply_quoted_stream()\n" ) ;#endif	if (tm_globs->flags&SHOW_SOME_HEADER) {		headinfo=SHOW_SOME_HEADER;	} else if (tm_globs->flags&SHOW_ALL_HEADER) {		headinfo=SHOW_ALL_HEADER;	}	tm_globs->flags&=~SHOW_SOME_HEADER;	tm_globs->flags&=~SHOW_ALL_HEADER;	att=(Attachment *)calloc (1, sizeof (Attachment));	att->name=strdup ("dummyatt");	/* Before we MIME process it, pull out some header values */	info = parse_header( body ) ;	body_processed=mime_process (body, att, 0);	/* Insert our he said, she said string. */	body_ret = insert_reply_indicator( body_processed ) ;	free( body_processed ) ;	/* Now, parse the fromm field to get it's parts */	parse_from_line( info -> from, &email, &first, &last ) ;	/* Now, place in a fancy retort for the quoted reply */        if (!body_ret) body_ret = strdup("");        if (!first) first = strdup("");        if (!last) last = strdup("");        if (!email) email = strdup("");        if (!info->subject) info->subject = strdup("");	newMsgLen = strlen(body_ret) + strlen(qvar)		+ strlen (info->date) + strlen (info->from) + 1;	newMsg = malloc( newMsgLen ) ;	snprintf( newMsg, newMsgLen-1, qvar, info->date, info->from, body_ret ) ;	free( body_ret ) ;	body_ret = newMsg ;	if( first ) free( first ) ;	if( last ) free( last ) ;	if( email ) free( email ) ;	destroy_hinfo( info ) ;	tm_globs->flags|=headinfo;	return body_ret;}void message_transpose_folders (Folder *fl) {	GList *seek=message_get_selection ();	GtkWidget *clist=lookup_widget (tm_globs->main_window, "message_clist");	GtkCTree *folder_ctree=GTK_CTREE (lookup_widget (tm_globs->main_window, "folder_tree"));	Folder *rfolder;	msg_info *info;	Message *msg;	char *number=(char *)calloc (20, sizeof (char));	int row;	if (!seek)		return;	if (fl) {		gtk_clist_freeze (GTK_CLIST (clist));		while (seek) {			info=seek->data;			if (info) {				msg=info->msg;				if (msg->folder) {									rfolder=folder_seek (folder_seek_by_name (msg->folder));				} else {					rfolder=folder_seek (folder_seek_by_name (msg->rfolder));				}				rfolder->total--;				fl->total++;				if (msg->flags & MESSAGE_UNREAD) {					rfolder->unread--;					fl->unread++;				}				snprintf (number, 5, "%d", fl->unread);				gtk_ctree_node_set_text (folder_ctree, fl->tree_item, 1, number);				snprintf (number, 5, "%d", fl->total);				gtk_ctree_node_set_text (folder_ctree, fl->tree_item, 2, number);				snprintf (number, 5, "%d", rfolder->unread);				gtk_ctree_node_set_text (folder_ctree, rfolder->tree_item, 1, number);				snprintf (number, 5, "%d", rfolder->total);				gtk_ctree_node_set_text (folder_ctree, rfolder->tree_item, 2, number);				if (msg->folder) free (msg->folder);				msg->folder=strdup (fl->name);			}			seek=seek->next;		}		seek=message_get_selection ();		while (seek) {			info=seek->data;			row=gtk_clist_find_row_from_data (GTK_CLIST (clist), seek->data);			seek=seek->next;			gtk_clist_remove (GTK_CLIST (clist), row);		}		gtk_clist_thaw (GTK_CLIST (clist));		message_clist_reset_shading (clist);	}	message_selection_null ();	free (number);}void hinfo_destroy (Header_Info *hinfo) {	if (hinfo) {	  if (hinfo->from) free (hinfo->from);	  if (hinfo->to) free (hinfo->to);	  if (hinfo->cc) free (hinfo->cc);	  if (hinfo->subject) free (hinfo->subject);	  if (hinfo->date) free (hinfo->date);	  if (hinfo->priority) free (hinfo->priority);	  if (hinfo->replyto) free (hinfo->replyto);	  if (hinfo->sensitivity) free (hinfo->sensitivity);	  if (hinfo->expiry) free (hinfo->expiry);	  if (hinfo->replyby) free (hinfo->replyby);	  if (hinfo->keywords) free (hinfo->keywords);	  if (hinfo->content_type) free (hinfo->content_type);	  if (hinfo->content_t_e) free (hinfo->content_t_e);	  if (hinfo->content_d) free (hinfo->content_d);		if (hinfo->uidl) free (hinfo->uidl);		if (hinfo->mid) free (hinfo->mid);		free (hinfo);	}}char *message_fix_for_send (char *string) {	char *ret=(char *)calloc (strlen (string)*2, sizeof(char));	char *tmps1=NULL;	char *tmps2=NULL; char *tmps3=NULL;	CNSS *ss=(CNSS *)calloc(1, sizeof(CNSS));	CNSS *ss2=(CNSS *)calloc(1, sizeof(CNSS));	tmps1=add_cr(string);	ss->str=tmps1;	ss->len=strlen (tmps1);	ss->pos=0;	ss2->str=ret;	ss2->len=strlen (string)*2;	ss2->pos=0;	while ((tmps2=getnl_rfc822(ss))!=NULL) {		if (tmps2[0]=='.') {			tmps3=(char *)calloc (strlen (tmps2)+4, sizeof(char));			tmps3[0]='.';			memmove (tmps3+1, tmps2, strlen (tmps2));			free (tmps2);			tmps2=tmps3;			tmps3=NULL;		}		putnline (ss2, tmps2);		free (tmps2);	}	ss->str=NULL;	free (ss);	ss2->str=NULL;	free (ss2);	free (tmps1);	return ret;}/* * Walk through all messages looking for a matching * UIDL and/or msgID.  Remember, msgID doesn't have * to be unique. * msgID can optionally be NULL as input. * Return Zero (0) on no match, 1 if uidl matches, and * two if uidl and msgID match. */intindex_find_uidl( const char *uidl, const char *msgID ){  int retValue;  Message *mseek;  Folder *folder;  GList *fseek;  char *msg;  Header_Info *hinfo;  retValue = 0;  /* Make sure we have a UIDL to work with */  if(uidl)  {    /* Since we have a UIDL that we are looking for, walk through all indexes */    for (fseek = folder_create_glist (); fseek; fseek = fseek->next)    {      folder = folder_seek (folder_seek_by_name (fseek->data));      for (mseek = folder->msglst; mseek; mseek = mseek->next)      {        if (mseek->uidl)        {          if (strncmp(mseek->uidl,uidl,strlen(uidl)-4)==0)          {            retValue = 1;            if (msgID)            {              msg = message_load (folder_seek (folder_seek_by_name                                               (mseek->rfolder)), mseek);              hinfo = parse_header (msg);              if (strcmp(hinfo->mid,msgID)==0)                retValue = 2;              free (msg);              destroy_hinfo (hinfo);            }          }        }        if (retValue)          break;      }      if (retValue)        break;    }  }  return retValue;}char*find_message_uidl(char *msg){  char *tmp = NULL;  if (msg)  {    tmp = strstr (msg, "X-UIDL:");    if (tmp) {      tmp += 7;      while (*(++tmp) == ' ');    }  }  return tmp;}

⌨️ 快捷键说明

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