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 12class BList; 13struct 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 39enum read_flags { 40 B_UNREAD = 0, 41 B_SEEN = 1, 42 B_READ = 2 43 44}; 45 46 47// mail flags 48enum 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 92typedef 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 104typedef struct { 105 bool alert; 106 bool beep; 107} mail_notification; 108 109 110// #pragma mark - global functions 111 112int32 count_pop_accounts(void); 113status_t get_pop_account(mail_pop_account*, int32 index = 0); 114status_t set_pop_account(mail_pop_account*, int32 index = 0, 115 bool save = true); 116 117 118// #pragma mark - BMailMessage 119 120class BMailMessage { 121public: 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 148private: 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 159private: 160 BList* fFields; 161 bool fMultiPart; 162}; 163 164#endif // _MAIL_H 165