TransWikia.com

Como configurar Class email no Codeigniter 4

Stack Overflow em Português Asked by WLS on November 25, 2021

Segui vários tutorias que procurei, mas não consegui funcionar, não sei o que estou deixando passar, estou começando agora a mexer com o Codeigniter e peguei a versão 4.
Estou querendo quando preencher o formulário enviar para email quando submit.
Mas quando envio sempre aparece o erro

500 (Internal Server Error)

Que é de como estou chamando a class email do meu controller do formulário.

Já olhei nesses dois sites
https://codeigniter.com/user_guide/libraries/email.html#sending-email
https://www.tutsmake.com/send-email-in-codeigniter-4-with-smtp/
Pelo que entendi tem que editar o Config/Email.php, mas no controller quando chamada usa

$email = ConfigServices::email();

Não sei se tem que configurar alguma coisa no Config/Services ou outro arquivo para mexer.

Esse é o arquivo Config/Email.php

    <?php
namespace Config;

use CodeIgniterConfigBaseConfig;

class Email extends BaseConfig
{

    /**
     * @var string
     */
    public $fromEmail;

    /**
     * @var string
     */
    public $fromName;

    /**
     * @var string
     */
    public $recipients;

    /**
     * The "user agent"
     *
     * @var string
     */
    public $userAgent = 'CodeIgniter';

    /**
     * The mail sending protocol: mail, sendmail, smtp
     *
     * @var string
     */
    public $protocol = 'mail';

    /**
     * The server path to Sendmail.
     *
     * @var string
     */
    public $mailPath = '/usr/sbin/sendmail';

    /**
     * SMTP Server Address
     *
     * @var string
     */
    public $SMTPHost = 'smtplw.com.br';

    /**
     * SMTP Username
     *
     * @var string
     */
    public $SMTPUser = 'RRRRRRRRRRRR';

    /**
     * SMTP Password
     *
     * @var string
     */
    public $SMTPPass = '################';

    /**
     * SMTP Port
     *
     * @var integer
     */
    public $SMTPPort = 587;

    /**
     * SMTP Timeout (in seconds)
     *
     * @var integer
     */
    public $SMTPTimeout = 15;

    /**
     * Enable persistent SMTP connections
     *
     * @var boolean
     */
    public $SMTPKeepAlive = false;

    /**
     * SMTP Encryption. Either tls or ssl
     *
     * @var string
     */
    public $SMTPCrypto = 'tls';

    /**
     * Enable word-wrap
     *
     * @var boolean
     */
    public $wordWrap = true;

    /**
     * Character count to wrap at
     *
     * @var integer
     */
    public $wrapChars = 76;

    /**
     * Type of mail, either 'text' or 'html'
     *
     * @var string
     */
    public $mailType = 'html';

    /**
     * Character set (utf-8, iso-8859-1, etc.)
     *
     * @var string
     */
    public $charset = 'UTF-8';

    /**
     * Whether to validate the email address
     *
     * @var boolean
     */
    public $validate = false;

    /**
     * Email Priority. 1 = highest. 5 = lowest. 3 = normal
     *
     * @var integer
     */
    public $priority = 3;

    /**
     * Newline character. (Use “rn†to comply with RFC 822)
     *
     * @var string
     */
    public $CRLF = "rn";

    /**
     * Newline character. (Use “rn†to comply with RFC 822)
     *
     * @var string
     */
    public $newline = "rn";

    /**
     * Enable BCC Batch Mode.
     *
     * @var boolean
     */
    public $BCCBatchMode = false;

    /**
     * Number of emails in each BCC batch
     *
     * @var integer
     */
    public $BCCBatchSize = 200;

    /**
     * Enable notify message from server
     *
     * @var boolean
     */
    public $DSN = false;


}

E no meu controller da página que está o formulário estou chamando assim


    <?php namespace AppControllers;
use CodeIgniterController;

class Contato extends BaseController
{
    public function index()
    {
        if (!empty($_POST)) {
            $this->load->library('PHPMailer_Lib');
            $config['protocol'] = 'sendmail';
            $config['mailPath'] = '/usr/sbin/sendmail';
            $config['charset']  = 'iso-8859-1';
            $config['wordWrap'] = true;

            $email->initialize($config);
        }


        $date['isMap'] = true;
        $this->templateNoHome('contato', $date);
    }

    

    //--------------------------------------------------------------------

}

E no ControllerBase estou chamando o helper email

    protected $helpers = ['url', 'form', 'email'];

Não sei se está faltando mais algum arquivo para chamar, quem poder ajudar, agradeço bastante.

One Answer

Consegui fazer funcionar, e pela as coisas que fiz o que e ficou faltando e chamar a classe do email

use CodeIgniterEmailEmail;

Com isso funcionou, segue um método que recebe os dados de um form e envia por email

    <?php namespace AppControllers;
use CodeIgniterController;

use CodeIgniterEmailEmail;
use CodeIgniterHTTPRequestInterface;

class Sucesso extends Controller
{
    public function index()
    {
    $request = ConfigServices::request();
    if($request->getPost()){

      $nome       = $request->getVar('nome');
      $telefone   = $request->getVar('telefone');
      $emailform  = $request->getVar('email');
      $mensagem   = $request->getVar('mensagem');

      $email = ConfigServices::email();

      $config['mailType']       = 'html';

      $email->initialize($config);
      $email->setFrom('[email protected]');
      $email->setTo('[email protected]');

      $email->setSubject('Formulário de contato');
      $email->setMessage("<!DOCTYPE html>
                      <html lang='en' dir='ltr'>
                        <head>
                          <meta charset='utf-8'>
                          <title></title>
                        </head>
                        <body>
                        <strong>" . $nome . "</strong><br/>" .
                         "<strong>Telefone:</strong> " . $telefone . "<br/>" .
                         "<strong>E-mail:</strong> " . $emailform . "<br/>" .
                         "<strong>Mensagem:</strong> <br/>" . $mensagem .
                      "</body>
                    </html>");
        $email->setAltMessage("Nome: ".$nome."nTelefone: ".$telefone."nE-mail: ".$emailform."nMensagem: ".$mensagem);

        $email->send();
        //$email->printDebugger();
    }

        echo view('template/header', $data);
        echo view('sucesso', $data);
        echo view('template/footer', $data);
        echo view('template/scripts', $data);
    }


}
?>

Answered by WLS on November 25, 2021

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP