libcmime  
A lightweight C mime library
save_attachment_to_file.c
#define _GNU_SOURCE
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include "../src/cmime_message.h"
void usage() {
printf("\n");
printf("libcmime - simple api demonstration\n");
printf("-----------------------------------\n");
printf("demonstrates: save CMimePart_T part of CMimeMessage_T object with cmime_part_to_file() to a file\n");
printf("required parameter: -i /path/to/in_file\n");
printf("optional parameter: -o /path/to/out_file\n");
}
int main(int argc, char *argv[]) {
int option;
int retval = 0;
char *in_file = NULL;
char *out_file = NULL;
int ret;
int i=0;
// check command line parameters
while((option = getopt(argc,argv,"hi:o:")) != EOF) {
switch(option) {
case 'i':
asprintf(&in_file, "%s", optarg);
break;
case 'o':
asprintf(&out_file, "%s", optarg);
break;
case 'h':
usage();
break;
default:
usage();
}
}
if(in_file != NULL && out_file != NULL) {
CMimePart_T *mp = NULL;
CMimeListElem_T *elem = NULL;
i = cmime_message_from_file(&message,in_file,0);
if(i == 0) {
/* normally we would go through all the parts like follows */
/*
elem = cmime_list_head(message->parts);
elem = elem->next;
while(elem != NULL) {
mp = (CMimePart_T *)cmime_list_data(elem);
ret = cmime_part_to_file(mp,out_file);
printf("RET: [%d]\n",ret);
elem = elem->next;
break;
}
*/
/* for demonstration purpose we just check for the first
element in the list */
elem = cmime_list_head(message->parts);
ret = cmime_part_to_file(mp,out_file);
} else {
printf("failed opening file [%s]\n", in_file);
retval = -1;
}
// free the initialized object
} else {
printf("you have to specify an input file with -i and an output file with -o\n");
retval = -1;
}
if(in_file != NULL)
free(in_file);
if(out_file != NULL)
free(out_file);
return retval;
}
CMimePart_T
A mime part.
Definition: cmime_part.h:52
CMimeListElem_T
An element of a CMimeList_T list.
Definition: cmime_list.h:45
cmime_message_new
CMimeMessage_T * cmime_message_new(void)
Creates a new CMimeMessage_T object.
Definition: cmime_message.c:400
cmime_message_free
void cmime_message_free(CMimeMessage_T *message)
Free a CMimeMessage_T object.
Definition: cmime_message.c:431
cmime_message_from_file
int cmime_message_from_file(CMimeMessage_T **message, const char *filename, int header_only)
Parse given file and create a CMimeMessage_T object.
Definition: cmime_message.c:724
cmime_list_data
#define cmime_list_data(elem)
Definition: cmime_list.h:196
cmime_part_to_file
int cmime_part_to_file(CMimePart_T *part, char *filename)
Create a file from CMimePart_T object.
Definition: cmime_part.c:338
CMimeMessage_T
Represents an email message.
Definition: cmime_message.h:79
cmime_list_head
#define cmime_list_head(list)
Definition: cmime_list.h:172
CMimeMessage_T::parts
CMimeList_T * parts
Definition: cmime_message.h:85