#include <libetpan/libetpan.h> int mailmime_transfer_encoding_get(struct mailmime_fields * fields);
mailmime_transfer_encoding_get() will return the standard MIME encoding mechanism.
fields is the list of MIME header fields.
An integer representing the MIME encoding mechanism will be returned (see the Section called mailmime_mechanism - MIME transfer encoding mechanism (Content-Transfer-Encoding)).
Example 4-46. extracting MIME encoding mechanism
#include <libetpan/libetpan.h> #include <sys/stat.h> #include <sys/mman.h> int main(int argc, char ** argv) { int fd; int r; status = EXIT_FAILURE; fd = open("message.rfc2822", O_RDONLY); if (fd >= 0) { void * mem; struct stat stat_info; r = fstat(fd, &stat_info); if (r >= 0) { mem = mmap(NULL, stat_info.st_size, PROT_READ, MAP_PRIVATE); if (mem != MAP_FAILED) { struct mailimf_fields * f; size_t current_index; current_index = 0; r = mailimf_fields_parse(mem, stat_info.st_size, ¤t_index, &f); if (r == MAILIMF_NO_ERROR) { struct mailmime_fields * mime_fields; r = mailmime_fields_parse(f, &mime_fields); if (r == MAILIMF_NO_ERROR) { int encoding; encoding = mailmime_transfer_encoding_get(mime_fields); /* do the things */ mailmime_fields_free(mime_fields); status = EXIT_SUCCESS; } mailimf_fields_free(f); } } munmap(mem, stat_info.st_size); } close(fd); } exit(status); }
#include <libetpan/libetpan.h> char * mailmime_content_charset_get(struct mailmime_content * content); char * mailmime_content_param_get(struct mailmime_content * content, char * name); char * mailmime_extract_boundary(struct mailmime_content * content_type);
mailmime_content_charset_get() will return the charset parameter of MIME content type.
mailmime_content_param_get() will return the value of a given parameter of MIME content type.
mailmime_extract_boundary() will return the charset parameter of MIME content type.
content is the MIME content type.
name is the name of the parameter to extract.
With mailmime_extract_boundary(), the returned value must be freed with free().
Example 4-47. extracting information from MIME content type
#include <libetpan/libetpan.h> #include <sys/stat.h> #include <sys/mman.h> int main(int argc, char ** argv) { int fd; int r; status = EXIT_FAILURE; fd = open("message.rfc2822", O_RDONLY); if (fd >= 0) { void * mem; struct stat stat_info; r = fstat(fd, &stat_info); if (r >= 0) { mem = mmap(NULL, stat_info.st_size, PROT_READ, MAP_PRIVATE); if (mem != MAP_FAILED) { struct mailimf_fields * f; size_t current_index; current_index = 0; r = mailimf_fields_parse(mem, stat_info.st_size, ¤t_index, &f); if (r == MAILIMF_NO_ERROR) { clistiter * cur; for(cur = clist_begin(f->fld_list) ; cur != NULL ; cur = clist_next(cur)) { struct mailmime_field * mime_field; struct mailimf_field * field; field = clist_content(cur); if (field->fld_type == MAILIMF_FIELD_OPTIONAL_FIELD) { if (strcasecmp(field->fld_data.fld_optional_field->fld_name, "Content-Type") == 0) { struct mailmime_content * content_type; size_t current_index; current_index = 0; r = mailmime_content_parse(field->fld_data.fld_optional_field->fld_value, strlen(field->fld_data.fld_optional_field->fld_value), ¤t_index, &content_type); if (r == MAILIMF_NO_ERROR) { char * charset; char * name; char * boundary; charset = mailmime_content_charset_get(content_type); name = mailmime_content_param_get(content_type, "name"); boundary = mailmime_extract_boundary(content_type); /* do the things */ free(boundary); status = EXIT_SUCCESS; mailmime_content_free(content_type); } } } } mailimf_fields_free(f); } } munmap(mem, stat_info.st_size); } close(fd); } exit(status); }