Index: /trunk/security/classes/CertificadoB.php
===================================================================
--- /trunk/security/classes/CertificadoB.php	(revision 3285)
+++ /trunk/security/classes/CertificadoB.php	(revision 4933)
@@ -9,9 +9,9 @@
   public $dados = array();        # Area para armazenar os dados recuperados do certificado.
   public $apresentado = false;    # Deve ser testado para verificar se no certificado processado foi localizado o CPF
-  public $erros_ssl = array(); 
-  public $cert_assinante = '';	
+  public $erros_ssl = array();
+  public $cert_assinante = '';
   public $msg_sem_assinatura = '';  #conteï¿œdo da mensagem sem assinatura, que retorna da funï¿œï¿œo verify do openssl
   public $arquivos_para_deletar = array();
-  
+
   public function __construct()
   {
@@ -32,12 +32,12 @@
 public function __destruct()
   {
-    #Remover arquivos temporarios.....	
+    #Remover arquivos temporarios.....
     deleta_arquivos_temporarios($this->arquivos_para_deletar);
   }
 
-# Recupera dados de um certificado no formato pem 
+# Recupera dados de um certificado no formato pem
   function certificado($certificado_pem)
-  {		
-      if (!$certificado_pem) 
+  {
+      if (!$certificado_pem)
     {
         $this->apresentado = False;
@@ -46,6 +46,6 @@
    $this->dados = recupera_dados_do_ceritificado_digital($certificado_pem);
    $this->dados_xml = gera_xml_com_dados_do_certificado($this->dados);
-     # Certificado foi processado, as informacoes obtidas estao em $this->dados. 
-  $this->apresentado = true;  
+     # Certificado foi processado, as informacoes obtidas estao em $this->dados.
+  $this->apresentado = true;
   }
 
@@ -71,5 +71,5 @@
 
 		$w = exec('openssl rsautl -in ' . $senha_arquivo_temporario . ' -out ' . $senha_criptografada_arquivo_temporario . ' -inkey ' . $cert_arquivo_temporario . ' -certin -pkcs -keyform PEM -encrypt',$saida);
-		
+
 		if(!file_exists($senha_criptografada_arquivo_temporario))
 		{
@@ -79,5 +79,5 @@
 		}
 
-                # Recupera a senha criptada, binario.....		
+                # Recupera a senha criptada, binario.....
 		$retorno = file_get_contents($senha_criptografada_arquivo_temporario);
 
@@ -97,5 +97,5 @@
 		if(!is_array($c))	return false;
 		$aux = count($c);
-		if($aux < 1)	return false;		
+		if($aux < 1)	return false;
 		if(!is_array($h) )	return false;
 		# Tem de verificar todos os certificados que serao utilizados para criptografar a msg..
@@ -109,5 +109,5 @@
 		$enc_arquivo_temporario = gera_nome_arquivo_temporario(&$this->arquivos_para_deletar);
 		//echo $enc_arquivo_temporario.'<br>';
-		
+
 		// LIMPA ERROS ... Pode ser um problema para outras aplicacoes que usam openssl(fonte de erros unica).
 		while ($erro = openssl_error_string()); //  Limpa buffer de erros anteriores......
@@ -118,6 +118,6 @@
 		{
 			// Guarda msgs de erro ...
-			while ($erro = openssl_error_string()) 
-			{ 
+			while ($erro = openssl_error_string())
+			{
 				$this->erros_ssl[] = $erro;
 			}
@@ -126,5 +126,5 @@
 			return false;
 		}
-                # Recupera a msg criptada......		
+                # Recupera a msg criptada......
 		$retorno = file_get_contents($enc_arquivo_temporario);
 		deleta_arquivos_temporarios($this->arquivos_para_deletar);
@@ -134,5 +134,5 @@
 
 
-# Verifica uma msg($m) assinada... 
+# Verifica uma msg($m) assinada...
 	public function verificar($m)
 	{
@@ -167,9 +167,7 @@
                         return false;
                     }
-		// LIMPA ERROS ... Pode ser um problema para outras aplicacoes que usam openssl(fonte de erros unica).
+                $this->erros_ssl = array();
 		while ($erro = openssl_error_string()); //  Limpa buffer de erros anteriores......
-		$this->erros_ssl = array();
-		$resultado = openssl_pkcs7_verify($m_arquivo_temporario,0, $vrf_cert_arquivo_temporario,array($GLOBALS['CAs']),$GLOBALS['CAs'],$vrf_msg_arquivo_temporario); 
-	        $retorno = true; 
+                $resultado = openssl_pkcs7_verify($m_arquivo_temporario,0, $vrf_cert_arquivo_temporario,array($GLOBALS['CAs']),$GLOBALS['CAs'],$vrf_msg_arquivo_temporario);
 		if($resultado === -1)
 		{
@@ -181,4 +179,19 @@
                     $retorno = false;
                 }
+                if($resultado === False)
+                    {
+                        while ($erro = openssl_error_string())
+                            {
+                                if(substr($erro, 0,20) === 'error:21075075:PKCS7') 
+                                    {
+                                        $this->erros_ssl = array();
+                                        while ($erro = openssl_error_string()); //  Limpa buffer de erros anteriores......
+                                        $resultado = openssl_pkcs7_verify($m_arquivo_temporario,PKCS7_NOVERIFY, $vrf_cert_arquivo_temporario,array($GLOBALS['CAs']),$GLOBALS['CAs'],$vrf_msg_arquivo_temporario);
+                                        break;
+                                    }
+                                $this->erros_ssl[] = $erro;
+                            }
+                    }
+	        $retorno = true;
 
                 if($resultado === False)
@@ -188,9 +201,9 @@
 		        $retorno = false;
 			// Guarda msgs de erro ...
-			while ($erro = openssl_error_string()) 
-			{ 
+			while ($erro = openssl_error_string())
+			{
 				$this->erros_ssl[] = $erro;
 			}
-			If(file_exists($vrf_msg_arquivo_temporario))  
+			If(file_exists($vrf_msg_arquivo_temporario))
 				{
 					$this->msg_sem_assinatura =  file_get_contents($vrf_msg_arquivo_temporario);
@@ -206,5 +219,5 @@
 			{
 				# Se nao foi possivel obter o certificado retorna com falso .....
-				If(file_exists($vrf_msg_arquivo_temporario))  
+				If(file_exists($vrf_msg_arquivo_temporario))
 					{
 						$this->msg_sem_assinatura =  file_get_contents($vrf_msg_arquivo_temporario);
@@ -235,10 +248,10 @@
 		{
 			while ($erro = openssl_error_string()); //  Limpa buffer de erros anteriores......
-			# Certificado poderia ter assinado um email?? 
+			# Certificado poderia ter assinado um email??
 			if(!($this->dados['KEYUSAGE']['digitalSignature']))
 			{
 				$this->erros_ssl[] = 'Certificado nao poderia ter sido utilizado para assinar email.';
-				while ($erro = openssl_error_string()) 
-					{ 
+				while ($erro = openssl_error_string())
+					{
 						$this->erros_ssl[] = $erro;
 					}
@@ -259,7 +272,7 @@
 		}
 		deleta_arquivos_temporarios($this->arquivos_para_deletar);
-		$this->arquivos_para_deletar = array();	
+		$this->arquivos_para_deletar = array();
 		return $retorno;
-	}	
+	}
 
 	public function extrai_certificado_da_msg_assinada($m)
@@ -311,5 +324,5 @@
 					$retorno = $item;
 					break;
-				}		
+				}
 		}
 		deleta_arquivos_temporarios($this->arquivos_para_deletar);
Index: /trunk/expressoMail1_2/js/main.js
===================================================================
--- /trunk/expressoMail1_2/js/main.js	(revision 4854)
+++ /trunk/expressoMail1_2/js/main.js	(revision 4933)
@@ -1658,15 +1658,16 @@
 	{
 		var handler = function(data){
-
+                        if(typeof(expresso_local_messages) != "undefined"){
 			if(data.msg_day == '')
 			{
 				header=expresso_local_messages.get_msg_date(data.original_ID, proxy_mensagens.is_local_folder(get_current_folder()));
-
+                                if(header){
 				data.fulldate=header.fulldate;
 				data.smalldate=header.smalldate;
 				data.msg_day = header.msg_day;
 				data.msg_hour = header.msg_hour;
-
-			}
+			}
+			}
+                      }
 			this.show_msg(data);
 		}
Index: /trunk/expressoMail1_2/js/local_messages.js
===================================================================
--- /trunk/expressoMail1_2/js/local_messages.js	(revision 4883)
+++ /trunk/expressoMail1_2/js/local_messages.js	(revision 4933)
@@ -1306,4 +1306,9 @@
 	rs = this.dbGears.execute("select mail from mail where original_id="+original_id);
     }
+        if(!rs.field(0)){
+          ret=null;
+    }
+    else
+        {
     var tmp = connector.unserialize(rs.field(0));
     var ret = new Array();
@@ -1312,5 +1317,5 @@
     ret.msg_day = tmp.msg_day;
     ret.msg_hour = tmp.msg_day;
-
+        }
     rs.close();
     this.finalize();
