]> err.no Git - scalable-opengroupware.org/blobdiff - SOGo/SoObjects/Mailer/SOGoDraftObject.m
added ability to process custom headers in draft object
[scalable-opengroupware.org] / SOGo / SoObjects / Mailer / SOGoDraftObject.m
index 7f4782655f8b38c846d26586924da4110a27e390..721a48d8db98c9ff78c88070553781c75449e6f2 100644 (file)
@@ -36,6 +36,7 @@
 
 static NGMimeType *TextPlainType  = nil;
 static NGMimeType *MultiMixedType = nil;
+static NSString   *userAgent      = @"SOGoMail 1.0";
 static BOOL       draftDeleteDisabled = NO; // for debugging
 static BOOL       debugOn = NO;
 
@@ -484,9 +485,25 @@ static BOOL       debugOn = NO;
   return message;
 }
 
-- (NGMutableHashMap *)mimeHeaderMap {
+- (void)_addHeaders:(NSDictionary *)_h toHeaderMap:(NGMutableHashMap *)_map {
+  NSEnumerator *names;
+  NSString *name;
+
+  if ([_h count] == 0)
+    return;
+    
+  names = [_h keyEnumerator];
+  while ((name = [names nextObject]) != nil) {
+    id value;
+      
+    value = [_h objectForKey:name];
+    [_map addObject:value forKey:name];
+  }
+}
+
+- (NGMutableHashMap *)mimeHeaderMapWithHeaders:(NSDictionary *)_headers {
   NGMutableHashMap *map;
-  NSDictionary *lInfo;
+  NSDictionary *lInfo; // TODO: this should be some kind of object?
   NSArray      *emails;
   NSString     *s;
   
@@ -528,12 +545,17 @@ static BOOL       debugOn = NO;
   
   [map addObject:[NSCalendarDate date] forKey:@"date"];
   [map addObject:@"1.0"                forKey:@"MIME-Version"];
-  [map addObject:@"SOGoMail 1.0"       forKey:@"X-Mailer"];
+  [map addObject:userAgent             forKey:@"X-Mailer"];
+
+  /* add custom headers */
+  
+  [self _addHeaders:[lInfo objectForKey:@"headers"] toHeaderMap:map];
+  [self _addHeaders:_headers                        toHeaderMap:map];
   
   return map;
 }
 
-- (NGMimeMessage *)mimeMessage {
+- (NGMimeMessage *)mimeMessageWithHeaders:(NSDictionary *)_headers {
   NSAutoreleasePool *pool;
   NGMutableHashMap  *map;
   NSArray           *bodyParts;
@@ -546,7 +568,7 @@ static BOOL       debugOn = NO;
     return nil;
   }
   
-  if ((map = [self mimeHeaderMap]) == nil)
+  if ((map = [self mimeHeaderMapWithHeaders:_headers]) == nil)
     return nil;
   [self debugWithFormat:@"MIME Envelope: %@", map];
   
@@ -572,8 +594,11 @@ static BOOL       debugOn = NO;
   [pool release];
   return [message autorelease];
 }
+- (NGMimeMessage *)mimeMessage {
+  return [self mimeMessageWithHeaders:nil];
+}
 
-- (NSString *)saveMimeMessageToTemporaryFile {
+- (NSString *)saveMimeMessageToTemporaryFileWithHeaders:(NSDictionary *)_h {
   NGMimeMessageGenerator *gen;
   NSAutoreleasePool *pool;
   NGMimeMessage *message;
@@ -581,7 +606,7 @@ static BOOL       debugOn = NO;
 
   pool = [[NSAutoreleasePool alloc] init];
   
-  message = [self mimeMessage];
+  message = [self mimeMessageWithHeaders:_h];
   if (![message isNotNull])
     return nil;
   if ([message isKindOfClass:[NSException class]]) {
@@ -596,6 +621,9 @@ static BOOL       debugOn = NO;
   [pool release];
   return [tmpPath autorelease];
 }
+- (NSString *)saveMimeMessageToTemporaryFile {
+  return [self saveMimeMessageToTemporaryFileWithHeaders:nil];
+}
 
 - (void)deleteTemporaryMessageFile:(NSString *)_path {
   NSFileManager *fm;