• Nenhum resultado encontrado

ENVIANDO E-MAILS COM A LIBRARY EMAIL

8.1 ENVIANDO UM E-MAIL SIMPLES

//Define o conteúdo da mensagem

$this->email->message('Testing the email class.');

//Faz o envio do e-mail. Retorna TRUE ou FALSE $this->email->send();

Esse código faz o envio de um e-mail usando a configuração padrão da library Email. Não é necessário utilizar todos os métodos apresentados, pois com from() , to() , subject() , message e

send() , você já executa o envio do e-mail.

Se você quiser verificar se o e-mail foi enviado ou não, pode aplicar um if , como no código a seguir:

if($this->email->send()){ return TRUE;

}else{

return FALSE; }

Em caso de erro no envio, você pode recuperar informações usando o método print_debugger() , que retorna um log com

informações sobre o envio. O método por padrão retorna todas as informações, mas você pode passar um array como parâmetro

contendo o tipo de informação a ser retornada. Os valores possíveis para compor o array são: headers , subject , body .

$this->email->print_debugger(array('headers'));

Se no método send() você passar FALSE como parâmetro,

independente do envio ocorrer ou não, o método

print_debugger() não vai retornar nada.

Em sistemas que disparam vários e-mails, cada um com uma finalidade diferente, é mais eficiente você trabalhar com uma view

8.2 ENVIANDO E-MAIL USANDO UMA VIEW

COMO TEMPLATE DA MENSAGEM

para cada template diferente de e-mail. Para enviar e-mail usando as views como conteúdo da mensagem, você só precisa alterar uma linha em relação ao código que foi mostrado anteriormente.

Antes:

$this->email->message('Testing the email class.');

Depois:

$mensage = $this->load->view('nome_view',$dados,TRUE

);

$this->email->message($mensagem);

Dessa forma, usamos o método $this->load->view() para

recuperar a view como se estivéssemos carregando o conteúdo de uma página. A grande diferença está no último parâmetro, passado como TRUE , pois ele define que, em vez de exibir a view na tela, vai

retornar o conteúdo dela para a variável $mensagem , devidamente

renderizada.

Tem dúvidas sobre o carregamento das views? Que tal refrescar sua memória e revisitar o capítulo 4. Anatomia de uma view para revisar o assunto?

Para enviar um e-mail com arquivo anexo, basta executar o método attach() da library Email junto com os demais métodos

já apresentados anteriormente neste capítulo. O método attach()

aceita alguns parâmetros para possibilitar a configuração do envio do anexo. Veja a seguir alguns exemplos de uso do método:

Informando apenas o caminho do arquivo:

8.3 ENVIANDO E-MAIL COM ANEXO

$this->email->attach('/caminho/do/arquivo.jpg');

Informando uma URL como caminho do arquivo:

$this->email->attach('http://www.arquivos.com/arquiv o.jpg');

Customizando o nome do arquivo:

$this->email->attach('arquivo.pdf', 'attachment', 'n ovo_nome.pdf');

Múltiplos arquivos:

$this->email->attach('/caminho/do/arquivo.jpg'); $this->email->attach('/caminho/do/arquivo2.jpg'); $this->email->attach('/caminho/do/arquivo3.jpg');

Para múltiplos arquivos, você deve executar o método atach()

para cada um deles, podendo usar qualquer uma das formas citadas.

Para enviar e-mails usando o protocolo SMTP, você precisará fazer uso dos parâmetros de configuração da library. O restante do código para envio permanece o mesmo, já apresentado anteriormente.

$this->load->library('email');

$config['protocol'] = 'smtp';

$config['smtp_host'] = 'smtp.domain.com';

$config['smtp_user'] = 'user-smtp';

$config['smtp_pass'] = 'smtp-pass';

$config['smtp_port'] = 587;

$this->email->initialize($config);

A variável $config do tipo array foi criada e recebe as

informações necessárias do SMTP (host, usuário, senha e porta). O método initialize($config) é chamado para que as

informações de configuração sejam passadas para a library.

8.4 ENVIO DE E-MAIL COM SMTP

A partir daí, é só proceder normalmente com a definição de remetente, destinatário e demais informações, como já foi mostrado neste capítulo.

A library Email possui vários parâmetros para configuração. Veja a seguir a lista completa: useragent : o "user agent" Valor padrão: CodeIgniter protocol : o protocolo para envio do e-mail Valor padrão: mail Opções: mail, sendmail, ou smtp mailpath : path para o servidor do Sendmail Valor padrão: /usr/sbin/sendmail smtp_host : endereço do servidor SMTP smtp_user : usuário do SMTP smtp_pass : senha do SMTP smtp_port : porta do SMTP Valor padrão: 25 smtp_timeout : timeout do SMTP (em segundos) Valor padrão: 5 smtp_keepalive : ativa conexão SMTP persistente

8.5 PARÂMETROS DE CONFIGURAÇÃO

Valor padrão: FALSE

Opções: TRUE ou FALSE

smtp_crypto : modo de encriptação do SMTP

Opções: tls ou ssl

wordwrap : ativa quebra de palavra

Valor padrão: TRUE

Opções: TRUE ou FALSE

wrapchars : número de caracteres para a quebra

Valor padrão: 76

mailtype : tipo de e-mail. Se o conteúdo for HTML, será

enviado como uma página web. Fique atento a links e caminhos de imagens relativos, pois eles não vão funcionar. Valor padrão: text Opções: text ou html charset : codificação de caracteres (utf-8, iso-8859-1 etc.) Valor padrão: $config['charset'] validate : validação do e-mail Valor padrão: FALSE

Opções: TRUE ou FALSE

priority : prioridade do e-mail (1 = alta, 5 = baixa, 3 =

normal)

Valor padrão: 3 Opções: 1, 2, 3, 4, 5

crlf : caractere para quebra de linha (use "\r\n" para atender à

RFC 822)

*Valor padrão: "\n"

Opções: "\r\n" ou "\n" ou "\r"

newline : caractere para quebra de linha (use "\r\n" para

atender à RFC 822)

Valor padrão: "\n"

Opções: "\r\n" ou "\n" ou "\r"

bcc_batch_mode : ativa o modo BCC Batch

Valor padrão: FALSE

Opções: TRUE ou FALSE

bcc_batch_size : número de e-mail para BCC Batch

Valor padrão: 200

dsn : ativa notificações de mensagem para o servidor

Valor padrão: FALSE

Opções: TRUE ou FALSE

A aplicação desses parâmetros é muito simples. Veja no exemplo a seguir onde configuramos o envio do e-mail pelo protocolo Sendmail, definimos o charset e a quebra de palavras.

$config['protocol'] = 'sendmail';

$config['mailpath'] = '/usr/sbin/sendmail';

$config['charset'] = 'iso-8859-1';

$config['wordwrap'] = TRUE;

$this->email->initialize($config);

Foi criada a variável $config , que é um array e recebe como

seguida, é executado o método initialize($config) , que passa

as configurações para a library.

Uma outra alternativa para definir as configurações de envio e não precisar ficar repetindo essas configurações sempre que for criar uma rotina de envio de e-mail, é usar o arquivo de configuração. Para isso, você deve criar um arquivo email.php

dentro de application/config , e adicionar ao seu conteúdo o array com as configurações, como foi feito no código anterior.

Dessa forma você não precisará utilizar o método initialize() ,

pois, ao carregar a library, as configurações já serão passadas para ela automaticamente.

Além dos métodos initialize , from , to , cc , bcc , subject , message , attach e send , que foram vistos neste

capítulo, a library ainda possui outros métodos:

reply_to($email,$nome) : possui a mesma sintaxe

do método to e serve para determinar qual e-mail

receberá a resposta, caso o destinatário responda ao e- mail.

set_alt_message($altMessage) : é uma mensagem

alternativa para ser exibida no corpo do e-mail caso você tenha enviado um e-mail em formato HTML e o destinatário não tenha suporte a esse formato.

set_header($header, $value) : adiciona

informações ao cabeçalho do e-mail pelos parâmetros

$header e $value .

clear($clear_attachments) : limpa as variáveis

evitando o disparo de novos e-mails com informações

8.6 OUTROS MÉTODOS DA LIBRARY EMAIL

de envios anteriores. O parâmetro

$clear_attachments é um booleano que, se passado

como TRUE , remove todos os anexos que tenham sido

adicionados no envio anterior.

Mais um capítulo finalizado, e você vai se tornando um profissional melhor e mais capacitado do que já é no uso do CodeIgniter a cada página. Neste capítulo, você aprendeu detalhes sobre o envio de e-mails utilizando a library Email, nativa do CI. Nos próximos capítulos, você aprenderá a trabalhar com sessões e a fazer uploads de arquivo usando o CI. Bons estudos! Para reforçar o que você aprendeu neste capítulo, acesse o portal Universidade CodeIgniter pelo link a seguir, e desenvolva o exemplo prático do tutorial.

http://www.universidadecodeigniter.com.br/enviando-emails- com-a-library-nativa-do-codeigniter

Documentação oficial do CI sobre a library Email: https://codeigniter.com/user_guide/libraries/email.htm l

8.7 CONCLUSÃO

Exemplo prático

CAPÍTULO 9

"Qualquer colaborador vive de exemplo. Então, seja uma inspiração." ─ Geraldo Rufino

Trabalhar com sessões no CodeIgniter é algo fácil e de baixa complexidade, pois por meio de métodos objetivos e autodescritivos, você executa operações como armazenamento, atualização, remoção e limpeza dos dados em cache com poucas linhas de código. Ele ainda permite que você utilize para armazenamento dos dados de sessão a variável global $_SESSION

(nativa do PHP), o Memcached, Redis, arquivos físicos e também banco de dados.

Como o CI permite utilizar mais de um tipo de driver para armazenamento dos dados da sessão, existem parâmetros de configuração para definir qual será usado. Esses parâmetros de

configuração ficam localizados em

application/config/config.php . Veja a seguir os parâmetros e suas respectivas funções: sess_driver : driver utilizado para armazenamento da sessão.

GERENCIANDO SESSÕES

COM A LIBRARY SESSION

9.1 CONFIGURANDO A SESSÃO

Valor padrão: files

Opções: files/database/redis/memcached/custom

sess_cookie_name : nome utilizado para o cookie da sessão.

Valor padrão: ci_session Opções: [A-Za-z_-]

sess_expiration : número de segundos para expiração da

sessão. Para que a sessão não expire, informe zero (0) como valor. Valor padrão: 7200 (2 horas)

Opções: Tempo em segundos (inteiro)

sess_save_path : caminho para armazenamento das

informações, dependendo do driver usado. Valor padrão: NULL

sess_match_ip : validação ou não do IP do usuário na hora da

leitura da sessão.

Valor padrão: FALSE

Opções: TRUE ou FALSE

sess_time_to_update : frequência com que a sessão vai se

regenerar e criar uma nova ID de sessão. Se definir o valor como 0 (zero), a regeneração será desativada.

Valor padrão: 300

Opções: Tempo em segundos (inteiro)

sess_regenerate_destroy : destrói a sessão mais antiga

quando a sessão for regenerada. Valor padrão: FALSE

Existem dois meios de se inicializar a sessão em uma aplicação com CodeIgniter. O primeiro é através do arquivo autoload, no qual você pode adicionar a library Session no array de libraries a ser carregado de forma automática. A segunda é usando o método

$this->load->library('session') no controller de sua

aplicação onde você precisará fazer uso das sessões.

Após carregar a library, você passará a utilizar $this- >session para poder executar os métodos da library.

No CI, uma sessão temporária - onde os dados serão passados do controller para a view e apagados após a sua exibição - é definida pelo método $this->session->flashdata() e suas variações.

Um exemplo de dado de sessão temporária é quando você recebe informações do usuário por meio de um formulário, valida e, em caso de sucesso, redireciona o usuário para outra página. Nessa outra página, você precisa exibir uma mensagem de que os dados foram processados com sucesso. Veja a seguir cada um dos métodos para trabalhar com sessão temporária.

Para armazenar os dados e recuperá-los posteriormente, você utiliza o método $this->session->set_flashdata() , que possui

dois parâmetros:

9.2

CARREGANDO

A

LIBRARY

E