/* GNU Mailutils -- a suite of utilities for electronic mail Copyright (C) 1999-2019 Free Software Foundation, Inc. This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library. If not, see . */ #ifndef _MAILUTILS_MESSAGE_H #define _MAILUTILS_MESSAGE_H #include #include #ifdef __cplusplus extern "C" { #endif #define MU_SCAN_SEEK 0x01 #define MU_SCAN_SIZE 0x02 struct mu_imapenvelope { struct tm date; struct mu_timezone tz; char *subject; mu_address_t from; mu_address_t sender; mu_address_t reply_to; mu_address_t to; mu_address_t cc; mu_address_t bcc; char *in_reply_to; char *message_id; }; enum mu_message_type { mu_message_other, mu_message_text, /* text/plain */ mu_message_rfc822, /* message/rfc822 */ mu_message_multipart /* multipart/mixed */ }; struct mu_bodystructure { enum mu_message_type body_message_type; char *body_type; char *body_subtype; mu_assoc_t body_param; char *body_id; char *body_descr; char *body_encoding; size_t body_size; /* Optional */ char *body_md5; char *body_disposition; mu_assoc_t body_disp_param; char *body_language; char *body_location; union { struct { size_t body_lines; } text; struct { struct mu_imapenvelope *body_env; struct mu_bodystructure *body_struct; size_t body_lines; } rfc822; struct { mu_list_t body_parts; } multipart; } v; }; struct mu_message_scan { int flags; mu_off_t message_start; mu_off_t message_size; mu_off_t body_start; mu_off_t body_end; size_t header_lines; size_t body_lines; int attr_flags; unsigned long uidvalidity; }; int mu_stream_scan_message (mu_stream_t stream, struct mu_message_scan *sp); /* A message is considered to be a container for: mu_header_t, mu_body_t, and its mu_attribute_t. */ extern int mu_message_create (mu_message_t *, void *owner); extern void mu_message_destroy (mu_message_t *, void *owner); extern int mu_message_create_copy (mu_message_t *to, mu_message_t from); extern void *mu_message_get_owner (mu_message_t); #define MU_MSG_ATTRIBUTE_MODIFIED 0x01 #define MU_MSG_HEADER_MODIFIED 0x02 #define MU_MSG_BODY_MODIFIED 0x04 extern int mu_message_is_modified (mu_message_t); extern int mu_message_clear_modified (mu_message_t); extern int mu_message_get_mailbox (mu_message_t, mu_mailbox_t *); extern int mu_message_set_mailbox (mu_message_t, mu_mailbox_t, void *); extern void mu_message_ref (mu_message_t); extern void mu_message_unref (mu_message_t); extern int mu_message_get_envelope (mu_message_t, mu_envelope_t *); extern int mu_message_set_envelope (mu_message_t, mu_envelope_t, void *); extern int mu_message_get_header (mu_message_t, mu_header_t *); extern int mu_message_set_header (mu_message_t, mu_header_t, void *); extern int mu_message_get_body (mu_message_t, mu_body_t *); extern int mu_message_set_body (mu_message_t, mu_body_t, void *); extern int mu_message_get_stream (mu_message_t, mu_stream_t *) MU_DEPRECATED; extern int mu_message_get_streamref (mu_message_t, mu_stream_t *); extern int mu_message_set_stream (mu_message_t, mu_stream_t, void *); extern int mu_message_get_attribute (mu_message_t, mu_attribute_t *); extern int mu_message_set_attribute (mu_message_t, mu_attribute_t, void *); extern int mu_message_get_observable (mu_message_t, mu_observable_t *); extern int mu_message_set_get_stream (mu_message_t, int (*) (mu_message_t, mu_stream_t *), void *); extern int mu_message_is_multipart (mu_message_t, int *); extern int mu_message_set_is_multipart (mu_message_t, int (*_is_multipart) (mu_message_t, int *), void *); extern int mu_message_size (mu_message_t, size_t *); extern int mu_message_set_size (mu_message_t, int (*_size) (mu_message_t, size_t *), void *owner); extern int mu_message_lines (mu_message_t, size_t *); extern int mu_message_quick_lines (mu_message_t, size_t *); extern int mu_message_set_lines (mu_message_t, int (*_lines) (mu_message_t, size_t *, int), void *owner); extern int mu_message_get_num_parts (mu_message_t, size_t *nparts); extern int mu_message_set_get_num_parts (mu_message_t, int (*_get_num_parts) (mu_message_t, size_t *), void *owner); extern int mu_message_get_part (mu_message_t, size_t, mu_message_t *); extern int mu_message_set_get_part (mu_message_t, int (*_get_part) (mu_message_t, size_t, mu_message_t *), void *owner); extern int mu_message_get_uidl (mu_message_t, char *, size_t, size_t *); extern int mu_message_set_uidl (mu_message_t, int (*_get_uidl) (mu_message_t, char *, size_t, size_t *), void *owner); extern int mu_message_get_uid (mu_message_t, size_t *); extern int mu_message_set_uid (mu_message_t, int (*_get_uid) (mu_message_t, size_t *), void *owner); extern int mu_message_get_qid (mu_message_t, mu_message_qid_t *); extern int mu_message_set_qid (mu_message_t, int (*_get_qid) (mu_message_t, mu_message_qid_t *), void *owner); extern int mu_message_get_imapenvelope (mu_message_t, struct mu_imapenvelope **); extern void mu_message_imapenvelope_free (struct mu_imapenvelope *); extern int mu_message_set_imapenvelope (mu_message_t, int (*_imapenvelope) (mu_message_t, struct mu_imapenvelope **), void *owner); extern void mu_bodystructure_free (struct mu_bodystructure *); extern void mu_list_free_bodystructure (void *item); extern int mu_message_get_bodystructure (mu_message_t, struct mu_bodystructure **); extern int mu_message_set_bodystructure (mu_message_t msg, int (*_bodystructure) (mu_message_t, struct mu_bodystructure **), void *owner); /* misc functions */ extern int mu_attachment_create (mu_message_t *newmsg, const char *content_type, const char *encoding, const char *name, const char *filename); extern int mu_attachment_copy_from_stream (mu_message_t att, mu_stream_t stream); extern int mu_attachment_copy_from_file (mu_message_t att, char const *filename); extern int mu_message_create_attachment (const char *content_type, const char *encoding, const char *filename, mu_message_t *newmsg); extern int mu_message_save_attachment (mu_message_t msg, const char *filename, mu_mime_io_buffer_t buf); extern int mu_message_encapsulate (mu_message_t msg, mu_message_t *newmsg, mu_mime_io_buffer_t buf); extern int mu_message_unencapsulate (mu_message_t msg, mu_message_t *newmsg, mu_mime_io_buffer_t buf); extern int mu_mime_io_buffer_create (mu_mime_io_buffer_t *pinfo); extern void mu_mime_io_buffer_destroy (mu_mime_io_buffer_t *pinfo); extern int mu_mime_io_buffer_set_charset (mu_mime_io_buffer_t info, const char *charset); extern void mu_mime_io_buffer_sget_charset (mu_mime_io_buffer_t info, const char **charset); extern int mu_mime_io_buffer_aget_charset (mu_mime_io_buffer_t info, const char **charset); extern int mu_mimehdr_get_disp (const char *str, char *buf, size_t bufsz, size_t *retsz); extern int mu_mimehdr_aget_disp (const char *str, char **pvalue); extern int mu_mimehdr_get_param (const char *str, const char *param, char *buf, size_t bufsz, size_t *retsz); extern int mu_mimehdr_aget_param (const char *str, const char *param, char **pval); extern int mu_mimehdr_aget_decoded_param (const char *str, const char *param, const char *charset, char **pval, char **plang); extern int mu_message_get_attachment_name (mu_message_t, char *name, size_t bufsz, size_t* sz); extern int mu_message_aget_attachment_name (mu_message_t, char **name); extern int mu_message_aget_decoded_attachment_name (mu_message_t msg, const char *charset, char **name, char **plang); extern int mu_message_save_to_mailbox (mu_message_t msg, const char *toname, int perms); extern int mu_message_from_stream_with_envelope (mu_message_t *pmsg, mu_stream_t instream, mu_envelope_t env); extern int mu_stream_to_message (mu_stream_t instream, mu_message_t *pmsg); #ifdef __cplusplus } #endif #endif /* _MAILUTILS_MESSAGE_H */