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: