Como enviar e-mail usando CodeIgnorar

โšก Resumo Inteligente

CodeO envio de e-mails com o Igniter depende da biblioteca de e-mail integrada do framework para entregar mensagens via SMTP ou servidor de e-mail local. Este exemplo cria um arquivo de configuraรงรฃo de e-mail, uma view de formulรกrio de contato e um controlador que lรช os dados inseridos no formulรกrio e envia a mensagem.

  • ๐Ÿ“ง Biblioteca integrada: A biblioteca Email envia e-mails com o mรญnimo de cรณdigo e suporta os protocolos SMTP, Sendmail e PHP.
  • โš™๏ธ Configuraรงรฃo central: Um arquivo de configuraรงรฃo personalizado email.php armazena o protocolo, o host, a porta, o usuรกrio e a senha, mantendo as configuraรงรตes em um รบnico local.
  • ๐Ÿ”“ Credenciais SMTP: Sรฃo necessรกrios valores vรกlidos para smtp_host, smtp_user e smtp_pass; parรขmetros fictรญcios nunca enviarรฃo um e-mail real.
  • ๐Ÿ“ Formulรกrio para o Controlador: Uma visualizaรงรฃo de contato coleta o destinatรกrio, o assunto e a mensagem, que o controlador lรช com a biblioteca de entrada.
  • ๐Ÿ“ค Fluxo de envio: O controlador define os parรขmetros de origem, destino, assunto e mensagem, em seguida chama a funรงรฃo send() e imprime um relatรณrio de depuraรงรฃo em caso de falha.
  • ๐Ÿ“Ž HTML e Arquivos: Alterar o tipo de e-mail para html e chamar a funรงรฃo attach() permite enviar mensagens formatadas com anexos de arquivo.
  • ๐Ÿค– Assistรชncia de IA: As ferramentas de IA podem gerar o controlador de e-mail, validar a entrada de formulรกrios e diagnosticar erros de conexรฃo SMTP a partir da saรญda do depurador.

CodeIgniter enviando e-mail

O e-mail รฉ muito importante em aplicaรงรตes web. Quando um usuรกrio se cadastra, podemos enviar um e-mail para verificar seu endereรงo e permitir que ele confirme a assinatura. Tambรฉm usamos o e-mail para redefinir senhas esquecidas e enviar faturas e recibos aos clientes. CodeO Igniter torna extremamente fรกcil para nรณs enviar e-mails a partir do nosso aplicativo, usando uma variedade de opรงรตes.

CodeO Igniter possui uma biblioteca de e-mail integrada que podemos usar ao enviar e-mails.

CodeConfiguraรงรฃo de e-mail do Igniter

Precisamos de um local centralizado onde possamos gerenciar as configuraรงรตes de e-mail. CodeO Igniter nรฃo vem com um arquivo de configuraรงรฃo para e-mails, entรฃo teremos que criar um nรณs mesmos.

Crie um arquivo email.php no diretรณrio application/config

Adicione o seguinte cรณdigo a email.php

<?php defined('BASEPATH') OR exit('No direct script access allowed');
 
$config = array(
'protocol' => 'smtp', // 'mail', 'sendmail', or 'smtp'
'smtp_host' => 'smtp.example.com',
'smtp_port' => 465,
'smtp_user' => 'no-reply@example.com',
'smtp_pass' => '12345!',
'smtp_crypto' => 'ssl', //can be 'ssl' or 'tls' for example
'mailtype' => 'text', //plaintext 'text' mails or 'html'
'smtp_timeout' => '4', //in seconds
'charset' => 'iso-8859-1',
'wordwrap' => TRUE
);

AQUI,

  • 'protocol' => 'smtp', especifica o protocolo que vocรช deseja usar ao enviar e-mails. Isso pode ser Gmail Configuraรงรตes SMTP ou configuraรงรตes SMTP do seu host
  • 'smtp_host' => 'smtp.example.com', especifica o host SMTP. Por exemplo, se vocรช quiser usar Gmail entรฃo vocรช teria algo como smtp.gmail.com
  • 'smtp_port' => 465, uma porta aberta no host SMTP especificado que foi configurada para e-mail SMTP.
  • 'smtp_user' => 'no-reply@example.com', o endereรงo de e-mail que serรก usado como remetente ao enviar e-mails. Este deve ser um endereรงo de e-mail vรกlido que exista no servidor
  • 'smtp_pass' => '12345!', a senha do e-mail do usuรกrio SMTP especificado.
  • 'smtp_crypto' => 'ssl', especifica o mรฉtodo de criptografia a ser usado, ou seja, ssl, tls etc.
  • 'mailtype' => 'text', define o tipo de e-mail a ser usado. Pode ser texto simples ou HTML, dependendo das suas necessidades.
  • 'smtp_timeout' => '4', especifica o tempo em segundos que deve decorrer ao tentar se conectar ao host antes que uma exceรงรฃo de tempo limite seja lanรงada.
  • 'charset' => 'iso-8859-1', define o conjunto de caracteres a ser usado no envio de emails.
  • 'wordwrap' => TRUE, se definido como TRUE, a quebra automรกtica de linha estรก habilitada. Se definido como FALSE, a quebra automรกtica de linha estรก desabilitada.

Observaรงรฃo: para enviar e-mails para o trabalho, vocรช deve fornecer parรขmetros de configuraรงรฃo vรกlidos. Parรขmetros fictรญcios nรฃo poderรฃo enviar e-mails.

CodeVisualizaรงรฃo de e-mail do Igniter

Nesta seรงรฃo, criaremos a visualizaรงรฃo que enviarรก o email ao destinatรกrio.

Crie um novo e-mail de diretรณrio em application/views

Crie um novo arquivo contact.php em application/views/email

Adicione o seguinte cรณdigo a application/views/email/contact.php

<!DOCTYPE html>
<html>
<head>
<title>CodeIgniter Send Email</title>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
</head>
<body>
<div>
<h3>Use the form below to send email</h3>
<form method="post" action="<?=base_url(0)?>" enctype="multipart/form-data">
<input type="email" id="to" name="to" placeholder="Receiver Email">
<br><br>
<input type="text" id="subject" name="subject" placeholder="Subject">
<br><br>
<textarea rows="6" id="message" name="message" placeholder="Type your message here"></textarea>
<br><br>
<input type="submit" value="Send Email" />
</form>
</div>
</body>
</html>

AQUI,

  • Temos um formulรกrio HTML bรกsico que aceita o e-mail, o assunto e a mensagem, e entรฃo passa os parรขmetros para a rota de e-mail.

CodeControlador de e-mail Igniter

Vamos agora criar o controlador que ficarรก responsรกvel pelo envio de e-mails.

Crie um novo arquivo EmailController.php em application/controllers/EmailController.php

Adicione o seguinte cรณdigo a EmailController.php

<?php
 
defined('BASEPATH') OR exit('No direct script access allowed');
 
class EmailController extends CI_Controller {
 
public function __construct() {
parent:: __construct();
 
$this->load->helper('url');
}
 
public function index() {
$this->load->view('email/contact');
}
 
function send() {
$this->load->config('email');
$this->load->library('email');
 
$from = $this->config->item('smtp_user');
$to = $this->input->post('to');
$subject = $this->input->post('subject');
$message = $this->input->post('message');
 
$this->email->set_newline("\r\n");
$this->email->from($from);
$this->email->to($to);
$this->email->subject($subject);
$this->email->message($message);
 
if ($this->email->send()) {
echo 'Your Email has successfully been sent.';
} else {
show_error($this->email->print_debugger());
}
}
}

AQUI,

  • A classe `EmailController` que estende `CI_Controller` define nosso controlador de e-mail que estende a classe pai. CodeControlador de igniรงรฃo.
  • public function __construct() {โ€ฆ} define o construtor filho que chama o mรฉtodo do construtor pai.
  • public function index() {โ€ฆ} define o mรฉtodo de รญndice que exibe o formulรกrio de contato
  • function send() {โ€ฆ} define o mรฉtodo que envia o email
    • $this->load->config('email'); carrega as configuraรงรตes de e-mail
    • $this->load->library('email'); carrega a biblioteca de e-mail
    • $from = $this->config->item('smtp_user'); obtรฉm o ID do remetente do arquivo de configuraรงรฃo de email que definimos.
    • $to = $this->input->post('para'); obtรฉm o valor to do formulรกrio enviado
    • `$subject = $this->input->post('subject');` define o assunto do e-mail a partir do formulรกrio.
    • $mensagem = $this->input->post('mensagem'); define a mensagem de e-mail do formulรกrio
    • $this->email->set_newline(โ€œ\r\nโ€); define os novos caracteres de linha para e-mails
    • $este->e-mail->de($de); define o endereรงo de e-mail do remetente
    • $este->e-mail->para($para); define o endereรงo de e-mail do destinatรกrio
    • $this->email->assunto($assunto); define o assunto do e-mail
    • $this->email->mensagem($mensagem); define a mensagem de e-mail
    • if ($this->email->send()) {โ€ฆ} tenta enviar o e-mail. Se o e-mail for enviado com sucesso, a mensagem โ€œSeu e-mail foi enviado com sucessoโ€ serรก exibida; caso contrรกrio, informaรงรตes de depuraรงรฃo serรฃo impressas sobre o que pode ter dado errado.

Vamos agora definir as rotas de e-mail.

Rotas de e-mail

Adicione as seguintes rotas a application/config/routes.php

$route['send-email'] = 'EmailController';
$route['email'] = 'EmailController/send';

Agora podemos carregar o formulรกrio de contato no navegador da web.

Vamos iniciar o servidor PHP integrado.

Abra o terminal ou a linha de comando e navegue atรฉ a raiz do seu aplicativo. No meu caso, a raiz estรก localizada na unidade C:\Sites\ci-app.

cd C:\Sites\ci-app

Inicie o servidor usando o seguinte comando

php -S localhost:3000

Carregue o seguinte URL No seu navegador web: http://localhost:3000/send-email

Vocรช deverรก conseguir ver o seguinte formulรกrio

Rotas de e-mail

Insira o endereรงo de e-mail do destinatรกrio, o assunto e a mensagem do e-mail e clique em Enviar e-mail. Se a sua configuraรงรฃo de e-mail estiver correta, vocรช deverรก ver a mensagem de confirmaรงรฃo.

Como enviar e-mails e anexos em HTML CodeIgnorar

A mesma biblioteca de e-mail pode enviar mensagens e arquivos com formataรงรฃo avanรงada. Duas pequenas alteraรงรตes transformam o exemplo de texto simples acima em um e-mail HTML com anexo.

$this->email->set_mailtype('html');
$this->email->message('<h3>Welcome</h3><p>Thanks for joining us.</p>');
$this->email->attach('/path/to/report.pdf');
  • set_mailtype('html'): Informa ร  biblioteca que o corpo da mensagem contรฉm HTML, para que tags como tรญtulos e links sejam exibidas na caixa de entrada do destinatรกrio.
  • anexar(): Adiciona um arquivo de um caminho do servidor ร  mensagem; chame-o uma vez para cada arquivo antes de enviar().

Lembre-se de que e-mails em HTML ainda devem incluir uma alternativa em texto simples, e anexos grandes podem ser rejeitados por servidores de e-mail mais rigorosos.

Perguntas Frequentes

O localhost geralmente nรฃo possui um servidor de e-mail, portanto o protocolo de e-mail falha silenciosamente. Altere o protocolo para SMTP e forneรงa um host SMTP, usuรกrio e senha vรกlidos, ou utilize um serviรงo como o SMTP. Mailarmadilha para testes locais.

Configure smtp_host para smtp.gmail.com, smtp_port para 465 com SSL e smtp_user para o seu endereรงo de e-mail. Gmail endereรงo. Use um Google Senha do aplicativo em vez da sua senha normal, jรก que Gmail Bloqueia logins com senha bรกsica.

O protocolo de e-mail utiliza a funรงรฃo mail() do PHP, o sendmail chama o binรกrio local do servidor e o SMTP se conecta a um servidor de e-mail externo com credenciais. O SMTP รฉ o mais confiรกvel para entrega e autenticaรงรฃo.

Sim. A IA pode construir o controlador, adicionar validaรงรฃo de formulรกrio para o destinatรกrio e o sujeito, e incluir tratamento de sucesso e erro. RevConfira as configuraรงรตes de SMTP e adicione limitaรงรฃo de taxa antes de usar em produรงรฃo.

Sim. Cole a saรญda de print_debugger() e a IA poderรก interpretar falhas no handshake SMTP, erros de autenticaรงรฃo ou problemas de porta, recomendando entรฃo o host, a porta ou os valores de criptografia corretos para tentar.

Resuma esta postagem com: