90 lines
2.7 KiB

* mail.h - Mail editing toolset
* The author licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
#ifndef MAIL_H
#define MAIL_H
#include <stdint.h>
#include <stddef.h>
#include <stdbool.h>
#include <sys/types.h>
struct type_file_info_t{
char* name;
char* mime_type;
struct email_t{
char* message;
/* From the below values you can say pretty much anything about the
* message. The line delimiting body and header is left out. The header
* len includes the last \r\n of the header. If header len is zero,
* there was no clear distinction between header and body...
size_t header_len, body_offset, message_length;
/* Apparently emails consist of several smaller emails if you send an
* attachment alongside them. This also happens when you send an email
* as html. Therefore emails are recursive. Ask apple, their mail client
* is basically insane by this point...
bool is_multipart;
/* The boundary only needs to be defined if this is a multipart message
size_t boundary_len;
char* boundary;
/* The content type tells us the MIME type of this message part. May not
* be specified, so don't assume it is here! */
size_t ct_len;
char* content_type;
/* NOTICE: the boundary, content_type and message fields may be updated
* when the message of the root object is modified. See the
* propagate_root_pointer function for further information
size_t submes_cnt;
struct email_t** submes;
struct email_t* parent;
bool base64_encoded;
struct type_file_info_t file_info;
char* saved_filename;
int append_header(struct email_t* mail, const char* key, const char* value);
int append_to_header(struct email_t* mail, const char* pair);
int append_to_body(struct email_t* mail, const char* text);
int append_to_html_body(struct email_t* mail, const char* text);
int remove_mail(struct email_t* mail);
struct email_t* get_root_mail(struct email_t* mail);
void propagate_insert_delete(struct email_t* mail, char* change_p,
ssize_t change);
void propagate_root_pointer(struct email_t* mail, char* change_p, char* old_p);
struct type_file_info_t get_mime_file_info(struct email_t* mail);
#define MULTIPART_MIME "multipart/"
#define BASE64_ENC "base64"
#endif /* MAIL_H */