libcmime  
A lightweight C mime library
cmime_message.h
Go to the documentation of this file.
1 /* libcmime - A C mime library
2  * Copyright (C) 2013 SpaceNet AG and Axel Steiner <ast@treibsand.com>
3  *
4  * Permission is hereby granted, free of charge, to any person obtaining
5  * a copy of this software and associated documentation files (the
6  * "Software"), to deal in the Software without restriction, including
7  * without limitation the rights to use, copy, modify, merge, publish,
8  * distribute, sublicense, and/or sell copies of the Software, and to
9  * permit persons to whom the Software is furnished to do so, subject to
10  * the following conditions:
11  *
12  * The above copyright notice and this permission notice shall be
13  * included in all copies or substantial portions of the Software.
14  *
15  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
16  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
17  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
18  * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
19  * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
20  * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
21  * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
22  */
23 
38 #ifndef _CMIME_MESSAGE_H
39 #define _CMIME_MESSAGE_H
40 
41 #ifdef __cplusplus
42 extern "C" {
43 #endif
44 
45 #include <stdio.h>
46 #include <stdlib.h>
47 #include <string.h>
48 #include <assert.h>
49 #include <ctype.h>
50 #include <time.h>
51 #include <sys/mman.h>
52 #include <sys/types.h>
53 #include <sys/stat.h>
54 #include <unistd.h>
55 #include <fcntl.h>
56 #include <sys/param.h>
57 #include <errno.h>
58 
59 #include "cmime_address.h"
60 #include "cmime_list.h"
61 #include "cmime_header.h"
62 #include "cmime_part.h"
63 #include "cmime_util.h"
64 #include "cmime_string.h"
65 
70 typedef enum _BoundaryType {
74 
79 typedef struct {
83  char *boundary;
84  char *gap;
86  char *linebreak;
89 
94 typedef enum _CMimeMultipartType {
101 
108 
114 void cmime_message_free(CMimeMessage_T *message);
115 
123 void cmime_message_set_sender(CMimeMessage_T *message, const char *sender);
124 
131 //#define cmime_message_get_sender(message) (cmime_address_to_string(message->sender))
133 
138 #define cmime_message_get_sender(message) (message->sender)
139 
147 void cmime_message_set_message_id(CMimeMessage_T *message, const char *mid);
148 
156 
163 
170 
178 int cmime_message_set_header(CMimeMessage_T *message, const char *header);
179 
187 CMimeHeader_T *cmime_message_get_header(CMimeMessage_T *message, const char *header);
188 
193 #define cmime_message_get_headers(message) (message->headers)
194 
203 int cmime_message_add_recipient(CMimeMessage_T *message, const char *recipient, CMimeAddressType_T t);
204 
212 int cmime_message_add_recipient_to(CMimeMessage_T *message, const char *recipient);
213 
221 int cmime_message_add_recipient_cc(CMimeMessage_T *message, const char *recipient);
222 
230 int cmime_message_add_recipient_bcc(CMimeMessage_T *message, const char *recipient);
231 
236 #define cmime_message_get_recipients(message) (message->recipients)
237 
244 void cmime_message_set_content_type(CMimeMessage_T *message, const char *s);
245 
253 
260 void cmime_message_set_content_transfer_encoding(CMimeMessage_T *message, const char *s);
261 
269 
276 void cmime_message_set_content_id(CMimeMessage_T *message, const char *s);
277 
285 
292 void cmime_message_set_content_description(CMimeMessage_T *message, const char *s);
293 
300 
311 void cmime_message_set_mime_version(CMimeMessage_T *message, const char *s);
312 
320 
327 void cmime_message_set_date(CMimeMessage_T *message, const char *s);
328 
335 char *cmime_message_get_date(CMimeMessage_T *message);
336 
344 
351 void cmime_message_set_boundary(CMimeMessage_T *message, const char *boundary);
352 
357 #define cmime_message_get_boundary(message) (message->boundary)
358 
365 
372 
382 int cmime_message_from_file(CMimeMessage_T **message, const char *filename, int header_only);
383 
391 int cmime_message_to_file(CMimeMessage_T *message, const char *filename);
392 
400 
410 int cmime_message_from_string(CMimeMessage_T **message, const char *content, int header_only);
411 
418 #define cmime_message_part_count(message) (message->parts->size)
419 
426 void cmime_message_set_subject(CMimeMessage_T *message, const char *s);
427 
435 
442 void cmime_message_prepend_subject(CMimeMessage_T *message, const char *s);
443 
450 void cmime_message_append_subject(CMimeMessage_T *message, const char *s);
451 
459 int cmime_message_set_body(CMimeMessage_T *message, const char *content);
460 
469 
476 void cmime_message_add_attachment(CMimeMessage_T *message, char *attachment);
477 
486 CMimeMessage_T *cmime_message_create_skeleton(const char *sender, const char *recipient, const char *subject);
487 
496 
507 
512 #define cmime_message_part_first(message) ((CMimePart_T *)cmime_list_head(message->parts)->data)
513 
518 #define cmime_message_part_last(message) ((CMimePart_T *)cmime_list_tail(message->parts)->data)
519 
520 #ifdef __cplusplus
521 }
522 #endif
523 
524 #endif /* _CMIME_MESSAGE_H */
525 
void cmime_message_free(CMimeMessage_T *message)
Free a CMimeMessage_T object.
Definition: cmime_message.c:431
void cmime_message_set_mime_version(CMimeMessage_T *message, const char *s)
Set Mime-Version header value. According to RFC 2045, Mime-Version header is required at the top leve...
Definition: cmime_message.c:622
CMimeList_T * recipients
Definition: cmime_message.h:81
int cmime_message_part_remove(CMimeMessage_T *message, CMimePart_T *part)
Remove a mime part from message.
Definition: cmime_message.c:1130
int cmime_message_set_header(CMimeMessage_T *message, const char *header)
Set a header to message object. If header already exists, it will be overwritten. ...
Definition: cmime_message.c:505
int cmime_message_add_recipient(CMimeMessage_T *message, const char *recipient, CMimeAddressType_T t)
Add recipient to message.
Definition: cmime_message.c:539
char * gap
Definition: cmime_message.h:84
char * cmime_message_get_content_type(CMimeMessage_T *message)
Get Content-Type header value.
Definition: cmime_message.c:610
Definition: cmime_message.h:99
Defines functions and structs for mime part handling.
CMimeList_T * parts
Definition: cmime_message.h:85
Definition: cmime_message.h:96
CMimeStringList_T * boundaries
Definition: cmime_message.h:87
char * cmime_message_get_subject(CMimeMessage_T *message)
Get the subject string from CMimeMessage_T object.
Definition: cmime_message.c:959
void cmime_message_set_content_type(CMimeMessage_T *message, const char *s)
Set Content-Type header.
Definition: cmime_message.c:606
char * linebreak
Definition: cmime_message.h:86
void cmime_message_set_date(CMimeMessage_T *message, const char *s)
Set date string header.
Definition: cmime_message.c:647
int cmime_message_append_part(CMimeMessage_T *message, CMimePart_T *part)
Append mime part to message object and generate boundary if necessary.
Definition: cmime_message.c:1060
char * cmime_message_get_content_id(CMimeMessage_T *message)
Get Content-ID header value.
Definition: cmime_message.c:635
Represents an email address.
Definition: cmime_address.h:57
char * cmime_message_get_content_description(CMimeMessage_T *message)
Get Content-Description header value.
Definition: cmime_message.c:643
int cmime_message_add_child_part(CMimeMessage_T *message, CMimePart_T *part, CMimePart_T *child, CMimeMultipartType_T subtype)
Add a child part to given mimepart, set content type and generate a boundary if necessary.
Definition: cmime_message.c:1159
void cmime_message_append_subject(CMimeMessage_T *message, const char *s)
append string to subject
Definition: cmime_message.c:974
Definition: cmime_message.h:98
void cmime_message_add_generated_message_id(CMimeMessage_T *message)
Add a newly generated message id to a CMimeMessage_T object.
Definition: cmime_message.c:1012
int cmime_message_to_file(CMimeMessage_T *message, const char *filename)
Write CMimeMessage_T object to file.
Definition: cmime_message.c:792
char * cmime_message_get_content_transfer_encoding(CMimeMessage_T *message)
Get Content-Transfer-Encoding value.
Definition: cmime_message.c:618
CMimeAddressType_T
Possible types of email addresses.
Definition: cmime_address.h:46
void cmime_message_add_generated_boundary(CMimeMessage_T *message)
Add a newly generated boundary to a CMimeMessage_T object.
Definition: cmime_message.c:714
Definition: cmime_message.h:72
int cmime_message_add_recipient_to(CMimeMessage_T *message, const char *recipient)
Add To recipient to message.
Definition: cmime_message.c:576
A mime part.
Definition: cmime_part.h:52
CMimeMessage_T * cmime_message_new(void)
Creates a new CMimeMessage_T object.
Definition: cmime_message.c:400
char * cmime_message_get_mime_version(CMimeMessage_T *message)
Get Mime-Version header value.
Definition: cmime_message.c:627
int cmime_message_set_date_now(CMimeMessage_T *message)
Get current time and set date header.
Definition: cmime_message.c:655
void cmime_message_set_content_transfer_encoding(CMimeMessage_T *message, const char *s)
set Content-Transfer-Encoding value
Definition: cmime_message.c:614
CMimeAddress_T * sender
Definition: cmime_message.h:80
void cmime_message_set_boundary(CMimeMessage_T *message, const char *boundary)
Set message boundary.
Definition: cmime_message.c:671
void cmime_message_set_content_description(CMimeMessage_T *message, const char *s)
Set Content-Description value.
Definition: cmime_message.c:639
CMimeMultipartType_T
Possible multipart mime subtypes.
Definition: cmime_message.h:94
int cmime_message_add_recipient_bcc(CMimeMessage_T *message, const char *recipient)
Add Bcc recipient to message.
Definition: cmime_message.c:596
char * cmime_message_generate_message_id(void)
Generate a message id.
Definition: cmime_message.c:985
Definition: cmime_message.h:95
CMimeHeader_T * cmime_message_get_header(CMimeMessage_T *message, const char *header)
Get header for given key.
Definition: cmime_message.c:520
Represents an email message.
Definition: cmime_message.h:79
void cmime_message_set_content_id(CMimeMessage_T *message, const char *s)
Set Content-ID header value.
Definition: cmime_message.c:631
char * cmime_message_get_sender_string(CMimeMessage_T *message)
Get sender of a CMimeMessage_T object as string.
Definition: cmime_message.c:473
void cmime_message_add_attachment(CMimeMessage_T *message, char *attachment)
add attachment to message
Definition: cmime_message.c:1083
Definition: cmime_message.h:97
CMimeMessage_T * cmime_message_create_skeleton(const char *sender, const char *recipient, const char *subject)
create message skeleton with basic header information
Definition: cmime_message.c:1107
CMimeBoundaryType_T
Possible types of boundaries.
Definition: cmime_message.h:70
char * boundary
Definition: cmime_message.h:83
void cmime_message_set_sender(CMimeMessage_T *message, const char *sender)
Add sender to CMimeMessage_T object. If sender already exists, it will be overwritten.
Definition: cmime_message.c:455
void cmime_message_prepend_subject(CMimeMessage_T *message, const char *s)
prepend string to subject
Definition: cmime_message.c:963
Double linked list implementation.
Definition: cmime_list.h:55
Defines functions and structs for double linked list.
char * cmime_message_get_date(CMimeMessage_T *message)
Get date string from CMimeMessage_T object.
Definition: cmime_message.c:651
CMimeList_T * headers
Definition: cmime_message.h:82
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
Defines functions and structs for email address handling.
Defines helper functions and structs for string handling.
char * cmime_message_to_string(CMimeMessage_T *message)
Return a message object as string.
Definition: cmime_message.c:816
Definition: cmime_message.h:71
char * cmime_message_get_message_id(CMimeMessage_T *message)
Get MessageID of message object.
Definition: cmime_message.c:501
Defines functions and structs for header management.
Defines utility functions.
void cmime_message_set_subject(CMimeMessage_T *message, const char *s)
Set message subject.
Definition: cmime_message.c:955
A simple list with strings.
Definition: cmime_string.h:46
char * cmime_message_generate_boundary(void)
Generate a message boundary.
Definition: cmime_message.c:695
void cmime_message_set_message_id(CMimeMessage_T *message, const char *mid)
Set message id to CMimeMessage_T object, if alreay exists, value will be overwritten.
Definition: cmime_message.c:482
int cmime_message_from_string(CMimeMessage_T **message, const char *content, int header_only)
Parse given string and create a new CMimeMessage_T object.
Definition: cmime_message.c:929
int cmime_message_set_body(CMimeMessage_T *message, const char *content)
Set plain body to non multipart message.
Definition: cmime_message.c:1021
A email header item.
Definition: cmime_header.h:45
int cmime_message_add_recipient_cc(CMimeMessage_T *message, const char *recipient)
Add Cc recipient to message.
Definition: cmime_message.c:586