Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Boa tarde pessoal, como vocês estão?
Estou com uma bronca aqui que, mudei de host, e meu sistema de feedback não envia mais os e-mails por que algumas funções estão desativadas pelo host:
"A função mail() do PHP é desativada por padrão em todos os nossos servidores. Isso porque é uma função perigosa que pode ser usada por códigos maliciosos para disparar mensagens de spam em massa pela sua hospedagem. Isso gera problemas tanto para seu site, quanto para o servidor como um todo. Para disparar e-mails você precisa usar SMTP autenticado. Usando o protocolo SMTP você utiliza uma conta de e-mail existente em sua hospedagem para enviar suas mensagens de forma autenticada e segura. "
Mas como não tenho conhecimento não sei como usar via SMTP.
Meu arquivo que dispara é este abaixo:
<?php
$mail = $_POST['email'];
$to = "feedback@roboeverest.app";/* SEU EMAIL */
$subject = "Feedback | Robô Everest";
$headers = "De: Feedback | Robô Everest <naoresponda@roboeverest.app>";
$message = "DETALHES\n";
$message .= "\nPrimeiro Nome: " . $_POST['firstname'];
$message .= "\nSegundo Nome: " . $_POST['lastname'];
$message .= "\nE-mail: " . $_POST['email'];
$message .= "\nIdade: " . $_POST['age'];
$message .= "\nGênero: " . $_POST['gender'];
$message .= "\nTermos e condições aceitos: " . $_POST['terms']. "\n";
$message .= "\nComo você avalia sua satisfação geral com nossos serviços prestados? " . $_POST['question_1']. "\n";
$message .= "\nComo você ficou sabendo da nossa empresa?\n" ;
foreach($_POST['question_2'] as $value)
{
$message .= "- " . trim(stripslashes($value)) . "\n";
};
$message .= "\nVocê pensa em sugerir nossa empresa para um amigo ou conhecido? " . $_POST['question_3'];
if( isset( $_POST['additional_message'] ) && $_POST['additional_message']) {
$message .= "\nMensagem Adicional: " . $_POST['additional_message'];
}
//Receive Variable
$sentOk = mail($to,$subject,$message,$headers);
//Confirmation page
$user = "$mail";
$usersubject = "Obrigado";
$userheaders = "De: feedback@roboeverest.app\n";
/*$usermessage = "Thank you for your time. Your quotation request is successfully submitted.\n"; WITH OUT SUMMARY*/
//Confirmation page WITH SUMMARY
$usermessage = "Obrigado pelo seu tempo. Sua solicitação foi enviada com sucesso. Nós responderemos em breve.\n\nABAIXO UM RESUMO\n\n$message";
mail($user,$usersubject,$usermessage,$userheaders);
?>
Sou muito leigo, gostaria de fazer envia via SMTP. É difícil de mais?
Grato se alguém puder me ajudar ou me dar uma luz.
Abraço.>
14 minutos atrás, tetsuo disse:
pra facilitar bastante, use o phpMailer: https://github.com/PHPMailer/PHPMailer
Vou dar uma estudada aqui e ver se consigo transformar esse código então.
Obrigado pela dica.
Pode está usando essa classe que escrevi para usar junto o PHPMailer:
Spoiler
<?php
/**
* ****************************************
* @copyright (c) 2016, Omar Pautz
* @version 4.2 (2023)
* Envio de e-mail
* @requires
* PHPMailer 6.6.5
* Contantes de definição:
* @const MAILTYPE
* (Tipo de acesso tls/ssl ao SMTP)
* @const MAILHOST
* (Endereço do SMTP)
* @const MAILPORT
* (Porta de Acesso)
* @const MAILUSER
* (Endereço do e-mail que envia)
* @const MAILPASS
* (Senha do e-mail que envia)
* @const NAME
* (Nome de quem envia)
* ****************************************
*/
class Mailer {
private $mailer;
private $fromMail;
private $fromName;
private $address;
private $template;
private $title;
private $content;
private $find;
private $replaces;
private $sendError;
private $sendSucess;
/**
* ****************************************
* Construtor, inicia e define o formato
* para a class PHPMailer.
* ****************************************
*/
function __construct() {
$this->fromMail = MAIL_USER;
$this->fromName = SITE_NAME;
$this->mailer = new PHPMailer(false);
$this->mailer->SMTPDebug = 0;
$this->mailer->SMTPAuth = true;
$this->mailer->Host = MAIL_HOST;
$this->mailer->SMTPSecure = MAIL_TYPE;
$this->mailer->Username = MAIL_USER;
$this->mailer->Password = MAIL_PASS;
$this->mailer->Port = (int) MAIL_PORT;
$this->mailer->CharSet = 'utf-8';
$this->mailer->isSMTP();
$this->mailer->IsHTML(true);
$this->mailer->getSentMIMEMessage();
/* Corrija o diretório aí conforme onde deixar a classse
Nesse caso aqui indica o mesmo diretório de PHPMailer.php e SMTP.php */
//$this->mailer->setLanguage('pt_br', __DIR__ . DIRECTORY_SEPARATOR . 'language' . DIRECTORY_SEPARATOR);
}
/**
* ****************************************
* Recebe os dados
* @Param {STR} $Address
* Para quem o e-mail vai ser enviado.
* @Param {STR} $title
* Título do e-mail
* @Param {STR} $html
* Arquivo que contém o html do e-mail.
* @Param {ARR} $values
* Array com as informações que serão enviadas.
*
* @example
* setMail(
* 'recebe@recebe.com',
* 'Título do envio',
* 'caminho para o arquivo.html',
* [
* 'valorA' => 'Valor de A',
* 'valorB' => 'Valor de B',
* ]
* );
* ****************************************
*/
public function setMail($Address, $title, $html, $values = []) {
$this->address = (string) $Address;
$this->title = (string) $title;
$this->template = (string) $html;
$this->templateDir();
$this->find = [];
$this->replaces = [];
foreach ($values as $key => $value) {
$this->find[] = '{' . $key . '}';
$this->replaces[] = $value;
}
$this->objectValues();
}
/**
* ****************************************
* Adiciona arquivo de imagem junto ao
* e-mail.
* @param {STRING} $img
* Caminho para o arquivo de imagem.
* @param {STRING} $name
* Nome prefixo que será usado para
* carregar a imagem.
* <img src="cid:nome_usado" alt="" />
* ****************************************
*/
public function addImage($img, $name) {
$this->mailer->AddEmbeddedImage($img, $name);
}
public function send() {
$this->sendValues();
}
/**
* ****************************************
* Informa o e-mail foi enviado.
* ****************************************
*/
public function sendSucess() {
return ($this->sendSucess);
}
/**
* ****************************************
* Quando não consegue enviar informa
* o erro que ocorreu.
* ****************************************
*/
public function sendError() {
return $this->sendError;
}
/**
* ****************************************
* Checa se o arquivo de template do html
* existe.
* ****************************************
*/
private function templateDir() {
if (!file_exists($this->template)) {
die('Erro ao solicitar dados para envio de e-mail');
}
}
/**
* ****************************************
* Cria os objetos de envio
* ****************************************
*/
private function objectValues() {
ob_start();
include($this->template);
$content = ob_get_clean();
if (!empty($this->find) && !empty($this->replaces)) {
$this->content = str_replace($this->find, $this->replaces, $content);
}
}
/**
* ****************************************
* Envia os dados
* @return Exeption (true/false)
* ****************************************
*/
private function sendValues() {
$this->mailer->setFrom($this->fromMail, $this->fromName);
$this->mailer->AddAddress($this->address);
$this->mailer->Subject = $this->title;
$this->mailer->Body = $this->content;
try {
$this->mailer->Send();
$this->sendSucess = true;
} catch (Exception $e) {
$this->sendError = "Erro ao enviar e-mail linha: {$e->getCode()}<br/>Arquivo: {$e->getFile()}<br/>Detalhes: {$e->getMessage()}";
$this->sendSucess = false;
}
}
}
Crie um arquivo que irá guardar os dados necessários para conexão SMTP
<?php
defined('SITE_NAME') || define('SITE_NAME', 'fulano'); // Nome que será usado para informar quem está enviando
defined('MAIL_TYPE') || define('MAIL_TYPE', 'tls'); // Tipo de criptografia usada
defined('MAIL_HOST') || define('MAIL_HOST', 'aaa.bbb.com'); // Servidor de envio
defined('MAIL_PORT') || define('MAIL_PORT', 300); // Porta de acesso ao servidor
defined('MAIL_USER') || define('MAIL_USER', 'fulano@fulano.com'); // E-mail que vai enviar
defined('MAIL_PASS') || define('MAIL_PASS', 'senha_do_fulano'); // senha do e-mail que vai enviar
Para enviar:
<?php
$mail = new Mailer();
$mail->setMail(
'recebe@recebe.com', // e-mail de quem vai receber
'Título do envio',
'caminho para o arquivo.html',
[
'AAAA' => 'Alguma coisa',
'BBBB' => 'Pode-se adicionar quantos índices quiser',
]
);
Para o **caminho para o arquivo.html** você cria um arquivo html, nele você pode definir o layout como quiser como se fosse uma página web mesmo sempre usando o atributo style para tal.
Nesse arquivo html você pode está incluindo os parâmetros que criou no array quando definiu os dados de envio exemplo:
<p style="color:red">{AAAA}</p> <!-- AAAA será o texto de acordo com o mencionado antes: "Alguma coisa" -->
Por fim você manda enviar
$mail->send();>
2 horas atrás, Omar~ disse:
Pode está usando essa classe que escrevi para usar junto o PHPMailer:
Ocultar conteúdo
<?php
/**
* ****************************************
* @copyright (c) 2016, Omar Pautz
* @version 4.2 (2023)
* Envio de e-mail
* @requires
* PHPMailer 6.6.5
* Contantes de definição:
* @const MAILTYPE
* (Tipo de acesso tls/ssl ao SMTP)
* @const MAILHOST
* (Endereço do SMTP)
* @const MAILPORT
* (Porta de Acesso)
* @const MAILUSER
* (Endereço do e-mail que envia)
* @const MAILPASS
* (Senha do e-mail que envia)
* @const NAME
* (Nome de quem envia)
* ****************************************
*/
class Mailer {
private $mailer;
private $fromMail;
private $fromName;
private $address;
private $template;
private $title;
private $content;
private $find;
private $replaces;
private $sendError;
private $sendSucess;
/**
* ****************************************
* Construtor, inicia e define o formato
* para a class PHPMailer.
* ****************************************
*/
function __construct() {
$this->fromMail = MAIL_USER;
$this->fromName = SITE_NAME;
$this->mailer = new PHPMailer(false);
$this->mailer->SMTPDebug = 0;
$this->mailer->SMTPAuth = true;
$this->mailer->Host = MAIL_HOST;
$this->mailer->SMTPSecure = MAIL_TYPE;
$this->mailer->Username = MAIL_USER;
$this->mailer->Password = MAIL_PASS;
$this->mailer->Port = (int) MAIL_PORT;
$this->mailer->CharSet = 'utf-8';
$this->mailer->isSMTP();
$this->mailer->IsHTML(true);
$this->mailer->getSentMIMEMessage();
/* Corrija o diretório aí conforme onde deixar a classse
Nesse caso aqui indica o mesmo diretório de PHPMailer.php e SMTP.php */
//$this->mailer->setLanguage('pt_br', __DIR__ . DIRECTORY_SEPARATOR . 'language' . DIRECTORY_SEPARATOR);
}
/**
* ****************************************
* Recebe os dados
* @Param {STR} $Address
* Para quem o e-mail vai ser enviado.
* @Param {STR} $title
* Título do e-mail
* @Param {STR} $html
* Arquivo que contém o html do e-mail.
* @Param {ARR} $values
* Array com as informações que serão enviadas.
*
* @example
* setMail(
* 'recebe@recebe.com',
* 'Título do envio',
* 'caminho para o arquivo.html',
* [
* 'valorA' => 'Valor de A',
* 'valorB' => 'Valor de B',
* ]
* );
* ****************************************
*/
public function setMail($Address, $title, $html, $values = []) {
$this->address = (string) $Address;
$this->title = (string) $title;
$this->template = (string) $html;
$this->templateDir();
$this->find = [];
$this->replaces = [];
foreach ($values as $key => $value) {
$this->find[] = '{' . $key . '}';
$this->replaces[] = $value;
}
$this->objectValues();
}
/**
* ****************************************
* Adiciona arquivo de imagem junto ao
* e-mail.
* @param {STRING} $img
* Caminho para o arquivo de imagem.
* @param {STRING} $name
* Nome prefixo que será usado para
* carregar a imagem.
* <img src="cid:nome_usado" alt="" />
* ****************************************
*/
public function addImage($img, $name) {
$this->mailer->AddEmbeddedImage($img, $name);
}
public function send() {
$this->sendValues();
}
/**
* ****************************************
* Informa o e-mail foi enviado.
* ****************************************
*/
public function sendSucess() {
return ($this->sendSucess);
}
/**
* ****************************************
* Quando não consegue enviar informa
* o erro que ocorreu.
* ****************************************
*/
public function sendError() {
return $this->sendError;
}
/**
* ****************************************
* Checa se o arquivo de template do html
* existe.
* ****************************************
*/
private function templateDir() {
if (!file_exists($this->template)) {
die('Erro ao solicitar dados para envio de e-mail');
}
}
/**
* ****************************************
* Cria os objetos de envio
* ****************************************
*/
private function objectValues() {
ob_start();
include($this->template);
$content = ob_get_clean();
if (!empty($this->find) && !empty($this->replaces)) {
$this->content = str_replace($this->find, $this->replaces, $content);
}
}
/**
* ****************************************
* Envia os dados
* @return Exeption (true/false)
* ****************************************
*/
private function sendValues() {
$this->mailer->setFrom($this->fromMail, $this->fromName);
$this->mailer->AddAddress($this->address);
$this->mailer->Subject = $this->title;
$this->mailer->Body = $this->content;
try {
$this->mailer->Send();
$this->sendSucess = true;
} catch (Exception $e) {
$this->sendError = "Erro ao enviar e-mail linha: {$e->getCode()}<br/>Arquivo: {$e->getFile()}<br/>Detalhes: {$e->getMessage()}";
$this->sendSucess = false;
}
}
}
Crie um arquivo que irá guardar os dados necessários para conexão SMTP
<?php
defined('SITE_NAME') || define('SITE_NAME', 'fulano'); // Nome que será usado para informar quem está enviando
defined('MAIL_TYPE') || define('MAIL_TYPE', 'tls'); // Tipo de criptografia usada
defined('MAIL_HOST') || define('MAIL_HOST', 'aaa.bbb.com'); // Servidor de envio
defined('MAIL_PORT') || define('MAIL_PORT', 300); // Porta de acesso ao servidor
defined('MAIL_USER') || define('MAIL_USER', 'fulano@fulano.com'); // E-mail que vai enviar
defined('MAIL_PASS') || define('MAIL_PASS', 'senha_do_fulano'); // senha do e-mail que vai enviar
Para enviar:
<?php
$mail = new Mailer();
$mail->setMail(
'recebe@recebe.com', // e-mail de quem vai receber
'Título do envio',
'caminho para o arquivo.html',
[
'AAAA' => 'Alguma coisa',
'BBBB' => 'Pode-se adicionar quantos índices quiser',
]
);
Para o **caminho para o arquivo.html** você cria um arquivo html, nele você pode definir o layout como quiser como se fosse uma página web mesmo sempre usando o atributo style para tal.
Nesse arquivo html você pode está incluindo os parâmetros que criou no array quando definiu os dados de envio exemplo:
<p style="color:red">{AAAA}</p> <!-- AAAA será o texto de acordo com o mencionado antes: "Alguma coisa" -->
Por fim você manda enviar
$mail->send();
Muito bem detalhados.
Confesso que vai ser um desafio fazer funcionar para quem não é familiarizado com PHP.
Mas vai ser de grande ajuda. Vou testar aqui.
Grato pela colaboração.
pra facilitar bastante, use o phpMailer: https://github.com/PHPMailer/PHPMailer