xref: /haiku/headers/os/mail/E-mail.h (revision 805cd0be8c456c8c19aea06a1b12bcd93eada2f2)
1 /*
2  * Copyright 2009, Haiku, Inc. All rights reserved.
3  * Distributed under the terms of the MIT License.
4  */
5 #ifndef _E_MAIL_H
6 #define _E_MAIL_H
7 
8 
9 #include <UTF8.h>
10 
11 
12 class BList;
13 struct entry_ref;
14 
15 
16 // E-Mail attributes
17 #define B_MAIL_ATTR_NAME		"MAIL:name"				// indexed string
18 #define B_MAIL_ATTR_STATUS		"MAIL:status"			// indexed string
19 #define B_MAIL_ATTR_PRIORITY	"MAIL:priority"			// indexed string
20 #define B_MAIL_ATTR_TO			"MAIL:to"				// indexed string
21 #define B_MAIL_ATTR_CC			"MAIL:cc"				// indexed string
22 #define B_MAIL_ATTR_BCC			"MAIL:bcc"				// string
23 #define B_MAIL_ATTR_FROM		"MAIL:from"				// indexed string
24 #define B_MAIL_ATTR_SUBJECT		"MAIL:subject"			// indexed string
25 #define B_MAIL_ATTR_REPLY		"MAIL:reply"			// indexed string
26 #define B_MAIL_ATTR_WHEN		"MAIL:when"				// indexed time
27 #define B_MAIL_ATTR_FLAGS		"MAIL:flags"			// indexed int32
28 #define B_MAIL_ATTR_RECIPIENTS	"MAIL:recipients"		// string
29 #define B_MAIL_ATTR_MIME		"MAIL:mime"				// string
30 #define B_MAIL_ATTR_HEADER		"MAIL:header_length"	// int32
31 #define B_MAIL_ATTR_CONTENT		"MAIL:content_length"	// int32
32 #define B_MAIL_ATTR_READ		"MAIL:read"				// int32
33 #define B_MAIL_ATTR_THREAD		"MAIL:thread"			// string
34 #define B_MAIL_ATTR_ACCOUNT		"MAIL:account"			// string
35 #define B_MAIL_ATTR_ACCOUNT_ID	"MAIL:account_id"		// int32
36 
37 
38 // read flags
39 enum read_flags {
40 	B_UNREAD				= 0,
41 	B_SEEN					= 1,
42 	B_READ					= 2
43 
44 };
45 
46 
47 // mail flags
48 enum mail_flags {
49 	B_MAIL_PENDING			= 1,						// waiting to be sent
50 
51 	B_MAIL_SENT				= 2,						// has been sent
52 
53 	B_MAIL_SAVE				= 4							// save mail after
54 														// sending
55 };
56 
57 #define B_MAIL_TYPE				"text/x-email"			// mime type
58 #define B_PARTIAL_MAIL_TYPE		"text/x-partial-email"	// mime type
59 
60 
61 // WARNING: Everything past this point is deprecated. See MailMessage.h,
62 // mail_encoding.h and MailDaemon.h for alternatives.
63 
64 
65 // #pragma mark - defines
66 
67 // schedule days
68 #define B_CHECK_NEVER			 0
69 #define B_CHECK_WEEKDAYS		 1
70 #define B_CHECK_DAILY			 2
71 #define B_CHECK_CONTINUOUSLY	 3
72 #define B_CHECK_CONTINUOSLY		 3
73 
74 // max. lengths
75 #define B_MAX_USER_NAME_LENGTH	32
76 #define B_MAX_HOST_NAME_LENGTH	64
77 
78 // rfc822 header field types
79 #define B_MAIL_TO				"To: "
80 #define B_MAIL_CC				"Cc: "
81 #define B_MAIL_BCC				"Bcc: "
82 #define B_MAIL_FROM				"From: "
83 #define B_MAIL_DATE				"Date: "
84 #define B_MAIL_REPLY			"Reply-To: "
85 #define B_MAIL_SUBJECT			"Subject: "
86 #define B_MAIL_PRIORITY			"Priority: "
87 
88 
89 // #pragma mark - structs
90 
91 
92 typedef struct {
93 	char		pop_name[B_MAX_USER_NAME_LENGTH];
94 	char		pop_password[B_MAX_USER_NAME_LENGTH];
95 	char		pop_host[B_MAX_HOST_NAME_LENGTH];
96 	char		real_name[128];
97 	char		reply_to[128];
98 	int32		days;			/* see flags above*/
99 	int32		interval;		/* in seconds*/
100 	int32		begin_time;		/* in seconds*/
101 	int32		end_time;		/* in seconds*/
102 } mail_pop_account;
103 
104 typedef struct {
105 	bool		alert;
106 	bool		beep;
107 } mail_notification;
108 
109 
110 // #pragma mark - BMailMessage
111 
112 class BMailMessage {
113 public:
114 								BMailMessage();
115 								~BMailMessage();
116 
117 			status_t			AddContent(const char* text, int32 length,
118 									uint32 encoding = B_ISO1_CONVERSION,
119 									bool clobber = false);
120 			status_t			AddContent(const char* text, int32 length,
121 									const char* encoding,
122 									bool clobber = false);
123 
124 			status_t			AddEnclosure(entry_ref* ref,
125 									bool clobber = false);
126 			status_t			AddEnclosure(const char* path,
127 									bool clobber = false);
128 			status_t			AddEnclosure(const char* MIME_type, void* data,
129 									int32 len, bool clobber = false);
130 
131 			status_t			AddHeaderField(uint32 encoding,
132 									const char* field_name, const char* str,
133 									bool clobber = false);
134 			status_t			AddHeaderField(const char* field_name,
135 									const char* str, bool clobber = false);
136 
137 			status_t			Send(bool sendNow = false,
138 									 bool removeAfterSending = false);
139 
140 private:
141 			int32				concatinate(char**, int32, char*);
142 			int32				count_fields(char* name = NULL);
143 			status_t			find_field(char*, type_code*, char**, void**,
144 									int32*, uint32*, char**, bool*, int32);
145 			BList*				find_field(const char*);
146 			status_t			get_field_name(char**, int32);
147 			status_t			set_field(const char*, type_code, const char*,
148 									const void*, int32, uint32, const char*,
149 									bool);
150 
151 private:
152 			BList*		fFields;
153 			bool		fMultiPart;
154 };
155 
156 #endif // _MAIL_H
157