You are on page 1of 43

ESTGIO SUPERVISIONADO EM SISTEMAS DE INFORMAO

DESENVOLVIMENTO DOS MDULOS MAILCREATEANDNOTIFY E MAILREADERSERVER PARA O KONNEN.

Jan Tarik Martins Nazorek

Palmas 2012

RESUMO

Este trabalho tem como finalidade desenvolver os mdulos MailCreateAndNotify e MailReaderServer para a rede social Konnen. O mdulo MailCreateAndNotify tem por objetivo criar contas em um servidor de e-mails e enviar notificaes sobre atualizaes para os usurios da rede. J o mdulo MailReaderServer possibilita a leitura de mensagens de email, bem como far a notificao de novas atualizaes na rede. Para o desenvolvimento do trabalho foram utilizadas as ferramentas Kohana Framework, PHPMailer, JavaMail e jsoup.

PALAVRAS-CHAVE: Konnen, Kohana, E-mail, Notificao

SUMRIO

1 2

INTRODUO ............................................................................................................. 7 DESENVOLVIMENTO ................................................................................................ 9 2.1. KONNEN ................................................................................................................. 9 2.2. Apresentao dos Mdulos ................................................................................... 10 2.2.1. 2.2.2. Mdulo - MailCreateAndNotify....................................................................... 10 Mdulo MailReaderServer ........................................................................... 12

2.3. Ferramentas e tecnologias utilizadas .................................................................... 13 2.3.1. 2.3.2. 2.3.3. 2.3.4. Framework Kohana ........................................................................................ 14 PHPMailer ...................................................................................................... 15 Bibliotecas de cdigos Java............................................................................. 16 Relao das tecnologias com os mdulos ....................................................... 16

2.4. Implementao dos Mdulos ................................................................................ 17 2.4.1. 2.4.2. 2.4.3. 2.4.3.1. 2.4.3.2. 2.4.3.3. 2.4.3.4. 2.4.3.5. 2.4.3.5.1. 2.4.4. 2.4.4.1. 2.4.4.2. 2.4.4.3. 2.4.4.4. 2.4.4.5. 2.4.4.6. 2.4.4.7. 3 Modelo de dados ............................................................................................. 17 Dicionrio de dados ........................................................................................ 19 Mdulo MailCreateAndNotify ....................................................................... 20 Diagrama de Classes .................................................................................... 21 Criao de conta de e-mail .......................................................................... 22 Composio das mensagens......................................................................... 24 Mensagens geradas quando uma atualizao respondida. ...................... 27 Testes sobre o mdulo ................................................................................. 29 Verificao de mensagens enviadas ......................................................... 29

Mdulo MailReaderServer ............................................................................. 32 Execuo do mdulo .................................................................................... 34 Ler caixa de e-mail ...................................................................................... 35 Verificao de remetente e destinatrio...................................................... 38 Obtendo uma atualizao existente ............................................................ 39 Criando resposta para uma atualizao ..................................................... 40 Enviando e-mails ......................................................................................... 42 Testes sobre o mdulo ................................................................................. 44

CONSIDERAES FINAIS ...................................................................................... 45

REFERNCIAS ................................................................................................................. 46

1 INTRODUO

Segundo Marteleto (2001) rede social [..] um conjunto de participantes autnomos, unindo ideias e recursos em torno de valores e interesses compartilhados. As redes sociais podem ser utilizadas como forma de estimular o interesse dos acadmicos nos estudos, alm de possibilitar a integrao entre alunos e professores. Desta forma, com o intuito de aumentar a interatividade entre professores e acadmicos do Centro Universitrio Luterano de Palmas (CEULP/ULBRA) foi criado o Konnen. O Konnen um projeto que est sendo desenvolvido no CEULP/ULBRA para a criao de uma rede social acadmica para gesto de conhecimento, que visa integrao entre o corpo docente e os alunos. Os usurios da rede podero realizar atividades como adicionar amigos, participar de comunidades e trocar mensagens entre si. Alm disso, eles podero compartilhar imagens, vdeos, arquivos, links etc. O projeto est sendo desenvolvido em mdulos pela Fbrica de Software do CEULP/ULBRA, envolvendo no desenvolvimento alguns acadmicos do curso de Sistemas de Informao, e tendo como supervisores os professores: Jackson Gomes de Souza e Edeilson Milhomem da Silva. Essa implementao em mdulos pode ser comparado ao Desenvolvimento Baseado em Componentes que, segundo Uber (1998), [..] prope-se a ser uma maneira prtica e radicalmente diferente de construir aplicaes oferecendo tcnicas imensamente melhores de desenvolv-las [...]. Nas redes sociais existe uma grande frequncia de troca informaes, e quando algum usurio no est conectado rede durante um tempo, dependendo da quantidade de atualizaes, o usurio pode ter dificuldade em encontrar uma atualizao. Por isto, enviar emails notificando atualizaes poderia facilitar o acesso do usurio, pois o manteria informado sobre as atualizaes. Isso de grande utilidade para muitos usurios, pelo fato de muitas vezes no ter disponibilidade para acessar a rede social. Este trabalho consiste em criar mdulos que, inseridos no Konnen, sero responsveis por gerenciar o envio e recebimento de e-mails do sistema. O mdulo MailCreateAndNotify envia notificaes via e-mail da rede social para os usurios, e o usurio respondendo esta notificao est respondendo um contedo ou uma mensagem via cliente de e-mail. A

responsabilidade do mdulo MailReaderServer ler estas respostas feitas por e-mail e publica-las na rede.. Para a implementao do mdulo MailCreateAndNotify foi utilizada a linguagem de programao PHP, de forma que essa ter integrao direta com o Konnen. Na implementao deste mdulo foi utilizada a Framework Kohana e o PHPMailer. O Kohana o padro utilizado no Konnen e utiliza MVC na sua estrutura de desenvolvimento. PHPMailer a API utilizada para efetuar o envio de e-mails pela rede. O modelo de desenvolvimento MVC (Model-View-Controller) tem por padro dividir as funcionalidades de apresentao dos dados das funcionalidades envolvidas na manuteno e no acesso ao banco de dados. O Model-View-Controller (MVC) arquitetnico separa uma aplicao em trs componentes principais: o modelo, a viso e o controlador (ASP.NET MVC, on-line). J o mdulo MailReaderServer foi implementado utilizando a linguagem de programao JAVA. O objetivo desta ferramenta publicar na rede social e-mails enviados por usurios e ainda notificar os usurios dessas novas atualizaes. Na implementao do mdulo foram utilizados o modelo de persistncia de dados DAO (Data Access Object) e uma API cujo nome JavaMail. O modelo de persistncia de dados DAO utilizado para separar os cdigos que fazem acesso ao banco de dados das regras de negcio. A API JavaMail oferece recursos para o gerenciamento de e-mail. Nesse contexto, o trabalho foi organizado da seguinte forma: 2 Desenvolvimento, 2.1 Apresentao e definio do Projeto Konnen, 2.2 Apresentao dos mdulos de forma conceitual, 2.3 Ferramentas e tecnologias utilizadas no trabalho, 2.4 Implementao dos mdulos, e 3 Consideraes finais.

2 DESENVOLVIMENTO Esse trabalho consiste na implementao de dois mdulos da rede social Konnen, que so MailCreateAndNotify e MailReaderServer. O mdulo MailCreateAndNotify tem a finalidade de criar contas em um servidor de e-mails e enviar mensagens de notificaes via e-mail. O mdulo MailReaderServer faz a leitura de uma caixa de e-mails e notifica os usurios sobre novas atualizaes inseridas pelo programa. Esta seo apresenta uma descrio do projeto Konnen, a descrio de cada mdulo implementado, os requisitos coletados para os mdulos, uma descrio das ferramentas utilizadas para a realizao do trabalho, a descrio da implementao, com partes relevantes do cdigo, alm da descrio dos testes realizados.

2.1. KONNEN

O projeto Konnen uma rede social acadmica para gesto de conhecimento no CEULP, que tem como proposta fazer a interao entre os alunos e o corpo docente da instituio. Com a ideia de fazer a integrao entre os usurios, a rede social oferece a possibilidade de os mesmos postar diversos tipos de contedos (como texto, arquivo, imagem, link etc), que podem ser pblicos ou privados. Estes contedos podem ser postados tanto em grupos, criados pelos usurios, como em uma pgina de perfil. Alm disso, os usurios podem comentar em uma postagem e trocar mensagens entre si. O Konnen est sendo desenvolvido em mdulos, utilizando a linguagem de programao PHP, que devem interagir entre si, de forma que o conjunto deles formem a rede social. Na programao da rede, est sendo utilizado o Framework Kohana, que ser descrito posteriormente. O projeto est sendo desenvolvido por professores do curso de Sistemas de Informao e implementado na Fbrica de Software do CEULP. Alm disso, alguns trabalhos acadmicos tm como objetivo o desenvolvimento de mdulos do Konnen, como o caso deste trabalho. A seguir so apresentados os mdulos implementados e os requisitos do sistema para estes.

10

2.2. Apresentao dos Mdulos

Nesta

seo

sero

apresentados os requisitos e

detalhamento

dos mdulos

MailCreateAndNotify e MailReaderServer, que foram desenvolvidos nesse trabalho. O mdulo MailCreateAndNotify faz relao com alguns mdulos j existentes na rede social, a Figura 1 mostra com quais o mdulo faz integrao.

Figura 1 - Integrao MailCreateAndNotify com os outros mdulos

O mdulo MailCreateAndNotify mostrado na Figura 1 mostra que ele se integra com os mdulos j existentes Message, Profile, Social e Content. Os mdulos possuem mtodos que so utilizados pelo mdulo MailCreateAndNotify. A integrao feita mostrada nas sees adiantes. J o mdulo MailReaderServer compartilha somente o banco de dados do Konnen, isso porque uma aplicao que executada externamente da plataforma web, e tambm foi implementado em linguagem diferente da utilizada pelo Konnen. 2.2.1. Mdulo - MailCreateAndNotify Este mdulo foi implementado na linguagem PHP 5 e oferece mtodos que foram integrados a mdulos j existentes na rede social Konnen. Tem a finalidade d e criar contas no servidor de e-mail j existente, para envio de mensagens quando algum usurio da rede postar um contedo (imagem, links, mensagem, comentrio etc). Cada atualizao criada na rede vinculada a uma conta no servidor de e-mails. O

11

mdulo, ainda, envia mensagens atravs do servidor SMTP1 para os usurios interessados na atualizao. Neste contexto, entende-se por interessados aqueles usurios que so amigos do autor do contedo ou os membros do grupo, no caso de postagens de contedos em grupos, e todos que j comentaram naquela atualizao. Para esse mdulo, foram identificados os seguintes requisitos do sistema: R1 - Criar conta de e-mail - cria contas no servidor de e-mail para envio de mensagens de notificao. R2 - Enviar mensagens por e-mail - envia por e-mail notificaes para os participantes de uma atualizao.

Quando um usurio da rede posta um contedo, o sistema gera uma atualizao para notificar as pessoas interessadas. Neste momento, automaticamente, o sistema cria uma conta de e-mail no servidor de e-mail com a identificao da atualizao, conhecida como hash. O identificador criado leva como referncia a identificao da atualizao, por exemplo se um contedo possui identificao igual a cinto, logo o identificador do e-mail tem o identificador igual a cinco tambm, mas codificado. Aps a criao da identificao o sistema adiciona os dados da identificao do e-mail e da atualizao no banco de dados, a tabela em que os dados so adicionados mostrada na implementao dos mdulos. Este processo pode ser observado na Figura 2.

Figura 2 - Criao do e-mail para uma atualizao

Simple Mail TransferProtocol Protocolo de envio de e-mail

12

A Figura 2 mostra os passos que o mdulo executa quando um usurio posta um contedo. Ao postar um contedo o sistema cria uma conta no servidor de e-mail com o identificador da atualizao criptografada com a tecnologia MD5 2, logo no passo 3 adiciona os dados de identificao da atualizao, o tipo de atualizao, o e-mail criado e o autor da atualizao no banco de dados e faz o envio das notificaes via e-mail no passo 4. No momento que um usurio faz um comentrio em algum contedo ou responde a uma mensagem, um e-mail enviado a todos os interessados na atualizao. Este esquema pode ser visualizado na Figura 3.

Figura 3 - Comentando em um contedo/Respondendo uma mensagem

Quando o sistema envia um e-mail, o contedo levado aos participantes uma mensagem notificando qual atualizao foi comentada ou respondida. 2.2.2. Mdulo MailReaderServer O mdulo MailReaderServer foi desenvolvido na linguagem JAVA e usa o banco de dados do Konnen. Consiste em um sistema executado em forma de servio, que realiza a leitura de uma conta de um concentrador de e-mails, faz a verificao dos remetentes utilizando a identificao j existente no banco de dados, que foi criada pelo mdulo

MailCreateAndNotify, grava a nova atualizao no banco de dados e faz o envio de notificaes sobre estas novas atualizaes. Estas mensagens podem ser comentrios de uma atualizao ou a resposta para uma mensagem. Foram identificados os seguintes requisitos para esse mdulo:

Message-Digest algorithm 5 Algoritmo de hash 128 bits unidirecional.

13

R3 Verificar caixa de e-mail o sistema, de forma automtica, ir verificar as mensagens que esto na caixa de e-mail e ir baixar as mensagens novas. R4 Verificar endereo de e-mails verifica para qual e-mail da Konnen o usurio enviou o e-mail, ainda verifica no banco de dados se o usurio que enviou possui vinculo com a atualizao. R5 Gravar mensagens e comentrios grava no banco de dados a mensagem que o usurio enviou por e-mail. R6 Enviar mensagens por e-mail envia e-mail de notificao para os participantes de uma atualizao.

Figura 4 - Postando um comentrio/mensagem via e-mail

Conforme mostra a Figura 4, ao responder o e-mail, o usurio comentar em uma atualizao, ou seja, responder a uma mensagem sem precisar estar conectado rede. Ao receber o e-mail, o sistema verificar se o remetente do e-mail possui cadastro na rede e se est inscrito na atualizao, evitando mensagens enviadas por usurios desconhecidos.

2.3. Ferramentas e tecnologias utilizadas

Esta seo apresenta uma descrio das tecnologias envolvidas no trabalho, que so: Framework Kohana: ferramenta utilizada no desenvolvimento do mdulo

MailCreateAndNotify, que a plataforma do Konnen; PHPMailer: responsvel pelo transporte de mensagens de e-mails, utilizado em aplicaes implementadas na linguagem PHP, foi utilizada no mdulo

MailCreateAndNotify;

14

JavaMail: API que fornece mtodos de leitura e envio de e-mails para aplicaes Java, foi utilizada no mdulo MailReaderServer;

Jsoup: biblioteca Java utilizada pelo mdulo MailReaderServer para remoo de elementos HTML presentes em strings.

2.3.1. Framework Kohana

Kohana um framework de cdigo aberto para a linguagem PHP5, que utiliza orientao a objetos, de forma que esta caracterstica usada a favor do desenvolvedor no momento da interao com banco de dados (Kohana, 2012, on-line). O framework, que est na verso 3.2, oferece ao desenvolvedor ferramentas que auxiliam na implementao e disponibiliza mdulos prontos como autenticao, para que o desenvolvedor possa utilizar em outras partes de sua aplicao. Uma das principais caractersticas do Kohana a utilizao do padro MVC, no qual o objetivo dividir as funcionalidades do cdigo em camadas. Utiliza, tambm, a tecnologia ORM (Object-Relational Mapping), que permite que o desenvolvedor no se preocupe com consultas ou procedimentos que envolvam diretamente o uso da linguagem SQL, pois so gerados pela ferramenta. Segundo MVC (2012, on-line) o MVC possui entre suas vantagens a possibilidade de desenvolvimento em paralelo, por pessoas diferentes. As camadas possuem um vnculo fraco entre elas, podendo ser desenvolvidas de forma separada, sem precisar que uma tenha sido iniciada ou terminada. O MVC separa uma aplicao em partes distintas: Model, View e Controller. Estas camadas interagem entre si, conforme apresentado na Figura 5.

Figura 5 - Interao entre as camadas do MVC (MICROSOFT, 2012)

15

A camada Model a camada que implementa a lgica do modelo de dados, a qual guia o modelo de negcios. Um objeto presente nessa camada pode recuperar e guardar informaes no banco de dados. J o Controller a camada responsvel por realizar o processamento, ou seja, implementar a regra de negcio da aplicao. A camada View corresponde visualizao do usurio, na qual os dados so apresentados, de forma que, nesta camada encontram-se, por exemplo, pginas com contedo HTML, aps o processamento realizado pelo Controller nos objetos do Model. Os mdulos do Kohana possuem a estrutura de diretrios de acordo com o padro MVC. As camadas views, models e controllers so separadas por pastas. Alm destas existe um diretrio manager que armazena os cdigos de comunicao com o banco de dados. Neste projeto existe somente o diretrio manager, porque no h uma interao direta com o usurio, deixando de lado a necessidade das outras pastas. A Figura 6 mostra a estrutura de pastas de um mdulo do Kohana.

Figura 6 - Estrutura de pastas do dos mdulos

A pasta classes mostrada na Figura 6 o local que abriga as Models, Controllers e as classes Manager. O diretrio i18n responsvel por arquivos de linguagem caso exista, tests referente a classes para efetuar testes sobre o mdulo e a pasta views que abriga as pginas de exibio ao usurio. 2.3.2. PHPMailer

PHPMailer uma classe PHP que faz transportes e-mail com anexos de arquivos, servidores SMTP, CCS, CBCs, mensagens HTML, quebra de linha e muito mais (PHPMailer, 2012, on-line). A ferramenta foi introduzida no trabalho pela sua praticidade no momento da configurao do envio da mensagem de e-mail, no sendo necessria a ativao ou configurao dos mtodos de envio de mensagens de e-mail do PHP. Os mtodos existentes

16

na classe permitem que o desenvolvedor no precise se preocupar com os cabealhos e outros atributos que so necessrios para enviar um e-mail. 2.3.3. Bibliotecas de cdigos Java

A utilizao de bibliotecas de cdigos facilita a execuo de tarefas e a implementao de sistemas. Na implementao do mdulo MailReaderServer foram utilizadas duas bibliotecas Java: JavaMail e JSoup. A API JavaMail oferece uma estrutura independente de plataforma e independente de protocolo para construir aplicaes de correio eletrnico e mensagens, que encontra-se na verso 1.4 e possui cdigo aberto para aqueles que desejam fazer melhorias (Oracle, 2012, online). Essa API oferece mtodos tanto para o envio de mensagens de e-mail, quanto para a leitura delas. Com ela possvel usar tanto o protocolo POP33, quanto o protocolo IMAP4, para a leitura de e-mails. A API JavaMail foi utilizado no projeto para fazer o envio e a leitura das mensagens de e-mail que foram enviadas por usurios para o Konnen. Nas mensagens de e-mails recebidas existe muito cdigo HTML escondido, os quais podem dificultar a manipulao dos dados da mensagem, esses elementos escondidos geralmente so adicionados por clientes de e-mail. Jsoup uma biblioteca Java para trabalhar com HTML no mundo real. Ele fornece uma API muito conveniente para a extrao e manipulao de dados [...] (Jsoup, 2012 online), que possui mtodos que facilitam a manipulao de elementos HTML, CSS, entre outros. Jsoup uma ferramenta distribuda gratuitamente, que est em sua verso 1.6.3. No projeto foi utilizado um de seus mtodos, que remove todos os elementos HTML de uma string, isto foi necessrio para remover todo o contedo desnecessrio e possveis cdigos maliciosos das mensagens recebidas por e-mail. 2.3.4. Relao das tecnologias com os mdulos As tecnologias citadas nas sees anteriores foram utilizadas na implementao dos mdulos deste trabalho. A Figura 7 mostra a relao dessas ferramentas e os mdulos desenvolvidos.

Post Office Protocol(POP3) um protocolo utilizado para leitura de caixa de e-mails. IMAP (Internet Message Access Protocol) protocolo de gerenciamento de e-mails superior ao POP3.

17

Figura 7 - Relao entre as ferramentas/mdulos

A Figura 7 mostra que as ferramentas utilizadas so exclusivas de cada mdulo. As ferramentas utilizadas no mdulo MailCreateAndNotify so todas implementadas na linguagem PHP. No mdulo MailReaderServer as ferramentas so implementadas na linguagem Java,

2.4. Implementao dos Mdulos

Esta seo mostra como o funcionamento interno e a estrutura dos mdulos, assim como o modelo de dados e o dicionrio de dados que comum aos dois mdulos, partes relevantes do cdigo e testes executados para verificar o funcionamento dos mdulos desenvolvidos.

2.4.1. Modelo de dados

Para este trabalho foi criada uma tabela no banco de dados do Konnen para armazenar os dados das contas de e-mails, que se chama update_mails. Essa tabela se relaciona com outras trs tabelas j existentes no banco de dados do Konnen: users (armazena os dados que os usurios utilizam para se conectar no Konnen), contents (armazena contedos postados) e messages (armazena mensagens enviadas na rede). Alm da tabela, foi criada uma view que se chama view_users_name, que usada somente pelo mdulo MailReaderServer no momento do envio das mensagens de notificao, para retornar o e-mail e nome do usurio. O diagrama apresentado na Figura 8 mostra de forma grfica os relacionamentos entre a tabela criada e as tabelas existentes.

18

Figura 8 - Modelo relacional do banco de dados

A Figura 8 mostra que a tabela update_mails, na qual so guardadas as contas de e-mails criadas e vinculadas a alguma atualizao, possu vinculo com as tabelas contentes, messages e users. A tabela users armazena as informaes sobre os usurios que utilizam a rede, dela utilizada o id do usurio (para buscar amigos por exemplo) e o e-mail (para entrar na lista de envio de notificaes); a tabela contents armazena os contedo postados no Konnen (so utilizados os campos user_id para verificar o autor, text para informar o texto postado no contedo e group_id para verificar se uma postagem em grupo); e a tabela messages armazena as mensagens enviadas pelos usurios (actor_id representa o autor da mensagem, content o contedo da mensagem e reply_id representa se a mensagem postada uma resposta alguma existente). Na visualizao das tabelas mostrada na Figura 6 alguns atributos das tabelas contents, messages e users no so mostrados, pois no so necessrios para a aplicao. A tabela update_mails possu vinculo de chave estrangeira com a tabela users, pois necessrio que uma atualizao possua um autor e este autor deve est na tabela, mas

19

no possui uma chave estrangeira apontando para as tabelas contents e messages, pois, uma atualizao pode ser tanto um contedo quanto uma mensagem, a Figura 8 somente para mostrar que as tabelas possui vinculo. Assim, o atributo content_type que indica o tipo de dado de uma atualizao (contedo ou mensagem). Para o mdulo MailReaderServer foi criada uma view, chamada

view_users_name, que facilita a criao da mensagem a ser enviada, evitando que o sistema verifique tabelas adicionais, pois, os campos necessrios so apresentados na view. A Figura 9 mostra o relacionamento entre as tabelas envolvidas com a view.

Figura 9 - View de visualizao de e-mail e nome de exibio do usurio

A view criada utiliza a tabela users, que responsvel por armazenar os dados de email e identificadores que os usurios utilizam para conectar-se no sistema (login, senha), e a tabela profiles, que armazena as preferncias de perfil de cada usurio como foto de perfil, nome de exibio etc. A Figura 9 mostra que a view_users_name possui os seguintes atributos: user_id, que contm o identificador do usurio na rede; display_name, que contm o nome que o usurio escolheu para mostrar aos outros usurios como, por exemplo, seu nome real ao invs de somente o nome de usurio; e, por ltimo, o atributo email, que possui o email do usurio cadastrado na rede. Estes atributos so utilizados pelo mdulo. 2.4.2. Dicionrio de dados

O dicionrio de dados contm a definio dos campos das tabelas de um banco de dados. Essas informaes so importantes no desenvolvimento de qualquer aplicao que faa comunicao com o banco de dados, pois, a descrio detalhada dos campos das tabelas facilita a implementao e a manuteno do sistema.

20

A Tabela 1 define o tipo e descreve cada campo da tabela update_mails, que foi criada no desenvolvimento desse trabalho. Os detalhes presentes na descrio de cada campo foram teis na implementao de partes do cdigo como consultas a outras tabelas.

Tabela 1 - Dicionrio de dados da tabela update_mails

Campo id update_id

Tipo bigint int

Descrio Chave primria da tabela, autoincremento habilitado. Identificador da atualizao que o e-mail vinculado. Tipo de atualizao referente ao e-mail. Deve ser usados os tipos content para contedos, content_group para contedos em pginas de grupo ou message para mensagens.

update_type varchar(20)

mail user_id

varchar(100) Identificador da conta criada no servidor de e-mails. int Chave estrangeira. Referente ao usurio que autor de um contedo ou mensagem.

Com as informaes gerais sobre os mdulos apresentadas, o dicionrio de dados definido e os relacionamentos entre as tabelas especificados, os detalhes da implementao de cada mdulo podem ser apresentados. 2.4.3. Mdulo MailCreateAndNotify

O mdulo MailCreateAndNotify tem por objetivo criar contas de usurio no servidor e fazer envio de mensagens de e-mail para notificar usurios da rede sobre atualizaes ocorridas. A interao do Konnen com este mdulo ocorre quando um usurio da rede faz qualquer uma das aes como: Postar um contedo; Enviar uma mensagem aos outros usurios ou grupo; Comentar em um contedo; Responder uma mensagem.

21

Nas aes iniciais, como enviar uma mensagem e postar um contedo, criada uma conta no servidor de e-mail e a identificao referente a esta atualizao gravada no banco de dados. Em cada uma das aes do usurio, o sistema envia um e-mail de notificao aos interessados na atualizao. Para isso o mdulo funciona de forma autnoma, no tendo interao direta com o usurio. Esse mdulo faz uso de mtodos de outras classes j existentes no Konnen. Por exemplo, usa o mtodo find_all da classe Manager do mdulo Social para retornar a lista de amigos de um usurio. O diagrama de classes criado para este mdulo, que apresentado a seguir, mostra como as classes se relacionam, juntamente com os atributos e mtodos delas. 2.4.3.1. Diagrama de Classes

Neste mdulo foram criadas apenas duas classes, uma para implementar o modelo de dados e outra para realizar as operaes como gravar no banco, enviar e-mail etc. O diagrama de classes do mdulo MailCreateAndNotify mostrado na Figura 10.

Figura 10 - Diagrama de classes MailCreateAndNotify

22

Como utilizada a ferramenta ORM do Kohana, as classes no precisam ter os atributos prdefinidos, pois, a ferramenta j retorna as colunas que a tabela do banco de dados possui. A Figura 10 mostra que a classe manager, do mdulo MailCreateAndNotify, tem associao simples com a classe Model, que pertence ao mesmo mdulo, isso porque a classe manager retorna objetos do tipo Model. A classe Model faz a representao do banco de dados, definindo em qual tabela do banco ser feita a persistncia dos dados e possveis relaes com outras tabelas. As sees seguintes apresentam trechos de cdigos e detalhes da implementao. O cdigo completo da aplicao fornecido no Anexo I. 2.4.3.2. Criao de conta de e-mail

Para novas mensagens criadas e novos contedos postados utilizado um mtodo chamado send_first_mail(), presente na classe manager do mdulo MailCreateAndNotify. Este mtodo cria uma conta no servidor de e-mail para cada atualizao nova, no sendo utilizadas o tempo todo, e ainda envia uma mensagem de e-mail para os usurios interessados ou destinatrios de uma mensagem. O mtodo send_first_mail() chamado em mtodos de outras classes, sendo: save() da classe manager do mdulo content, que responsvel por guardar no banco de dados novos contedos criados pelos usurios e retornar a informao gravada. save() da classe manager do mdulo message, que responsvel por guarda informaes de destinatrios e contedo das mensagens novas no banco e retornar o objeto que foi gravado. Estes mtodos chamam o mtodo send_first_mail() antes de retornarem o objeto para a aplicao. A Listagem 1 mostra o cdigo que faz a chamada.

Listagem 1 - Final do mtodo save() da classe Manager_Content

23

A Listagem 1 mostra o momento em que feita a chamada do mtodo send_first_mail()pelo mtodo save() da classe manager do mdulo content. O mtodo send_first_mail() recebe como parmetro a atualizao (contedo ou mensagem) e o tipo da atualizao. A linha 371 da Listagem 1 mostra como feita a passagem dos parmetros, sendo que o primeiro parmetro um objeto do tipo contedo e o segundo parmetro o tipo da atualizao que est sendo inserida. A execuo dessa linha acontece toda vez que uma mensagem nova criada ou um contedo novo postado. Quando o mtodo executado, uma conta criada no servidor de e-mails. A Listagem 2 mostra como a criao da conta de email feita.

Listagem 2 - Parte do cdigo em que feita a criao do e-mail

A Listagem 2 apresenta o trecho de cdigo que implementa a criao do e-mail. Na linha 34 criada uma hash MD5,com a identificao da atualizao, que vai ser utilizada para fazer a criao da conta de e-mail e para ser adicionada ao banco de dados. No servidor de e-mails possui tambm um ambiente web, que abriga pginas PHP, e uma dessas pginas que cria as contas de e-mail e recebe os parmetros via mtodo GET5, so eles: o email, referente ao nome da conta de e-mail a ser criada; e o public_key, que uma chave secreta para evitar a criao de contas sem autorizao. A pgina executa um comando no shell do sistema operacional utilizando a funo exec(), nativa no PHP para criar a conta e as regras para redirecionar os e-mails para uma conta que concentrador de mensagens de e-mails no servidor de e-mails. Esta pgina foi utilizada para a criao de contas, visando uma praticidade em criar as contas de e-mail, sendo que esta pode ser modificada sem muito custo. Para criar a nova conta no servidor foi utilizada a funo fopen()do PHP, que tem como objetivo ler ou executar um objeto, no caso a pgina de criao de contas do servidor. A linha 58 da Listagem 2 mostra como a pgina de criao de contas requisitada.

GET um mtodo que utiliza os parmetros passados via URL para o servidor.

24

Aps executar a linha 58, o sistema salva na tabela update_mails as informaes da conta de e-mail, que so: identificao da atualizao, identificao do autor e o tipo de atualizao. O prximo passo criar as mensagens a serem enviadas para os destinatrios.

2.4.3.3. Composio das mensagens

As mensagens geradas quando uma nova atualizao criada so diferentes das mensagens geradas quando um usurio responde uma atualizao existente.

Mensagens geradas na criao de uma atualizao.

Quando uma nova atualizao postada, so selecionados os usurios que recebero a mensagem de e-mail. No que diz respeito seleo de destinatrios para as mensagens,o mdulo MailCreateAndNotify utiliza os seguintes mtodos: find_all() da classe manager do mdulo Social para selecionar os amigos de um usurio; find() da classe manager do mdulo Profile para retornar o perfil de um usurio; find_all_users() da classe manager do mdulo Group para retornar os membros de um grupo; find() da classe manager do mdulo Account para retornar os e-mails de usurios da rede; find_all_recipients() da classe manager do mdulo Message que retorna os destinatrios de uma mensagem. As mensagens a serem enviadas para os usurios so montadas utilizando o mtodo mail_message_make()da classe Manager do mdulo MailCreateAndNotify. O mtodo gera mensagens diferentes para cada situao, essas condies so mostradas na Tabela 2 e Tabela 3. Sua assinatura pode ser observada na Listagem 3.

Listagem 3 - Assinatura do mtodo mail_message_make()

25

Os parmetros fornecidos ao mtodo mail_message_make()so utilizados para compor as mensagens geradas, eles podem ser observados na listagem 3. Os parmetros fornecidos possuem caractersticas distintas sendo eles: $update o parmetro que representa o objeto que est sofrendo uma atualizao ou que est sendo criado no sistema; $actor_id representa o dono da atualizao do que est sendo criada ou sofrendo uma atualizao; $user_id representa o usurio que vai receber a mensagem a ser criada; $type se refere ao tipo de atualizao que est sendo recebida no parmetro $update $update_new representa um comentrio ou a resposta de uma mensagem, podendo ser definido como nulo indicando que uma atualizao nova est sendo postada na rede.

Existem tipos diferentes de mensagens de notificao que so enviadas aos usurios. A Tabela 2 mostra as mensagens geradas pelo mtodo mail_message_make() quando um novo contedo postado ou quando uma nova mensagem dependendo das condies do destinatrio do e-mail.

Tabela 2 - Mensagens geradas para novas atualizaes

Condies Se o destinatrio do e-mail for o autor de um novo Voc contedo.

Mensagem postou um novo

contedo.

Se o destinatrio do e-mail for amigo do autor de Usurio postou um novo um novo contedo. contedo. postou um novo

Se o destinatrio do e-mail for autor de novo Voc contedo de um grupo.

contedo via Grupo.

Se o destinatrio do e-mail for amigo do autor de Usurio postou um novo um novo contedo de um grupo. contedo via Grupo.

26

Se o destinatrio do e-mail for o autor de uma Voc mensagem.

enviou

uma

nova

mensagem. enviou uma

Se o destinatrio do e-mail for destinatrio de uma Usurio mensagem.

mensagem para voc. enviou uma nova

Se o destinatrio do e-mail for o autor de uma Voc mensagem para um grupo.

mensagem via Grupo. recebeu uma

Se o destinatrio do e-mail for membro de um grupo Voc

onde esse grupo um dos destinatrios da mensagem de Usurio via mensagem. Grupo.

Aps a gerao das mensagens, feita pelo mtodo mail_message_make(), o prximo passo o envio destas para os interessados na atualizao, que responsabilidade do mtodo send_mail(), apresentado na Listagem 4.

Listagem 4 - Mtodo de enviar e-mail

A Listagem 4 mostra o cdigo completo do mtodo que envia os e-mails para os usurios. Na linha 120 fica a assinatura do mtodo, que recebe no parmetro $message a mensagem gerada pelo mtodo mail_message_make(), no parmetro $mail_to o

27

e-mail do usurio que vai receber a mensagem e no parmetro $mail_from o endereo de e-mail referente atualizao. O mtodo send_mail() realiza as seguintes aes: linha 121: inclui a classe PHPMailer; linha 122: foi criada uma instancia de PHPMailer, no caso a varivel $mail; linha 125: define que a forma de envio por SMTP, utilizado o mtodo IsSMTP() do PHPMailer; linhas 127 e 128: define o usurio e senha para conexo com servidor. linhas 129 a 131: definio dos dados de envio, que o e-mail do remetente da mensagem, e o destinatrio. linhas 132 a 134: define os dados da mensagem que vai ser enviada, define que o tipo da mensagem possui elementos HTML, o assunto da mensagem e o corpo do e-mail. linha 135: envia a mensagem de e-mail e verifica se ela foi enviado, caso haja algum problema ela retorna a linha 136. Ao enviar o e-mail com sucesso o mtodo cumpre seu papel.

2.4.3.4. Mensagens geradas quando uma atualizao respondida.

Quando um usurio comenta em uma atualizao ou responde uma mensagem so enviadas notificaes, de forma que esse usurio um dos destinatrios da notificao. As mensagens so geradas pelo mtodo mail_message_make(), mostrado na Listagem 3. As mensagens que so geradas quando um usurio responde uma atualizao existe esto representadas na Tabela 3.

Tabela 3 - Lista de mensagens a serem enviadas quando usurio responde uma atualizao
Quando Mensagem

Destinatrio do e-mail de e-mail fez um comentrio no prprio Voc fez um comentrio no seu contedo. Destinatrio do e-mail o dono de um contedo. prprio contedo. Usurio fez um comentrio no seu contedo. Destinatrio do e-mail autor de um comentrio no contedo Voc fez um comentrio no contedo

28

de outro. Destinatrio do e-mail recebe notificao que o dono do contedo fez um comentrio na prpria atualizao. Destinatrio do e-mail recebe notificao que um usurio fez um comentrio na atualizao de outro.

de Usurio. Usurio fez um comentrio no

prprio contedo. Usurio (A) fez um comentrio no contedo de Usurio (B). respondeu sua prpria

Destinatrio do e-mail de e-mail respondeu sua prpria Voc mensagem. Destinatrio do e-mail o dono de uma mensagem. Destinatrio do e-mail autor de uma resposta mensagem de outro. Destinatrio do e-mail recebe notificao que o dono da mensagem respondeu ela. Destinatrio do e-mail recebe notificao que um usurio respondeu mensagem de outro.

mensagem. Usurio respondeu sua mensagem. Voc respondeu a mensagem de Usurio. Usurio mensagem. Usurio (A) respondeu a mensagem de Usurio (B). respondeu prpria

O processo para enviar as mensagens de notificao sobre atividades em uma atualizao feito pelo mtodo send_mail_back() da classe Manager do mdulo MailCreateAndNotify. Outros mtodos de outros mdulos fazem a chamada do mtodo send_mail_back sendo eles: save() da classe Manager do mdulo comment, responsvel por salvar no banco de dados os comentrios escritos em um contedo. reply() da classe Manager do mdulo message, responsvel por guardar as respostas enviadas uma mensagem.

Um exemplo de requisio do mtodo send_mail_back() pode ser observado na Listagem 5.

Listagem 5 - Inserindo chamados do mdulo nos j existentes

29

A linha 430 da Listagem 5 mostra como feita a chamada do mdulo MailCreateAndNotify pelo mtodo reply() da classe Manager do mdulo Message. O mtodo send_mail_back() recebe no parmetro $message a identificao do objeto (contedo ou mensagem) e no parmetro $reply a nova atualizao (comentrio ou resposta de uma mensagem). Este trecho de cdigo deve ser adicionado antes do retorno do mtodo save(), da classe manager do mdulo comment, e antes do retorno do mtodo reply(), da classe manager do mdulo message.

2.4.3.5. Testes sobre o mdulo

Esta seo apresenta a descrio sobre testes feitos no mdulo. O objetivo destes testes verificar se as mensagens esto sendo enviadas adequadamente.

2.4.3.5.1.

Verificao de mensagens enviadas

Quando um usurio posta um novo contedo ou envia uma nova mensagem, so enviadas mensagens de notificao aos interessados na atualizao. A Figura 11 mostra a tela de postar contedo da rede social.

Figura 11 - Campo de postagem de contedos no Konnen

30

O primeiro teste foi feito postando um contedo do tipo texto com um usurio da rede, como mostrado na Figura 11. A mensagem de e-mail recebida pelos amigos do usurio contm a informao que Joo postou um novo contedo e o texto do contedo postado, no caso Meu primeiro Post. A mensagem de e-mail recebida pelos usurios interessados na atualizao pode ser visualizada na Figura 12.

Figura 12 - Mensagem recebida sobre uma nova atualizao

A Figura 12 mostra que a mensagem recebida por um dos amigos de Joo a esperada, na qual consta a notificao que Joo postou um novo contedo seguida do contedo postado por Joo, Meu primeiro post. As atualizaes existentes podem ser comentadas no caso de contedo ou respondidas em caso de mensagens. A Figura 13 mostra a tela de um usurio comentando em algum contedo postado no Konnen.

31

Figura 13 - Comentando em um contedo

Foi criado o comentrio Estou respondendo este post! pelo usurio Tarik em um contedo do usurio Joo, como mostrado na Figura 13. De acordo com os parmetros definidos na implementao do mdulo, nesse caso, deve ser enviada uma mensagem aos usurios interessados na atualizao, que o dono e os usurios que j fizeram comentrio nesse contedo. A mensagem deve conter a notificao Tarik comentou no contedo de Joo e o contedo do comentrio. O resultado a mensagem representada na Figura 13.

Figura 14 - E-mail de notificao de uma resposta a um contedo

A mensagem de e-mail foi recebida por um usurio que j tinha feito um comentrio que interessado na atualizao mostrada na Figura 14. De acordo com as definies do

32

mdulo, a mensagem est com estrutura correta, que a notificao, Tarik comentou no contedo de Joo,seguida do contedo Estou respondendo este post! feito por Tarik. O mdulo comportou-se adequadamente durante os testes, considerando que as mensagens foram enviadas para os usurios interessados e recebidas corretamente, de acordo com as condies estabelecidas nas tabelas de mensagens descritas.

2.4.4. Mdulo MailReaderServer

Esta seo tem objetivo de apresentar como o mdulo MailReaderServer, foi implementado. So apresentadas telas de mensagens do sistema, e partes relevantes da codificao.

Diagrama de Classes

Na implementao desse mdulo foram criados 3 pacotes diferente, sendo eles: DAO: o pacote que contm as classes que realizam consultas no banco de dados; Main: possui a classe principal do sistema, onde feita a chamada dos mtodos das outras classes. Model: contm as classes que representam os modelos de dados.

A representao dos pacotes apresentada na Figura 15.

Figura 15 - Estrutura do projeto MailReaderServer

33

A Figura 15 mostra como funciona a estrutura do projeto, mostrando a separao das classes em pacotes. As classes so separadas por pacotes, mas se relacionam. A Figura 16 mostra a relao entre elas.

Figura 16 - Diagrama de classes do mdulo MailReaderServer

O diagrama de classes apresentado na Figura 16 mostra os relacionamentos e dependncias entre as classes criadas no mdulo MailReaderServer. A classe MailVerify, que a principal possui relao com quase todas as outras classes existentes no projeto, isto porque ela usa mtodos destas em sua execuo. As classes UserDAO (gerencia dados do banco referente usurios da rede), UpdateDAO (gerencia dados de atualizaes do banco de dados), GroupDAO (gerencia as

34

informaes sobre os grupos presentes no banco de dados) possuem vinculo com a classe DAO (responsvel por conexes com o banco de dados). A classe Inbox responsvel pelas operaes que envolvem leitura e envio de emails, e possui vnculo com a classe Mensagem, que o modelo para guardar uma mensagem de e-mail. A classe Util no possui atributos, somente mtodos para filtragem de mensagens contidas em variveis do tipo String. E possu vinculo somente com a classe principal MailVerify. As sees seguintes apresentam trechos de cdigos e detalhes da implementao, o cdigo completo da aplicao fornecido no Anexo II.

2.4.4.1. Execuo do mdulo

Quando o mdulo executado feita a requisio da classe MailVerify, que classe principal do projeto. Nela definido o tempo em que ser verificada a caixa de entrada de emails. A Listagem 6 mostra como as primeiras linhas de cdigo da classe principal.

Listagem 6 - Inicializao da classe principal MailVerify

A varivel execute_time_loop que define o tempo em segundos da leitura da caixa de e-mail encontra-se na linha 21 da Listagem 6. Ao iniciar o mdulo executado o mtodo main da classe MailVerify, ele responsvel por fazer as requisies para outros mdulos, a classe principal. Na linha 23 o sistema comea a execuo do mtodo main(). A linha 25 da Listagem 6 mostra que existe um lao de repetio sem critrios de parada. Esse loop executado de modo infinito enquanto a aplicao estiver sendo executada. A Listagem 6 mostra que na linha 26 instanciada a varivel hoje do tipo Date, ela recebe com valor a data e a hora atua. Essa varivel usada para mostrar o horrio e a data de

35

cada verificao feita pelo mdulo, a impresso desses dados pode ser observado na Figura 17.

Figura 17 - Impresso de data e hora de verificao

Na impresso mostrada na Figura 14 exibida uma mensagem informando que o sistema est fazendo a verificao, acompanhado da data, no formato dia/ms/ano, alm da hora local. Aps mostrar essa mensagem o sistema inicia os processos mostrados nas prximas sees.

2.4.4.2. Ler caixa de e-mail

Nesta seo ser abordado como o mdulo recebe as mensagens de uma caixa de e-mail. Ao criar uma conta no servidor de e-mail o mdulo MailCreateAndNotify tambm cria um redirecionamento de mensagens dessa conta para uma outra que concentra todos os emails. Quando usurios enviam mensagens para esses e-mails criados, so automaticamente direcionados para o concentrador de e-mail, desse modo o mdulo MailReaderServer necessita ler somente a caixa de entrada do concentrador de e-mail para obter todas as mensagens enviadas por usurios. A classe Inbox do pacote Model, responsvel por fazer a leitura e envio de e-mails no sistema, os atributos contidos nela podem ser observados na Listagem 7.

Listagem 7 - Atributos da classe Inbox

Na Listagem 7 so mostrado os atributos da classe Inbox. Cada atributo possui caractersticas prprias, so eles:

36

linha 22: declarao do atributo propriedades responsvel por armazenar as propriedades do sistema;

linha 23: declarao do atributo sesso que responsvel por manter o usurio conectado ao servidor de e-mail por meio de sesso, tipo de varivel pertence biblioteca JavaMail;

linha 24:define na varivel acc_type_store protocolo vai ser usado para receber as mensagens de e-mail (IMAP OU POP3), varivel do tipo Store da biblioteca JavaMail;

linha 25: varivel pasta que recebe a caixa de entrada da conta de e-mail, varivel do tipo Folder da biblioteca JavaMail;

linhas 26 a 28: representam os dados para conexo no servidor de e-mail, sendo mailServer a varivel que recebe o endereo do servidor, varivel user a conta de usurio do servidor e senha.

O mtodo ler_inbox(), responsvel por receber as mensagens de e-mails e transforma-las no tipo Mensagem, utiliza mtodos presentes na classe para conectar caixa de e-mails. Esses mtodos so mostrados na Listagem 8.

Listagem 8 - Mtodo conectar e abrir_inbox

A Listagem 8 mostra linha 75 do mtodo como feita a conexo com o servidor de email. utilizado o mtodo connect() da varivel acc_type_store que do tipo store. Das linhas 78 a 84 mostrado o mtodo abrir_inbox(), que responsvel por abrir em a caixa de entrada da conta de e-mail. As permisses sobre a caixa de entrada so

37

definidas na linha 83, em que passado o parmetro Folder.READ_WRITE, que representa permisses de leitura e escrita. A implementao do mtodo ler_inbox() mostrada na Listagem 9.

Listagem 9 - Buscando mensagens no lidas e definindo como abertas

Para o funcionamento correto do mdulo MailReaderServer so obtidas do servidor de e-mails somente as mensagens no lidas. Flags representa o conjunto de bandeiras em uma mensagem (ORACLE, 2012, on-line), essas bandeiras so sinalizadores que informa por exemplo o status de uma mensagem (lida, no lida, deletada etc). A Listagem 9 mostra como funciona a execuo do mtodo ler_inbox() e destaca como essas bandeiras so utilizadas na aplicao. Ao iniciar o mtodo ler_inbox() mostrado na Listagem 9, ele executa as seguintes aes: linha 98 e 99: representa a conexo com o servidor e a abertura da caixa de entrada de e-mails; linha 99: instanciao de um Flag do tipo SEEN (lido);

38

linha 100: criao do termo que usado na busca por mensagens no lidas, a varivel unseen_flag_term recebendo na instncia com parmentroflag e um parmetro boleano false, definindo que atributos SEEN sero ignorados na busca.

linha 101: vetor do tipo Message que recebe como instncia mensagens no lidas presentes na caixa de entrada de e-mails.

Linha 103: lao de repetio fica em loop enquanto tiver mensagens no vetor mensagens.

linhas 105 e 106: Um objeto do tipo Message transformado em tipo Mensagem e adicionado na lista.

linha 109 e 110: modifica a marcao para o tipo SEEN na mensagem que est sendo percorrida e salva a modificao na caixa de e-mail, caso ocorra erro na operao a linha 112 retorna uma mensagem de erro.

linha 115 e 116: fecha a caixa de entrada e conexo com o servidor de e-mails. linha 117: retorna para a aplicao um ArrayList de objetos do tipo Mensagem.

As linhas executadas so necessrias para o funcionamento do mdulo. 2.4.4.3. Verificao de remetente e destinatrio

Cada conta de e-mail criada no servidor possui vnculo direto com a atualizao, mas no com os usurios interessados nela. O sistema, ao receber uma mensagem de e-mail, precisa verificar se o remetente da mensagem um usurio da rede e interessado na atualizao. A Listagem 10 mostra como feita essa verificao.

Listagem 10 - Verificao de remetente e destinatrio

A linha 36 da Listagem 10 mostra o condicional que verifica se o remetente do e-mail um usurio da rede representado pelo mtodo isUser() da classe UserDAO, e verifica tambm se ele possu vinculo com atualizao com o mtodo updateUserVerify() da classe UpdateDAO.

39

2.4.4.4. Obtendo uma atualizao existente

Quando um remetente possui vnculo com uma atualizao, feito ento o processo de obter do banco de dados a atualizao. A requisio dessa atualizao feito no mtodo main() da classe MailVerify, a Listagem 11 mostra quando feito o pedido.

Listagem 11 - Requisio de objeto de atualizao

Na linha 39 da Listagem 11 mostra que a varivel updO recebe um objeto do mtodo get_update() da classe UpdateDAO. A classe possu dois mtodos get_update(), um recebe como parmetro uma string referente ao e-mail do Konnen que a mensagem foi enviada, que o apresentado na Listagem 11, outro que recebe um numero inteiro referente identificao da atualizao e outro parmetro do tipo string referente ao tipo da atualizao que deve ser obtida. A Listagem 12 mostra o cdigo do get_update() que recebe uma string como parmetro, e como utilizada dentro do cdigo o get_update() com outra assinatura.

Listagem 12 - O mtodo get_update(String)

O mtodo get_update() mostrado na Listagem 12 recebe como parmetro um string contendo o endereo de e-mail referente uma atualizao, e executa os seguintes comandos na sua execuo:

40

linha 134: executa o mtodo conVerify() da classe DAO, para verificar e conectar ao banco de dados; linha 135: cria uma string com a query SQL6 que vai ser executada; linha 136: recebe a conexo ativa com o banco de dados, com o mtodo getConexao() da classe DAO;

linha 137 e 138: prepara a query com o banco e define os parmetros que ela vai receber antes de ser executada;

linha 139: executa a query e guarda os resultados na varivel rs do tipo ResultSet; linha 141: instncia a varivel up do tipo Update(); linha 143 a 146: quando houver resultado ele entra no lao de repetio e define a varivel up com o objeto de retorno do mtodo get_update(int, string). O parmetro do tipo int e o parmetro do tipo string passados no mtodo so referentes aos resultados retornados da tabela update_mail.

linha 148 e 149: fecha as conexo com o banco. linha 150: retorna o objeto criado na operao.

Quando todos os passos so executados da Listagem 12, o mtodo retorna uma atualizao presente na rede. 2.4.4.5. Criando resposta para uma atualizao

As mensagens enviadas aos usurios podem ser respondidas diretamente da caixa de e-mail do usurio. Quando a mensagem respondida e retorna ao servidor de e-mail do Konnen, ela vem com a parte que foi enviada na primeira mensagem e outros elementos HTML. As mensagens enviadas pelo Konnen possuem elementos HTML para identificar o inicio e o fim da mensagem. Antes de ser feita a gravao da resposta em uma atualizao, o sistema utiliza o mtodo remover_messagem_konnen() presente na classe Util, sua estrutura mostrada na Listagem 13.

Structured Query Language - Linguagem de consulta estruturada

41

Listagem 13 - Mtodo remover_mensagem_konnen

Listagem

13

mostra

funcionamento

do

mtodo

remover_messagem_konnen(). Nas linhas 14 a 16 da Listagem 13 mostra como buscado os elementos HTML que representam o inicio e o fim da mensagem. A linhas seguintes representam: linha 17: entrada do condicionado que define se o elemento inicio foi encontrado na mensagem; linha 18: instanciao da varivel frase do tipo StringBuffer; linha 19: utilizao do mtodo delete da classe StringBuffer, que permite apagar partes de uma string de acordo com o ndice; linha 20: feita a remoo dos espaos vazios na string, utilizando o mtodo remover_spaces() da classe Util.

Quando a mensagem recebida filtrada o prximo passo criar uma nova atualizao. A Listagem 14 mostra como criada a nova atualizao e como seus atributos so definidos.

Listagem 14 - Criao da nova atualizao

A Listagem 14 mostra que foi criada uma nova instncia do tipo Update na linha 46, e das linhas 47 a 55 so definidos seus parmetros como autor, tipo e contedo. O passo

42

seguinte gravar os dados no banco, situao em que executado o mtodo atualizar() da classe UpdateDAO. Este mtodo recebe como parmetro a atualizao j existente na rede e tambm a atualizao que deve ser gravada. A Listagem 15 mostra como a query SQL para inserir os dados no banco.

Listagem 15 - Exemplo de query de gravao no banco e opo de retornar id

A linha 192 da Listagem 15 representa uma instruo SQL para gravar um novo comentrio no banco de dados. As linhas 195 e 196 mostram como feita a preparao dessa query, onde o parmetro Statement.RETURN_GENERATED_KEYS define que o retorno a id auto incremento criada pela query. Ao executar o mtodo atualizar() da classe UpdateDAO o sistema grava no banco de dados o comentrio ou a resposta de uma mensagem no banco de dados e retorna a chave desse objeto.

2.4.4.6. Enviando e-mails

O envio de e-mails iniciado quando a mensagem recebida por e-mail gravada no banco. As mensagens que so enviadas por e-mail so as presentes na Tabela 3, de acordo com as condies mostradas, responsvel pela criao dessas mensagens o mtodo

montar_mensagem() da classe Util, e recebe respectivamente: Objeto do tipo User, para representar o usurio que autor da atualizao Objeto do tipo User para representar o usurio que est fazendo um cometrio ou est respondendo uma mensagem. Objeto do tipo User para representar o usurio que receber a mensagem. Objeto do tipo Int que representa a identificao da atualizao Objeto do tipo Update que representa o comentrio ou a resposta de uma mensagem.

43

Depois que as mensagens so geradas pelo mtodo montar_mensagem(), elas so enviadas aos usurios utilizando o mtodo enviar() da classe Inbox. O cdigo do mtodo enviar apresentado na Listagem 16.

Listagem 16 - Mtodo enviar da classe Inbox Os passos executados pelo mtodo enviar() representado na Listagem 16 so: linha 32: instanciar varivel para armazenar as propriedades. linha 33 e 34: define as propriedades, como o protocolo de envio e o endereo do servidor de e-mail. linha 35 a 36: cria a seo com o servidor de e-mails e conecta com o transportador de e-mail. linha 37 a 42: cria uma instncia MineMessage que representa a mensagem que vai ser enviada, e define os atributos assunto, remetente, contedo e tipo do contedo, e destinatrio do e-mail. linha 43 a 45: a varivel transport conecta com o servidor SMTP e envia a mensagem ao destinatrio.

Por fim o mdulo envia as mensagens de e-mail para os interessados na atualizao, finalizando seu ciclo de execuo.

44

2.4.4.7. Testes sobre o mdulo

Esta seo apresenta a descrio sobre o teste feito no mdulo. O objetivo destes testes verificar se as mensagens esto sendo enviadas adequadamente. Para testar a mensagem final enviada aos usurios foi criada uma mensagem de e-mail e enviada a um dos e-mails do Konnen, referente a uma atualizao. Quando o sistema executou os seus processos e envio o e-mail, foi obtido o resultado mostrado na Figura 18.

Figura 18 - Mensagem enviada ao usurio

A Figura 18 mostra mensagem recebida pelo autor de um comentrio, de acordo com as definies feitas para mensagens no mdulo MailReaderServer, a mensagem est sendo apresentada de forma correta. Isto finaliza o teste feito para o mdulo.

45

3 CONSIDERAES FINAIS

Este trabalho teve como objetivo o desenvolvimento dos mdulos para a rede social Konnen. Os mdulos desenvolvidos foram: MailCreateAndNotify e MailReaderServer. Em conjunto os mdulos fazem o envio e recebimento de e-mails referentes atualizaes da rede social. O mdulo MailCreateAndNotify foi desenvolvido para criar contas em um servidor de e-mail e notificar via e-mail usurios sobre atualizaes na rede. MailReaderServer o mdulo que faz o recebimento de mensagens enviadas para a rede e faz o envio de e-mails de notificao sobre novas atualizaes. Para o desenvolvimento do mdulo MailCreateAndNotify foi utilizada a linguagem PHP e as ferramentas Framework Kohana e PHPMailer, que se mostraram satisfatria para a realizao do trabalho. Na implementao do mdulo MailReaderServer foi utilizada a linguagem de programao Java, e as APIs: JavaMail e jsoup. A Framework Kohana e a API PHPMailer executaram suas funes de forma positiva. Entre estas ferramentas utilizadas, a JavaMail mostrou problemas no momento de obter mensagens de texto recebidas nas mensagens de e-mail, por este motivo foi necessrio a implementao de um mtodo para o devido fim. Ao final do desenvolvimento os mdulos apresentam as funcionalidades que foram propostas e com os testes mostraram que funcionam de forma satisfatria. Essas funcionalidades tendem a auxiliar o Konnen na interao com os usurios, aumentando tambm a participao deles na rede. Como as ferramentas foram desenvolvimentos

utilizando os cdigos j existentes do Konnen, a interao delas pode ser adicionada sem complicaes. O mdulo MailReaderServer deve ser adequado para o ambiente de produo utilizado pelo Konnen. O ambiente dito o servidor de e-mail e os mtodos de criao de conta neste servidor. Como trabalho futuro existe a ideia de fazer a criao das contas no servidor de e-mail utilizando tecnologia WebService, isso pode melhora a segurana, evitando que possveis invasores possam criar contas no servidor sem autorizao.

46

REFERNCIAS

KOHANA. User guide. 2012. Disponvel em: < http://kohanaframework.org/3.2/guide/ > Acesso em: 11 jun 2012.

MARTELETO, Regina Maria. Anlise de redes sociais aplicao nos estudos de transferncia da informao. 2001.

UBER, Flvio Rogrio. A Utilizao do Mtodo Catalysis no Desenvolvimento de Software Baseado em Componentes. 1998.

ASP.NET MVC. Disponvel em: < http://www.asp.net/mvc/tutorials/olderversions/overview/asp-net-mvc-overview > Acesso em: 13 de jun 2012.

Microsoft Developer Network (MSDN). Disponvel em: < http://msdn.microsoft.com/enus/library/dd381412(VS.98).aspx > Acesso em: 13 de jun 2012.

ORACLE. Disponvel em: <http://www.oracle.com/technetwork/java/javamail/index.html> Acesso em 13 de jun 2012.

Jsoup. Disponvel em: <http://jsoup.org/> Acesso em 11 de jun 2012.