[RESOLVIDO] Erro com string entre chaves

Boa noite a todos do Fórum.

Estou com problemas ao passar uma string como parâmetro para a função imap_open.
Essa função pede que se passe o parâmetro de conexão com o servidor de e-mail entre chaves.

Ex:

$host = "{localhost:143/imap}INBOX"
$login = "teste";
$password = "teste";

imap_open($host, $login, $password);

Creio que por estar entre as chaves, o scriptcase tenta ler como se fosse uma variável.
Mandei escrever na tela o conteúdo da variável $host e outros testes.

echo '{localhost:143/imap}INBOX';
echo '{teste}';
echo '{123456}';
echo 'texto{entre}chaves';

//Saida
{ localhost:143/imap}INBOX
$teste
$123456
texto$entre chaves

Notem que o scriptcase adiciona ‘espaços’ ou ‘$’ nas strings, creio que seja esse o motivo de eu receber erros de conexão. ‘No such host as localhost’
Se coloco com aspas duplas recebo erros Undefined variable.
Tentei também ‘escapar’ a ‘{’, porém o resultado é o mesmo.
Refiz esse script em um arquivo php fora do scriptcase e funcionou, e quando eu adicionei o ‘espaço’ antes do host recebo o erro de conexão.
Gostaria de incluir esse script dentro do scriptcase pois preciso interagir com outras funções.

Como devo proceder para que não haja essa conversão nas strings com chaves?

Obrigado

v eja qual eh o chr da chaves e use chr(###).“teste”.chr(###)

Onde ### eh o valor ascii da chaves

Opa, agora sim.

Funcionou 100%.

Para ref. os códigos ASCII das chaves são 123 e 125.

Muito obrigado.

Tonny, você conseguiu implementar o acesso imap pelo SC? Estava tentando fazer isso mas desisti justamente por esse tipo de inconveniente. Ficou bom?

Sim deu certo, porém tenho problemas com o tratamento do corpo do e-mail que recebo.
Principalmente no tratamento dos anexos.
Por ex. e-mails com prioridade alta ocasionam erros de leitura.
Creio que o porque seja por eles possuírem uma estrutura diferente.

Estou adaptando alguns códigos que encontrei na Internet para testar isso,
imagino que terei que tratar cada caso separadamente.

Abaixo segue o código que estou testando, não me recordo as fontes pois fui pesquisando e adicionando as linhas.
Ele ainda está bagunçado e bem amarrado à minha rotina, afinal tem um método que faz tudo =),
que é fazer a leitura de e-mails, e baixar o anexos JPG em uma pasta,
após baixados ele move o e-mail para uma pasta ‘lidos’ no servidor de e-mail.

Pretendo separar essa rotina em mais funções e adicionar outras para cada operação.

Caso alguém tenha alguma contribuição favor postar. =)

class readattachment {
 function getdecodevalue($message,$coding) {
  if ($coding == 0) {
   $message = imap_8bit($message);
  } elseif ($coding == 1) {
   $message = imap_8bit($message);
  } elseif ($coding == 2) {
   $message = imap_binary($message);
  } elseif ($coding == 3) {
   $message=imap_base64($message);
  } elseif ($coding == 4) {
   $message = imap_qprint($message);
  } elseif ($coding == 5) {
   $message = imap_base64($message);
  }
  return $message;
 }

 function savedata($host, $login, $password, $savedirpath, $moveToFolder) {
  $mbox = imap_open($host, $login, $password) or die("can't connect: " . imap_last_error());
  $message = array();
  $message["attachment"]["type"][0] = "text";
  $message["attachment"]["type"][1] = "multipart";
  $message["attachment"]["type"][2] = "message";
  $message["attachment"]["type"][3] = "application";
  $message["attachment"]["type"][4] = "audio";
  $message["attachment"]["type"][5] = "image";
  $message["attachment"]["type"][6] = "video";
  $message["attachment"]["type"][7] = "other";

 $check = imap_mailboxmsginfo($mbox);

 echo "Date: "     . $check->Date    . "\n" ;
 echo "Driver: "   . $check->Driver  . "\n" ;
 echo "Unread: "   . $check->Unread  . "\n" ;
 echo "Size: "     . $check->Size    . "\n" ;

 $numero_mensagens = imap_num_msg($mbox);
 $numero_mens_nao_lidas = imap_num_recent($mbox);
 if ($numero_mensagens == 1) {
  echo "\nVoce tem $numero_mensagens mensagem.";
 } else {
  echo "\nVoce tem $numero_mensagens mensagens.";
 }
 echo "\n";

 //aqui faço um loop para printar na tela o cabeçalho dos e-mails
 for($i = 1;$i <= imap_num_msg($mbox);$i++) {
  $headers = imap_header($mbox, $i);
  $assunto = $headers->subject;
  $message_id = $headers->message_id;
  $toaddress = $headers->toaddress;
  $to = $headers->to;
  //$remetente = $to[0]->personal;
  $email_remetente = $to[0]->mailbox;
  $servidor_remetente = $to[0]->host;
  $data = $headers->date;
  $data = strtotime($data);
  $data = date("d/m/Y H:i:s", $data);
  echo "\n#$i - Assunto = $assunto - Remetente = $email_remetente@$servidor_remetente Data = $data";

 }

  //o mesmo loop só que agora para baixar os anexos, os erros ocorrem daqui para baixo
  for ($jk = 1; $jk <= imap_num_msg($mbox); $jk++) {
   $structure = imap_fetchstructure($mbox, $jk);
   $parts = $structure->parts;
   $fpos = 2;

   for($i = 1; $i < count($parts); $i++) {
    $message["pid"][$i] = ($i);
    $part = $parts[$i];

    if($part->disposition == "attachment") {
     $message["type"][$i] = $message["attachment"]["type"][$part->type] . "/" . strtolower($part->subtype);
     $message["subtype"][$i] = strtolower($part->subtype);
     $ext = $part->subtype;
     $params = $part->dparameters;
     $filename = $part->dparameters[0]->value;
     $extens = strtolower(substr($filename, -4));

     if ($extens == ".jpg") {
      $mege = "";
      $data = "";
      $mege = imap_fetchbody($mbox, $jk, $fpos);
      $filename = $savedirpath . md5(uniqid(time())) . $extens;
      echo "\n" . $filename;
      $fp = fopen($filename, "w+");
      $data = $this->getdecodevalue($mege, $part->type);
      fputs($fp, $data);
      fclose($fp);
     }
     $fpos += 1;
    }
   }
   if ($moveToFolder != "") {
    imap_mail_move($mbox, $jk, $moveToFolder);
   }
  }
  imap_expunge($mbox);
  imap_close($mbox);
 }
}


$dominio = "localhost";
$servidorSmtp = "smtp." . $dominio;
$porta = "143" . "/novalidate-cert"; //pode variar conforme o servidor, adicionei esse parâmetro para resolver erros de validação
$usuario = "teste" . "@" . $dominio;
$senha = "teste123";
$conexao = chr(123).gethostbyname($servidorSmtp).":".$porta.chr(125)."INBOX"; //segundo alguns fóruns resolver o nome com 'gethostbyname' deixa a rotina mais rápida.
$moverParaPasta = "INBOX.lidos"; //deixar vazio caso não deseje mover
$diretorioDeTrabalho = "/tmp/emails";

$ra = new readattachment();

$ra->savedata($conexao, $usuario, $senha, $diretorioDeTrabalho, $moverParaPasta);