Classe Email
A classe de Email do Code Igniter suporta as seguintes funcionalidades:
- Protocolos Multiplos: Mail, Sendmail e SMTP
- Recipientes Multiplos
- CC e BCCs
- Emails em HTML ou texto puro (plain text)
- Arquivos anexos
- Quebra de palavras
- Prioridades
- BCC Batch Mode, permitindo que grandes lotes de email sejam quebradas em pequenos lotes BCC.
- Ferramentas de Debug de Email
Enviando Emails
Enviar email não é apenas simples, mas você pode configurar isso em tempo de execução ou definir suas preferências em arquivos de configuração.
Veja uma demonstração básica de como enviar um email. Nota: Este exemplo assume que você está enviando o email de um de seus controllers.
$this->load->library('email');
$this->email->from('voce@seu-site.com', 'Seu Nome');
$this->email->to('alguem@algum-site.com');
$this->email->cc('outro@outro-site.com');
$this->email->bcc('fulano@qualquer-site.com');
$this->email->subject('Teste de Email');
$this->email->message('Testando a classe de email.');
$this->email->send();
echo $this->email->print_debugger();
Definindo as Preferencias de Email
Existem 17 preferências disponíveis para definir como suas mensagens serão enviadas. Você pode defini-las, tanto manualmente como descrito aqui, quanto automaticamente usando seu arquivo de configuração, como descrito abaixo:
Estas preferências são definidas passando um array para a função de inicialização do email. Segue um exemplo de como você poderia definir algumas preferências:
$config['protocol'] = 'sendmail';
$config['mailpath'] = '/usr/sbin/sendmail';
$config['charset'] = 'iso-8859-1';
$config['wordwrap'] = TRUE;
$this->email->initialize($config);
Nota: A maior parte das preferências possuem valores padrão que serão utilizados caso você não os defina.
Definindo as Preferências de Email em Arquivo de Configuração
Se você preferir não definir as preferências usando o método acima, você pode colocá-las em um arquivo de configuração. Crie um novo arquivo chamado email.php, adicione o array $config neste arquivo. Então, salve no diretório config/email.php da sua aplicação e ele será carregado automaticamente. Você NÃO precisará usar o método $this->email->initialize() se salvar suas preferências no Arquivo de Configuração.
Preferencias de Email
Abaixo segue a lista de todas as preferências que podem ser definidas para o envio de um email.
| Preferencia | Valor Padrão | Opções | Descricao |
|---|---|---|---|
| useragent | Code Igniter | None | O "user agent". |
| protocol | mail, sendmail, ou smtp | Protocolo de envio de email. | |
| mailpath | /usr/sbin/sendmail | None | Caminho do Sendmail no servidor. |
| smtp_host | No Default | None | Endereço do Servidor SMTP. |
| smtp_user | No Default | None | Usuário SMTP. |
| smtp_pass | No Default | None | Senha SMTP. |
| smtp_port | 25 | None | Porta SMTP. |
| smtp_timeout | 5 | None | Timeout SMTP (em segundos). |
| wordwrap | TRUE | TRUE ou FALSE (booleano) | Liga a quebra de palavra. |
| wrapchars | 76 | Número de caracteres para quebrar. | |
| mailtype | text | text or html | Tipo de email. Se enviar em HTML, é necessário enviar uma página web completa. Certifique-se de que não utilizou links ou imagens com caminho relativo, pois se não elas não vão funcionar. |
| charset | utf-8 | Tipo de codificação de caracter (utf-8, iso-8859-1, etc.). | |
| validate | FALSE | TRUE ou FALSE (booleano) | Se deve validar o endereço de email. |
| priority | 3 | 1, 2, 3, 4, 5 | Prioridade do email. 1 = maior. 5 = menor. 3 = normal. |
| newline | \n | "\r\n" or "\n" | Caracter de quebra de linha. (Use "\r\n" para compatibilizar com o RFC 822). |
| bcc_batch_mode | FALSE | TRUE or FALSE (boolean) | Liga BCC Batch Mode (modo de lote). |
| bcc_batch_size | 200 | None | Número de emails em cada lote BCC. |
Referências de Funções de Email
$this->email->from()
Define o endereço de email e o nome da pessoa que envia o email:
$this->email->from('voce@seu-site.com', 'Seu Nome');
$this->email->reply_to()
Define o endereço de resposta (reply-to). Se ocultar esta informação, a informação do "from" será utilizada. Exemplo:
$this->email->reply_to('voce@seu-site.com', 'Seu Nome');
$this->email->to()
Define o(s) endereço(s) de e-mail de destino. Pode ser um único email, uma lista separada por vírgulas ou um array:
$this->email->to('alguem@site.com');
$this->email->to('alguem@site.com, outro@outro-site.com, fulano@site.com');
$list = array('alguem@site.com, outro@outro-site.com, fulano@site.com');
$this->email->to($list);
$this->email->cc()
Define o(s) endereço(s) de email para CC. Funciona como o "to", podendo ser um único email, lista separada por vírgulas ou um array.
$this->email->bcc()
Define o(s) endereço(s) de email para BCC. Funciona como o "to", podendo ser um único email, lista separada por vírgulas ou um array.
$this->email->subject()
Define o Assunto do email:
$this->email->subject('Este é o assunto');
$this->email->message()
Define a mensagem do email:
$this->email->message('Esta é a mensagem');
$this->email->set_alt_message()
Define a mensagem alternativa do email:
$this->email->set_alt_message('Esta é a mensagem alternativa');
Este é uma mensagem opcional que pode ser usada se você enviar email em HTML. Ela permite você especificar uma mensagem alternativa sem formatação HTML, que é adicionada ao cabeçalho do email para pessoas que não aceitam emails HTML. Se você não definir esta mensagem, o Code Igniter vai extraí-la do seu email removendo as tags HTML do mesmo.
$this->email->clear()
Reseta todas as variaveis de email. Esta função deve ser usada se você precisar rodar a função de envio de email em
um loop, resetando as informações entre os ciclos.
foreach ($list as $name => $address)
{
$this->email->clear();
$this->email->to($address);
$this->email->from('voce@seu-site.com');
$this->email->subject('Seu nome '.$name);
$this->email->message('Ola '.$name.' Aqui esta a informacao que voce precisa.');
$this->email->send();
}
Se você passar TRUE como parametro, todos os anexos também serão resetados:
$this->email->clear(TRUE);
$this->email->send()
Função de envio de email. Retorna o booleano TRUE ou FALSE baseado no sucesso ou falha, permitindo que seja utilizada em condicionais:
if ( ! $this->email->send())
{
// Gerar Erro
}
$this->email->attach()
Permite que você envie um anexo. Passe o caminho e nome do arquivo como primeiro parametro. Nota: Use o caminho do arquivo, e não sua URL. Para anexar vários arquivos, use a função várias vezes. Por exemplo:
$this->email->attach('/path/to/photo1.jpg');
$this->email->attach('/path/to/photo2.jpg');
$this->email->attach('/path/to/photo3.jpg');
$this->email->send();
$this->email->print_debugger()
Retorna uma string contendo qualquer mensagem de servidor, cabeçalho de email e a própria mensagem. Útil para debug.
Evitando Quebra de Palavra
Se você deixou a quebra de palavras ligado (o que é recomendado para seguir o RFC 822) e você tem um link no corpo do
email, ele pode ser quebrado também, fazendo com que o mesmo não seja "clicável" pela pessoa que recebeu o email. O Code
Igniter permite que você evite a quebra de palavra em determinadas partes da sua mensagem, dessa forma:
The text of your email that
gets wrapped normally.
{unwrap}http://www.some-site.com/a_long_link_that_should_not_be_wrapped.html{/unwrap}
More text that will be
wrapped normally.
Coloque o trecho que você não quer quebrar entre: {unwrap} {/unwrap}