xref: /haiku/headers/os/mail/E-mail.h (revision ab33d547d2d9c8103e3881f93f85b1f2edac2433)
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 - global functions
111 
112 int32 count_pop_accounts(void);
113 status_t get_pop_account(mail_pop_account*, int32 index = 0);
114 status_t set_pop_account(mail_pop_account*, int32 index = 0,
115 	bool save = true);
116 
117 
118 // #pragma mark - BMailMessage
119 
120 class BMailMessage {
121 public:
122 								BMailMessage();
123 								~BMailMessage();
124 
125 			status_t			AddContent(const char* text, int32 length,
126 									uint32 encoding = B_ISO1_CONVERSION,
127 									bool clobber = false);
128 			status_t			AddContent(const char* text, int32 length,
129 									const char* encoding,
130 									bool clobber = false);
131 
132 			status_t			AddEnclosure(entry_ref* ref,
133 									bool clobber = false);
134 			status_t			AddEnclosure(const char* path,
135 									bool clobber = false);
136 			status_t			AddEnclosure(const char* MIME_type, void* data,
137 									int32 len, bool clobber = false);
138 
139 			status_t			AddHeaderField(uint32 encoding,
140 									const char* field_name, const char* str,
141 									bool clobber = false);
142 			status_t			AddHeaderField(const char* field_name,
143 									const char* str, bool clobber = false);
144 
145 			status_t			Send(bool sendNow = false,
146 									 bool removeAfterSending = false);
147 
148 private:
149 			int32				concatinate(char**, int32, char*);
150 			int32				count_fields(char* name = NULL);
151 			status_t			find_field(char*, type_code*, char**, void**,
152 									int32*, uint32*, char**, bool*, int32);
153 			BList*				find_field(const char*);
154 			status_t			get_field_name(char**, int32);
155 			status_t			set_field(const char*, type_code, const char*,
156 									const void*, int32, uint32, const char*,
157 									bool);
158 
159 private:
160 			BList*		fFields;
161 			bool		fMultiPart;
162 };
163 
164 #endif // _MAIL_H
165