diff --git a/ChangeLog b/ChangeLog index bdb78f619..1c4aadb86 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2012-05-18 Jean Raby + + * SoObjects/Mailer/SOGoDraftObject.m (bodyPartForAttachmentWithName): + Merge back lost code to handle encoding of binary and rcf822 attachments. + 2012-05-15 Jean Raby * SoObjects/Appointments/SOGoAppointmentObject.m (_handleResourcesConflicts): diff --git a/SoObjects/Mailer/SOGoDraftObject.m b/SoObjects/Mailer/SOGoDraftObject.m index 3d0c540ee..e1770d0dc 100644 --- a/SoObjects/Mailer/SOGoDraftObject.m +++ b/SoObjects/Mailer/SOGoDraftObject.m @@ -1119,7 +1119,7 @@ static NSString *userAgent = nil; NGMimeBodyPart *bodyPart; NSString *s; NSData *content; - BOOL attachAsString; + BOOL attachAsString, attachAsRFC822; NSString *p; id body; @@ -1134,6 +1134,7 @@ static NSString *userAgent = nil; return nil; } attachAsString = NO; + attachAsRFC822 = NO; /* prepare header of body part */ @@ -1143,6 +1144,8 @@ static NSString *userAgent = nil; [map setObject:s forKey: @"content-type"]; if ([s hasPrefix: @"text/plain"] || [s hasPrefix: @"text/html"]) attachAsString = YES; + else if ([s hasPrefix: @"message/rfc822"]) + attachAsRFC822 = YES; } if ((s = [self contentDispositionForAttachmentWithName:_name])) { @@ -1181,6 +1184,19 @@ static NSString *userAgent = nil; content = [[NSData alloc] initWithContentsOfMappedFile:p]; [content autorelease]; + if (attachAsRFC822) + { + [map setObject: @"8bit" forKey: @"content-transfer-encoding"]; + [map setObject: @"inline" forKey: @"content-disposition"]; + } + else + { + content = [content dataByEncodingBase64]; + [map setObject: @"base64" forKey: @"content-transfer-encoding"]; + } + [map setObject:[NSNumber numberWithInt:[content length]] + forKey: @"content-length"]; + /* Note: the -init method will create a temporary file! */ body = [[NGMimeFileData alloc] initWithBytes:[content bytes] length:[content length]];