segunda-feira, 24 de setembro de 2012

PHP , SMTP - Função email autenticado

A função mail() no PHP, é uma função simples e usada largamente por quem deixa ao critério do servidor o envio de emails de dentro dos projecto, e esta função usa o servidor de envio de emails interno para o fazer.

No entanto, recentemente (não sei precisar o tempo) um dos maiores revendedores de serviços de alojamento do nosso país a esotérica, passo a não permitir o envio de email de dentro dos clientes sem que estes se autenticassem via SMTP.

Foi por este motivo que alguém me contacto, e me pediu para resolver o problema.

Pois bem, para começar tive que converter todos os ficheiros que enviavam emails, e retirar a função mail.

PHP - Email autenticado

o PHPMailer é uma classe de php que trata da ligação e de enviar os emails autenticados, por isso bastou importar o ficheiro e tratar do resto.

Para não andar sempre a importar o PHPMailer, decidi criar um ficheiro de envio de email, ao qual chamei smtpMailConfig.php o qual deverá ser adicionado com include() a cada inicio de página onde possa ser necessário.

Ficheiro.php
<?php

# Ficheiro de configurações de SMTP e ligação com PHPMailer
include("smtpMailConfig.php");

?>
smtpMailConfig.php

<?php
require("phpmailer/class.phpmailer.php");

/*
 * Função de Enviar o email
 * $vFrom - Email de Origem
 * $vFromNome - Nome de Origem
 * $vTo - Email de destino
 * $vToNome - Nome de destino
 * $vAssunto - Assunto do Email
 * $vEmail - Texto do Email
 * $vCC - Parametro CC (separados por ;)
 */
function fcEnviarEmail($vFrom,$vFromName,$vTo,$vToName,$vAssunto,$vEmail,$vCC){
global $mail;
$mail = new PHPMailer();
$mail->IsSMTP();
$mail->SMTPAuth = true;

# Dados de Ligação
$mail->Host = "127.0.0.1";
$mail->Username = "info@byteajudarblog.pt";
$mail->Password = "emailpassword";

# Dados Gerais
$mail->From = $vFrom;
$mail->FromName = $vFromName;
$mail->AddAddress($vTo, $vToName);

if(!empty($vCC)){
$vCCArr = explode(';',$vCC);
foreach($vCCArr as $key){
$mail->AddCC($key);
}
}


$mail->IsHTML(true);
$mail->Subject = $vAssunto;
$mail->Body = $vEmail;

if(!$mail->Send()){
return 0;
//echo $mail->ErrorInfo;
}else{
  return 1; //echo "Email Enviado";
}
}

?>

Enviar email pela função

Após a aplicação dos passos acima, basta chamar a função e passar os parâmetros:

Ficheiro.php
<?php
$assunto = "Email Online";
$texto = "Texto.......texto";


$mailOk = fcEnviarEmail("info@blog.pt","Nome Blog","email@destino.com",'Destino',$assunto,$texto,'cc1@destino.com;cc2@destino.com');

if($mailOk==1)
  echo "Email enviado com sucesso"; # Ou mais código php
else
  echo "Erro a enviar email";
?>


Autenticação nos serviços Esotérica

Para quem tenha mesmo assim erro a enviar email pelo serviço desta empresa, (e esta situação aconteceu comigo) basta no painel de controlo do domínio (s) verificar se no servidor de DNS existe indicação do localhost (IP: 127.0.0.1), caso não exista tem que adicionar.

======================
Nota: As minhas desculpas pelo código não estar com coloração, mas o blogger não tem essa ferramenta.


sexta-feira, 21 de setembro de 2012

MySQL Multi-Premissões em servidores remotos

No seguimento da publicação anterior, foi-me sugerido uma situação um pouco diferente, que é quando necessitamos de fazer exactamente a mesma operação mas com recurso à consola.

É verdade que é possível conectar um software de gestão de base de dados ao servidor remoto, mas também é verdade que nem sempre que tem servidor disponibiliza esse acesso assim como pode aumentar o risco de ataque ao sistema.

A informação que se segue foi testada e elaborada com recurso um MySQL Server instalado num computador com Ubuntu Linux, mas o importante é existir um acesso ao servidor.

Aceder ao MySQL

 mysql -u root -p 
após o enter aguarda que se escreva a password de acesso.
Nota: exemplo com root, mas pode ser qualquer utilizador desde que tenha acesso total

Após aceder com sucesso ao mysql a consola passa ter a informação que passa a aceitar comandos para o mysql aparecendo no inicio mysql> 



Criar novo utilizado

 CREATE USER 'blogUser'@'localhost' IDENTIFIED BY 'uma_password'; 

CREATE USER - É o comando principal
- Entre plicas ( ' ) o nome do utilizador seguido de um at (arroba) @ e entre plicas o localhost
Nota: se quiser acesso exterior em vez de localhost deverá usar o símbolo de percentagem (%) 
IDENTIFIED BY - Refere que o utilizador vai ter uma password de acesso
- Entre plicas a password
- Não esquecer de terminar com ponto e virgula (;) se não a consola ao carregar no enter vai passar para uma linha com o simbolo -> se isto acontecer, basta aplicar o ; e enter.

No fim deverá receber a seguinte mensagem na janela
 Query OK, 0 rows affected (0.00 sec) 

Agora saia da consola do MySQL
 quit 

Mais informações aqui

Criar ficheiro de SQL

Para usar o código de criar as permissões referido na publicação anterior  pode fazer de várias maneiras:
- Usar um editor de texto na consola (vi, nano, pico),
- Enviar o ficheiro por SSH ou FTP

Nota: Garanta que sabe a localização de onde coloca o ficheiro.

Executar ficheiro SQL e exportar o resultado

Para executar o ficheiro escreva o seguinte comando:
 mysql -u root -p 'blogBD' < /dir/sql/ficheiro.sql > /dir/sql/resultado.sql 

- Sendo 'blogBD' o nome da base de dados de destino

A consola volta a pedir a password, e se tudo estiver correcto volta à condição inicial, sendo que o ficheiro resultado.sql foi criado na directoria indicada.

Verificar ficheiro SQL

Agora é necessário dar uma vista de olhos no ficheiro, navegue até à pasta, e edite o ficheiro, neste caso é mesmo necessário porque o titulo da coluna também é exportada, logo tem que remover a 1ª linha do ficheiro.

Para tornar o processo mais rápido, pode adicionar no fim do ficheiro o comando:
 FLUSH PRIVILEGES; 

Executar ficheiro SQL

Por fim, com o ficheiro já operacional, basta indicar o seguinte comando:
 mysql -u root -p 'blogBD' < /dir/sql/resultado.sql; 

- Sendo 'blogBD' o nome da base de dados que vai receber a informação

Testar novo utilizador

Agora que o novo utilizador foi criado e os privilégios atribuídos, pode fazer o teste fazendo login e acedendo à base de dados, com os seguintes comandos:
 mysql -u blogUser -p 
 USE blogBD 
 SHOW TABLES 

--------------------------------------------
Bom Fim de Semana, se tiverem questões disponham e comentar ou enviar email.

quarta-feira, 19 de setembro de 2012

MySQL - Permissões em várias tabelas

Como diz o titulo esta publicação refere-se ao motor de base de dados MySQL,  e a situação que surgiu tinha como base a atribuição de permissões a um determinado utilizador a várias tabelas, mas não todas.

Esta operação mesmo com programa de gestão de bases de dados como o MySQL Workbench  é um operação que se torna penosa, visto que usa sistemas de árvore para navegar e vistos para marcar as permissões.

A maneira mais rápida então que arranjei de resolver isto, é através da criação de um script para atribuir as permissões ao utilizador por tabela dentro da base de dados.

Execute o seguinte SQL.
Nota: Garanta que o seu utilizador tem permissões totais dentro do MySQL, porque o script vai consultar tabelas de controle do motor.

Antes de prosseguir, já deve ter o utilizador criado no MySQL

-- Cria a linha a utilizar na próxima execução, atribuía mais permissões se assim se justificar 

SELECT CONCAT("GRANT SELECT, INSERT, UPDATE, DELETE ON ", TABLE_NAME," TO 'testeUser'@'localhost' ;") AS ex
-- Aqui vai ao motor requisitar todas as tabelas
FROM INFORMATION_SCHEMA.TABLES
-- Indica que só quer as tabelas da base de dados indicada no WHERE
WHERE TABLE_SCHEMA = "NomeBaseDados"
-- Se pretender excluir algumas tabelas indique o nome das mesmas
AND TABLE_NAME NOT IN ('tblPagamentos','tblBancos');    


Nota: se pretender incluir apenas algumas tabelas as linha acima deverá ser:
AND TABLE_NAME IN ('tblPagamentos','tblBancos');      

O resultado final, deverá ser exportado para ficheiro de texto.



Próximo passo, executar o que está no ficheiro de texto.

E por fim executar o commando :
FLUSH PRIVILEGES;

Para que todas as permissões se tornem activas.


terça-feira, 18 de setembro de 2012

Importar Contactos para Outlook via CSV

Quem lida com a área da informática muita vez depara-se com questões que nem sempre está à espera, e como tudo na vida, ninguém sabe tudo, e algumas coisas carecem de alguma pesquisa e outras apenas olhar para as ferramentas que já existem.

Para primeira publicação (a apresentação não conta), decidi partilhar convosco uma situação que me foi pedida por um cliente meu.

Situação:

O cliente em questão, estava a trabalhar com a plataforma HORDE para gerir os seus emails e a sua lista de contactos, no entanto existiam pormenores que ele pretendia nos quais esta plataforma não o podia ajudar. Foi então que me pediu se era possivel fazer ligação ao servidor e usar o Microsoft Outlook 2007 e deveria também importar os contacto da sua lista que já estava com mais de 1000 contactos.

Resolução:


Como esta publicação é sobre a importação, vou deixar a configuração para descarregar os emails de lado, se alguém pretender, pode pedir que farei uma publicação a explicar essa parte.

Primeiro é necessário exportar os dados da plataforma para o nosso computador.


  • No menu lateral escolha a opção "Address Book" (livro de endereços) 

  • Seleccione na barra superior do HORDE existe a opção Import/Export
  • No grupo de opções Exportar, escolha a opção "Comma separated values (Microsoft Outlook)"
Nota: No tipo de exportação já podem verificar o que quer dizer CSV, traduzido para português é um ficheiro em que os valores são separados por virgulas.

  • Clique em export ... aguarde algum tempo (desde segundos a minutos dependendo da quantidade de dados)

Agora dependendo do seu navegar um ficheiro "contacts.csv" deverá ser guardado.

Iniciei o Microsoft Outlook
  • Dependendo da versão (2003/2007/2010) no menu ficheiro procure a opção Importar/Exportar
  • Na nova janela escolha a opção "Importar de outro programa ou ficheiro" - Seguinte
  • Nas opções disponíveis procure a opção "Valores separados por virgulas (Windows)" - Seguinte
  • Indique a localização do ficheiro que fez o download, e verifique das opções abaixo qual a que melhor se adapta a sua situação
  • A próxima janela pergunta para onde são os dados, deverá escolher a opção de "Contactos" - Seguinte
  • Agora é a fase final, mas mais importante, deverá escolher a opção "Mapear Campos", porque muitas vezes os títulos dos campos não são iguais, e no fim poderá não ter nada importado.
  • Para tal, basta arrastar os campos do lado esquerdo para os títulos do lado direito e largar - OK

  • Por fim, botão Concluir e aguardar que a importação seja feita.


terça-feira, 21 de agosto de 2012

5, 4, 3, 2 ,1 - vamos lá arrancar com isto

É verdade, este blog vai mesmo arrancar.

Era uma ideia já com um tempo, visto que tenho uma ligação de alguns anos com a área da informática e como vou tendo de vez em quando uns problemas em mãos, lembrei-me que o blog é o local onde posso partilhar esses problemas, mas principalmente as soluções encontradas.

Assim sendo, quem vier visitar este espaço, irá encontrar problemas diversos sobre informática, que vão desde hardware, redes, sistemas operativos (Windows, Linux, OSX), programação, telemóveis e electrónica.

Todos os visitantes estão convidados a colocar questões, as quais terei todo o gosto em responder.