Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Dúvida no Ex. 1 da Aula 10 - Enviando emails

Criei o seguinte código para envio de email para a compra de um produto: obs(Email e senha estão incluidos corretamente)

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
    class Vendas extends CI_controller{
        public function nova(){
            $usuario = autoriza();
            $this->load->model(array("vendas_model", "produtos_model", "usuarios_model"));
            $this->load->helper("date");
            $venda = (array(
            "comprador_id" => $usuario["id"],
            "data_de_entrega" => dataPtBrparaDataMysql($this->input->post("data_de_entrega")),
            "produto_id" => $this->input->post("produto_id")
            ));

            $this->load->library("email");
            $config["protocol"] = "smtp";
            $config["smtp_host"] = "ssl://smtp.gmail.com";
            $config["smtp_user"] = "";
            $config["smtp_pass"] = "";
            $config["charset"] = "utf-8";
            $config["mailtype"] = "html";
            $config["newline"] = "\r\n";
            $config["smtp_port"] = '465';
            $this->email->initialize($config);

            $produto = $this->produtos_model->buscaPorId($venda["produto_id"]);
               $vendedor = $this->usuarios_model->buscaPorId($produto["usuario_id"]);
               $sucesso = $this->vendas_model->salva($venda);

               $dados = array("produto" => $produto);
               $conteudo = $this->load->view("vendas/email" , $dados, TRUE);
            $this->email->from("emailparatestesdocurso@gmail.com" , "Mercado");
            $this->email->to($vendedor["email"]);
            $this->email->subject("Seu produto {$produto['nome']} foi vendido!");
            $this->email->message("<?=conteudo?");
            $this->email->send();

            $this->session->set_flashdata("success" , "Pedido de Compra realizado com Sucesso");
            redirect("/");
        }
        public function index(){
            autoriza();
            $this->load->helper("date");
            $usuario = $this->session->userdata("usuario_logado");
            $this->load->model("produtos_model");
            $produtosVendidos = $this->produtos_model->buscaVendidos($usuario);
            $dados = array('produtosVendidos' => $produtosVendidos);
            $this->load->view("vendas/index" , $dados);

        }
    }

Mas minha aplicação não está carregando a biblioteca de emails, nem os dois models além do vendas_model, eu tento executar mudando as variáveis de lugar e ele aponta sempre o mesmo erro: Fatal error: Call to a member function initialize() on null in C:\xampp\htdocs\mercado\application\controllers\vendas.php on line 22

Essa foi a primeira vez em todo o curso que presenciei esse erro de load.

2 respostas
solução!

Oi Felipe, realmente seu código parece tudo certo.

Tente assim:

$config["protocol"] = "smtp";
$config["smtp_host"] = "ssl://smtp.gmail.com";
$config["smtp_user"] = "";
$config["smtp_pass"] = "";
$config["charset"] = "utf-8";
$config["mailtype"] = "html";
$config["newline"] = "\r\n";
$config["smtp_port"] = '465';
$this->load->library('email', $config);

No lugar de

$this->load->library("email");
$config["protocol"] = "smtp";
$config["smtp_host"] = "ssl://smtp.gmail.com";
$config["smtp_user"] = "";
$config["smtp_pass"] = "";
$config["charset"] = "utf-8";
$config["mailtype"] = "html";
$config["newline"] = "\r\n";
$config["smtp_port"] = '465';
$this->email->initialize($config);

Acaba sendo a mesma coisa mas é só uma forma diferente de fazer a mesma coisa. Mas quem sabe, evita esse seu problema.

Abraço.

O meu código está desta maneira.

class Vendas extends CI_controller{ public function nova(){ $usuario = autoriza(); $this->load->model(array("vendas_model", "produtos_model", "usuarios_model")); $this->load->helper("date"); $venda = (array( "comprador_id" => $usuario["id"], "data_de_entrega" => dataPtBrParaMysql($this->input->post("data_de_entrega")), "produto_id" => $this->input->post("produto_id") ));

$config["protocol"] = "smtp"; $config["smtp_host"] = "ssl://smtp.gmail.com"; $config["smtp_user"] = "mail.kzado@gmail.com"; $config["smtp_pass"] = "c1rn3ir0"; $config["charset"] = "utf-8"; $config["mailtype"] = "html"; $config["newline"] = "\r\n"; $config["smtp_port"] = '465'; $this->load->library('email', $config);

$produto = $this->produtos_model->busca($venda["produto_id"]); $vendedor = $this->usuarios_model->busca($produto["usuario_id"]); $sucesso = $this->vendas_model->salva($venda);

e mesmo depois mas o email não chega até minha caixa de entrada. Já configurei o gmail para Aplicativos Menos Seguro está ativado. Devo fazer mais alguma configuração? $dados = array("produto" => $produto); $conteudo = $this->load->view("vendas/email" , $dados, TRUE); $this->email->from("mail.kzado@gmail.com" , "Mercado"); $this->email->to($vendedor["email"]); $this->email->subject("Seu produto {$produto['nome']} foi vendido!"); $this->email->message("<?= $conteudo?>"); $this->email->send();

$this->session->set_flashdata("success" , "Pedido de Compra realizado com Sucesso"); redirect("/"); }