Index: class.bofelamimail.inc.php
===================================================================
--- class.bofelamimail.inc.php	(Revision 24619)
+++ class.bofelamimail.inc.php	(Arbeitskopie)
@@ -639,10 +639,11 @@
 		*
 		* @param int _uid the uid of the message
 		* @param string _partID the id of the part, which holds the attachment
+		* @param int _winmail_nr winmail.dat attachment nr.
 		*
 		* @returns array
 		*/
-		function getAttachment($_uid, $_partID)
+		function getAttachment($_uid, $_partID, $_winmail_nr=0)
 		{
 			// parse message structure
 			$structure = $this->icServer->getStructure($_uid, true);
@@ -679,8 +680,17 @@
 				'type'		=> $structure->type .'/'. $structure->subType,
 				'filename'	=> $filename, 
 				'attachment'	=> $attachment
+                       );
+                       
+                       if ( $filename == 'winmail.dat' && $_winmail_nr > 0 &&
+                               ( $wmattach = $this->decode_winmail( $_uid, $_partID, $_winmail_nr ) ) ) {
+                               $attachmentData = array(
+                                       'type'       => $wmattach['type'],
+                                       'filename'   => $wmattach['name'], 
+                                       'attachment' => $wmattach['attachment'],
 				);
-				
+			}				
+
 			return $attachmentData;
 		}
 		
@@ -1521,15 +1531,63 @@
 						$newAttachment['name']	= lang("unknown");
 					}
 				
-					$attachments[] = $newAttachment;
-				}
+                                       if ( $newAttachment['name'] == 'winmail.dat' && 
+                                               ( $wmattachments = $this->decode_winmail( $_uid, $newAttachment['partID'] ) ) ) {
+                                               $attachments = array_merge( $attachments, $wmattachments );
+                                       } else {
+                                               $attachments[] = $newAttachment;
+                                       }
+                                               //$attachments[] = $newAttachment;
 			}
+			}
 
 		   	//_debug_array($attachments); exit;
 			return $attachments;
 
 		}
 		
+               /**
+                * decodes winmail.dat attachments
+                *
+                * @param int $_uid
+                * @param string $_partID
+                * @param int $_filenumber
+                * @return array
+                */
+               function decode_winmail( $_uid, $_partID, $_filenumber=0 ) {
+                       $attachment = $this->getAttachment( $_uid, $_partID );
+
+                       $dir = "/tmp/fmail_winmail/$_uid";
+                       $mime = CreateObject('phpgwapi.mime_magic');
+                       if ( $attachment['type'] == 'APPLICATION/MS-TNEF' && $attachment['filename'] == 'winmail.dat' ) {
+                               // decode winmail.dat
+                               if ( !file_exists( "$dir/winmail.dat" ) ) {
+                                       mkdir( $dir, 0700, true );
+                                       file_put_contents( "$dir/winmail.dat", $attachment['attachment'] );
+                                       exec( "cd $dir && ytnef -f . winmail.dat" );
+                               }
+                               
+                               // list contents
+                               $files = scandir( $dir );
+                               foreach ( $files as $num => $file ) {
+                                       if ( filetype( "$dir/$file" ) != 'file' || $file == 'winmail.dat' ) continue;
+                                       if ( $_filenumber > 0 && $_filenumber != $num ) continue;
+                                       $type = $mime->filename2mime($file);
+                                       $attachments[] = array(
+                                               'is_winmail' => $num,
+                                               'name' => $file,
+                                               'size' => filesize( "$dir/$file"),
+                                               'partID' => $_partID,
+                                               'mimeType' => $type,
+                                               'type' => $type,
+                                               'attachment' => $_filenumber > 0 ? file_get_contents("/tmp/fmail_winmail/$_uid/$file") : '',
+                                       );
+                               }
+                               return $_filenumber > 0 ? $attachments[0] : $attachments;
+                       }
+                       return false;
+               }
+               
 		function getMessageBody($_uid, $_htmlOptions='', $_partID='', $_structure = '') 
 		{
 			if($_htmlOptions != '') {
Index: class.uidisplay.inc.php
===================================================================
--- class.uidisplay.inc.php	(Revision 24619)
+++ class.uidisplay.inc.php	(Arbeitskopie)
@@ -463,9 +463,10 @@
 						case 'MESSAGE/RFC822':
 							$linkData = array
 							(
-								'menuaction'	=> 'felamimail.uidisplay.display',
-								'uid'		=> $this->uid,
-								'part'		=> $value['partID']
+								'menuaction'    => 'felamimail.uidisplay.display',
+								'uid'           => $this->uid,
+								'part'          => $value['partID'],
+								'is_winmail'    => $value['is_winmail'],
 							);
 							$windowName = 'displayMessage_'. $this->uid;
 							$linkView = "egw_openWindowCentered('".$GLOBALS['egw']->link('/index.php',$linkData)."','$windowName',700,egw_getWindowOuterHeight());";
@@ -476,9 +477,10 @@
 						#case 'application/pdf':
 							$linkData = array
 							(
-								'menuaction'	=> 'felamimail.uidisplay.getAttachment',
-								'uid'		=> $this->uid,
-								'part'		=> $value['partID']
+								'menuaction'  => 'felamimail.uidisplay.getAttachment',
+								'uid'         => $this->uid,
+								'part'        => $value['partID'],
+								'is_winmail'  => $value['is_winmail'],
 							);
 							$windowName = 'displayAttachment_'. $this->uid;
 							$linkView = "egw_openWindowCentered('".$GLOBALS['egw']->link('/index.php',$linkData)."','$windowName',800,600);";
@@ -486,9 +488,10 @@
 						default:
 							$linkData = array
 							(
-								'menuaction'	=> 'felamimail.uidisplay.getAttachment',
-								'uid'		=> $this->uid,
-								'part'		=> $value['partID']
+								'menuaction'  => 'felamimail.uidisplay.getAttachment',
+								'uid'         => $this->uid,
+								'part'        => $value['partID'],
+								'is_winmail'  => $value['is_winmail'],
 							);
 							$linkView = "window.location.href = '".$GLOBALS['egw']->link('/index.php',$linkData)."';";
 							break;
@@ -498,10 +501,11 @@
 
 					$linkData = array
 					(
-						'menuaction'	=> 'felamimail.uidisplay.getAttachment',
-						'mode'		=> 'save',
-						'uid'		=> $this->uid,
-						'part'		=> $value['partID']
+						'menuaction'   => 'felamimail.uidisplay.getAttachment',
+						'mode'         => 'save',
+						'uid'          => $this->uid,
+						'part'         => $value['partID'],
+						'is_winmail'   => $value['is_winmail'],
 					);
 					$this->t->set_var("link_save",$GLOBALS['egw']->link('/index.php',$linkData));
 					
@@ -771,9 +775,10 @@
 		{
 			
 			$part		= $_GET['part'];
+			$is_winmail = $_GET['is_winmail'];
 			
 			$this->bofelamimail->reopen($this->mailbox);
-			$attachment 	= $this->bofelamimail->getAttachment($this->uid,$part);
+			$attachment = $this->bofelamimail->getAttachment($this->uid,$part,$is_winmail);
 			$this->bofelamimail->closeConnection();
 			
 			$GLOBALS['egw']->session->commit_session();
