Olá, fiz uma pagina para mandar email. No servidor local funciona normalmente, mas quando boto ele online ele não redireciona.
Eu hospedei ele no webhost
<?php
ob_start();
session_start();
include_once("menus/menuGlobal.php");
echo "<center><img src='images/gif.gif'class='img-responsive' /></center>";
include_once("rodape.php");
$nome = $_POST['nome'];
$email = $_POST['email'];
$mensagem = $_POST['mensagem'];
$assunto = $_POST['assunto'];
if(empty($nome)){
$_SESSION['erro'] = "Campo nome não foi preenchido!";
header("Location:contatos.php");
} else if(empty($email)){
$_SESSION['erro'] = "Campo email não foi preenchido!";
header("Location:contatos.php");
} else if(empty($mensagem)){
$_SESSION['erro'] = "Campo mensagem não foi preenchido!";
header("Location:contatos.php");
} else if(empty($assunto)){
$_SESSION['erro'] = "Campo assuno não foi preenchido!";
header("Location:contatos.php");
}
if((!empty($nome)) && (!empty($email)) && (!empty($mensagem))){
require 'vendor/autoload.php';
$from = new SendGrid\Email(null, $email);
$subject = $assunto;
$to = new SendGrid\Email(null, "gabrielveigalima@icloud.com");
$content = new SendGrid\Content("text/html", "<br><br>Nova mensagem de contato pelo site<br><br>Nome: $nome<br>Email: $email <br>Mensagem: $mensagem");
$mail = new SendGrid\Mail($from, $subject, $to, $content);
//Necessário inserir a chave
$apiKey = '';
$sg = new \SendGrid($apiKey);
$response = $sg->client->mail()->send()->post($mail);
if($response){
$_SESSION['sucesso'] = "Email enviado com sucesso, em breve estaremos respondendo!";
header("Location:contatos.php");
}else{
$_SESSION['erro'] = "Email não enviado, tente novamente!";
header("Location:contatos.php");
}
}
header("Location:contatos.php");
ob_end_flush();
?>
`
Estranho funcionar mesmo localmente, pois quando se usa a função header, não se deve imprimir nada antes (echo, print, printf ou html puro por exemplo)…
Recomendo retirar/comentar ou mover a linha do echo center… para baixo de tudo…
Outra prática antiga era colocar um exit logo abaixo de cada header que usa location…
header("Location:contatos.php");
exit;
Isso evitava a continuação das linhas abaixo, não sei como está hoje na versão 7…
Essa linha abaixo do header não faz sentido
ob_end_flush();
Já que após redirecionamento, o php não terá mais controle sobre ela…
Assim como ob_start(); é muito utilizado para downloads de arquivos não para redirecionamentos, sugiro removê-los do seu código, pois são usados para limpeza de buffer (streams), coisa que você não vai usar mandando email…
Já fiz, mas não resolveu.
<?php
session_start();
//include_once("menus/menuGlobal.php");
//echo "<center><img src='images/gif.gif'class='img-responsive' /></center>";
//include_once("rodape.php");
$nome = $_POST['nome'];
$email = $_POST['email'];
$mensagem = $_POST['mensagem'];
$assunto = $_POST['assunto'];
if(empty($nome)){
$_SESSION['erro'] = "Campo nome não foi preenchido!";
header("Location:contatos.php");
} else if(empty($email)){
$_SESSION['erro'] = "Campo email não foi preenchido!";
header("Location:contatos.php");
} else if(empty($mensagem)){
$_SESSION['erro'] = "Campo mensagem não foi preenchido!";
header("Location:contatos.php");
} else if(empty($assunto)){
$_SESSION['erro'] = "Campo assuno não foi preenchido!";
header("Location:contatos.php");
}
if((!empty($nome)) && (!empty($email)) && (!empty($mensagem))){
require 'vendor/autoload.php';
$from = new SendGrid\Email(null, $email);
$subject = $assunto;
$to = new SendGrid\Email(null, "gabrielveigalima@icloud.com");
$content = new SendGrid\Content("text/html", "<br><br>Nova mensagem de contato pelo site<br><br>Nome: $nome<br>Email: $email <br>Mensagem: $mensagem");
$mail = new SendGrid\Mail($from, $subject, $to, $content);
//Necessário inserir a chave
$apiKey = '';
$sg = new \SendGrid($apiKey);
$response = $sg->client->mail()->send()->post($mail);
if($response){
$_SESSION['sucesso'] = "Email enviado com sucesso, em breve estaremos respondendo!";
header("Location:contatos.php");
}else{
$_SESSION['erro'] = "Email não enviado, tente novamente!";
header("Location:contatos.php");
}
}
header("Location:contatos.php");
exit;
?>
Cada header precisa ter seu exit abaixo…
Outra coisa, verifique se não tem algum espaço em branco antes e após os simbolos do php e retire-os…
<?php ... ?>
E por fim, deixe essas diretivas no começo do arquivo só para testar e pegar erros…
<?php
ini_set('display_errors', true);
error_reporting(E_ALL);
...
RESOLVI. O problema era o espaço em branco antes de abrir o php. Obrigado a todos!