Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Gabriel Jacinto

Simples classe para enviar e-mail's

Recommended Posts

Olá pessoas!

Então, eu desenvolvi uma simples classe para enviar emails.

Não sei se vocês vão aprovar, mas quis postar aqui.

Pelo menos funciona perfeitamente.

 

Bem, começando pelo arquivo class.Email.php:

<?php
class Email{

/*
* Classe desenvolvida por Gabriel Jacinto (2012)
*/

public $nome;
public $email;
public $assunto;
public $msg;
public $remetente;
public $cod; /* Codificação do email (utf-8,  iso-8859-9 etc.) */

/* Mudando dados */

public function set_nome($nome_){

	$this->nome = $nome_;

}

public function set_email($email_){

	$this->email = $email_;

}

public function set_assunto($assunto_){

	$this->assunto = $assunto_;

}

public function set_msg($msg_){

	$this->msg = $msg_;

}

public function set_remetente($remetente_){

	$this->remetente = $remetente_;

}

public function set_cod($cod_){

	$this->cod = $cod_;

}

/* Gerando dados */

public function get_nome(){

	return $this->nome;

}

public function get_email(){

	return $this->email;

}

public function get_assunto(){

	return $this->assunto;

}

public function get_msg(){

	return $this->msg;

}

public function get_remetente(){

	return $this->remetente;

}

public function get_cod(){

	return "Content-type: text/html; charset=".$this->cod."";

}

/* Corpo do email */

public function Corpo($nome, $email, $msg){

	return "<html><body><b>$nome</b> - $email <hr> $msg</body></html>";

}

/* Enviando e-mail */

public function Envia($assunto, $corpo, $remetente, $cod){

	$mail = mail($remetente, $assunto, $corpo, $cod);

	if($mail){

		echo "E-mail enviado com sucesso!"; /* Se o e-mail for enviado */

	}
	else{

	        echo "Falha ao enviar e-mail!"; /* Se houver algum erro ao enviar o e-mail */

	}

}

}
?>

 

Agora o formulário de contato:

<!doctype html>
<html>
<body>
<form method="post" action="enviar.php">
Nome: <input type="text" name="nome" required="required" /><br />
E-mail: <input type="text" name="email" required="required" /><br />
Assunto: <input type="text" name="assunto" required="required" /><br />
Mensagem: <textarea name="msg" required="required" ></textarea><br />
<input type="submit" name="enviar" required="required" />
</form>
</body>
</html>

 

E por fim, a página para enviar o email (enviar.php):

<?php

function __autoload($class){
require_once "class.$class.php";//Inclui a classe Email
}

$mail = new Email();

if($_POST['enviar']){

$mail->set_nome(trim($_POST['nome']));//Nome da pessoas
$mail->set_email(trim($_POST['email']));//Email da pessoas
$mail->set_assunto(trim($_POST['assunto']));//Assunto do e-mail
$mail->set_msg(trim($_POST['msg']));//Mensgaem do e-mail
$mail->set_remetente(trim("seu@email.com"));//Pra quem vai o email
$mail->set_cod("UTF-8");//Tipo de codificação do email

$corpo = $mail->Corpo($mail->get_nome(), $mail->get_email(), $mail->get_msg());//Defini o corpo de e-mail

$mail->Envia($mail->get_assunto(), $corpo, $mail->get_remetente(), $mail->get_cod());//Envia o e-mail

}

?>

Download:

4shared

 

Como eu já disse, não sei se vão aprovar, mas espero que ajude.

Compartilhar este post


Link para o post
Compartilhar em outros sites

É interessante sim a classe, parabéns pela iniciativa :clap:

 

Agora, você poderia simplificar e muito essa class, bem como explorar mais os métodos PRIVATE, PROTECTED para as variáveis declaradas. Para um melhor entendimento, dê uma lida aqui neste tópico do João Batista

 

http://forum.imasters.com.br/topic/392880-1-3-visibilidade-e-encapsulamento/

 

Abraço. :thumbsup:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ajustes:

class.Email.php:

<?php
class Email{

/*
* Classe desenvolvida por Gabriel Jacinto (2012)
*/

private $nome;
private $email;
private $assunto;
private $msg;
private $remetente;
private $charset; /* Codificação do email (utf-8,  iso-8859-9 etc.) */
private $cod = "Content-type: text/html; charset=".$this->charset."";
private $html;

/* Corpo do email */

public function Corpo($nome_, $email_, $msg_){

	if($this->html){

		return "<html><body><b>".$nome_."</b> - ".$email_." <hr> ".$msg_."</body></html>";

	}
	else{

		return "<html><body><b>".$nome_."</b> - ".$email_." <hr> ".htmlspecialchars( $msg_ )."</body></html>";

	}

}

/* Enviando e-mail */

public function Envia($assunto_, $corpo_, $remetente_, $cod_){

	$mail = @mail($remetente_, $assunto_, $corpo_, "Content-type: text/html; charset=".$charset_."");

	if($mail){

		echo "E-mail enviado com sucesso!";

	}
	else{

	echo "Falha ao enviar e-mail!";

	}

}

}
?>

e enviar.php:

<?php

function __autoload($class){
require_once "class.$class.php";//Inclui a classe Email
}

$mail = new Email();

if($_POST['enviar']){

$mail->nome = trim($_POST['nome']);//Nome da pessoas
$mail->email = trim($_POST['email']);//Email da pessoas
$mail->assunto = trim($_POST['assunto']);//Assunto do e-mail
$mail->msg = trim($_POST['msg']);//Mensgaem do e-mail
$mail->remetente = "contato@maspoxasite.com";//Pra quem vai o email
$mail->charset = "UTF-8";//Tipo de codificação do email
$mail->html = false;//Permissão de HTML no e-mail

$corpo = $mail->Corpo($mail->nome, $mail->email, $mail->msg);//Defini o corpo de e-mail

$mail->Envia($mail->assunto, $corpo, $mail->remetente, $mail->cod);//Envia o e-mail

}

?>

O formulário continua igual.

 

Novo arquivo pra download:

4shared

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ótimo, viu só o tanto que você reduziu os códigos ?... legal. Continue estudando e verá mais formas de redução. Boa sorte. :joia:

Compartilhar este post


Link para o post
Compartilhar em outros sites

primeiramente muito bom, diminui o tempo de alguém que tem segundos para fazer um simples envio, porém acho que da pra fazer pequenas modificações como

 

private $cod = "UTF-8";
private $charset = "Content-type: text/html; charset=".$this->cod."";

 

pois assim eles não seriam dados obrigatórios, já teria uma padrão e caso necessário o usuário modificava.

 

e a segunda parte são os getter, eu acho que nada do que você enviou precisa ter retorno pois seguindo um uma linha eu diria que todos os dados que você enviou você só esta repassando ela para uma outra variável e mais nada.

 

deixe apenas os setter

e chame apenas a função envia

 

algo assim

 

class Email{

/*
* Classe desenvolvida por Gabriel Jacinto (2012)
*/

       public $nome;
       public $email;
       public $assunto;
       public $msg;
       public $remetente;
       public $cod; /* Codificação do email (utf-8,  iso-8859-9 etc.) */

       /* Mudando dados */

       public function set_nome($nome_){

               $this->nome = $nome_;

       }

       public function set_email($email_){

               $this->email = $email_;

       }

       public function set_assunto($assunto_){

               $this->assunto = $assunto_;

       }

       public function set_msg($msg_){

               $this->msg = $msg_;

       }

       public function set_remetente($remetente_){

               $this->remetente = $remetente_;

       }

       public function set_cod($cod_){

               $this->cod = $cod_;

       }


       public function get_cod(){

               return "Content-type: text/html; charset=".$this->cod."";

       }

       /* Corpo do email */

       public function Corpo(){

               return "<html><body><b>$this->nome</b> - $this->email <hr> $this->msg</body></html>";

       }

       /* Enviando e-mail */

       public function Envia(){

               $mail = mail($this->remetente, $this->assunto, $this->corpo, $this->cod);

               if($mail){

                       echo "E-mail enviado com sucesso!"; /* Se o e-mail for enviado */

               }
               else{

                       echo "Falha ao enviar e-mail!"; /* Se houver algum erro ao enviar o e-mail */

               }

       }

}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sim, eu fiz modificações e ficou assim, também adicionei um sistema de permitir ou não HTML no e-mail: http://forum.imasters.com.br/topic/472890-simples-classe-para-enviar-e-mails/page__view__findpost__p__1878396

Compartilhar este post


Link para o post
Compartilhar em outros sites

ainda não é o que estou falando

seria do primeiro jeito que falei

class Email{

/*
* Classe desenvolvida por Gabriel Jacinto (2012)
*/

       public $nome;
       public $email;
       public $assunto;
       public $msg;
       public $remetente;
       public $cod; /* Codificação do email (utf-8,  iso-8859-9 etc.) */

       /* Mudando dados */

       public function set_nome($nome_){

               $this->nome = $nome_;

       }

       public function set_email($email_){

               $this->email = $email_;

       }

       public function set_assunto($assunto_){

               $this->assunto = $assunto_;

       }

       public function set_msg($msg_){

               $this->msg = $msg_;

       }

       public function set_remetente($remetente_){

               $this->remetente = $remetente_;

       }

       public function set_cod($cod_){

               $this->cod = $cod_;

       }


       public function get_cod(){

               return "Content-type: text/html; charset=".$this->cod."";

       }

       /* Corpo do email */

       public function Corpo(){

               return "<html><body><b>$this->nome</b> - $this->email <hr> $this->msg</body></html>";

       }

       /* Enviando e-mail */

       public function Envia(){

               $mail = mail($this->remetente, $this->assunto, $this->corpo(), $this->cod);

               if($mail){

                       echo "E-mail enviado com sucesso!"; /* Se o e-mail for enviado */

               }
               else{

                       echo "Falha ao enviar e-mail!"; /* Se houver algum erro ao enviar o e-mail */

               }

       }

}

 

function __autoload($class){
require_once "class.$class.php";//Inclui a classe Email
}

$mail = new Email();

if($_POST['enviar']){

$mail->nome = trim($_POST['nome']);//Nome da pessoas
$mail->email = trim($_POST['email']);//Email da pessoas
$mail->assunto = trim($_POST['assunto']);//Assunto do e-mail
$mail->msg = trim($_POST['msg']);//Mensgaem do e-mail
$mail->remetente = "contato@maspoxasite.com";//Pra quem vai o email
$mail->charset = "UTF-8";//Tipo de codificação do email
$mail->html = false;//Permissão de HTML no e-mail


$mail->Envia();//Envia o e-mail

}

Compartilhar este post


Link para o post
Compartilhar em outros sites

1. Adicione configuração de cabeçalho

Opção de envio CC e BCC é algo básico.

Opção para setar o 5º parâmetro da função mail() do php

 

2. Envio de conteúdo multi-part

 

Permitir que envie email em dois formatos no mesmo corpo plain/text e html.

Isso é util para quando o cliente email do usuário nao suportar html ou estiver com html desativado., então o que será exibido é o conteúdo em txt automaticamente.

 

 

3. Anexo

arquivos em anexo

 

4. Imagens acopladas ao corpo da mensagem (difrente de arquivos anexos)

 

5. Cabeçalho

from, reply-to, to com opção para inserir o nome, exemplo

Foo bar<info@foo.bar>

 

6. Autenticação

com ssl e sem ssl

 

7. configuração de porta de envio

 

8. opção para uso do sendmail/postfix (ambiente linux)

 

9. remover o supressor de erro e utilizar error hand, triggers, etc..

 

10. cabeçalho

X-Mailer, mime-version, Content-Transfer-Encoding.

 

11. suporte multibyte

exemplo, recomendo utf-8 com base64

 

      $from_user = "=?UTF-8?B?".base64_encode($from_user)."?=";
     $subject = "=?UTF-8?B?".base64_encode($subject)."?=";

http://www.php.net/manual/fr/function.mail.php#108669

 

Isso é o mínimo que se deve pensar quando for desenhar o projeto.

 

Não dispare echo "" dentro dos métodos da classe.. crie um controle de status, exemplo

 

codigo 1: foi enviado

codigo 2: não foi enviado (algum detalhe especifico)

codigo 3: formato de email inválido

codigo 4: parâmetro X é obrigatório

codigo 5: ....

 

Dessa forma terá flexibilidade para usar a classe num sistema multi-idiomas.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Exemplo de CC e BCC

 

// To send HTML mail, the Content-type header must be set
$headers  = 'MIME-Version: 1.0' . "\r\n";
$headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";

// Additional headers
$headers .= 'To: Mary <mary@example.com>, Kelly <kelly@example.com>' . "\r\n";
$headers .= 'From: Birthday Reminder <birthday@example.com>' . "\r\n";
$headers .= 'Cc: birthdayarchive@example.com' . "\r\n";
$headers .= 'Bcc: birthdaycheck@example.com' . "\r\n";

// Mail it
mail($to, $subject, $message, $headers);

 

Para mais informações: http://php.net/manual/pt_BR/function.mail.php

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bem, agora ele indica erros, envia CC E BCC e o HTML está pela escolha da pessoa que for enviar.

class.Email.php:

<?php
class Email{

/*
* Classe desenvolvida por Gabriel Jacinto (2012)
*/

public $nome;
public $email;
public $cc;
public $bcc;
public $assunto;
public $msg;
public $anexo;
public $remetente;
public $charset; /* Codificação do email (utf-8,  iso-8859-9 etc.) */
public $html;

/* Corpo do email */

public function Corpo(){

	if($this->html == "true"){

		return "<html><body><b>".$this->nome."</b> - ".$this->email." <hr> ".$this->msg."</body></html>";

	}
	else{

		return "<html><body><b>".$this->nome."</b> - ".$this->email." <hr> ".htmlspecialchars( $this->msg )."</body></html>";

	}

}

/* Enviando e-mail */

public function Envia($to, $headers){

	$mail = @mail($to, $this->assunto, $this->Corpo(), $headers);

	if($mail){

		echo "E-mail enviado com sucesso!";

	}
	else{

	echo "Falha ao enviar e-mail!";

	}

}

}
?>

enviar.php:

<?php

function __autoload($class){
require_once "class.$class.php";//Inclui a classe Email
}

include "errors.php";

$mail = new Email();

if($_POST['enviar']){

$mail->nome = trim($_POST['nome']);//Nome da pessoas
$mail->email = trim($_POST['email']);//Email da pessoas
$mail->cc = trim($_POST['cc']);//E-mail CC
$mail->bcc = trim($_POST['bcc']);
$mail->assunto = trim($_POST['assunto']);//Assunto do e-mail
$mail->msg = trim($_POST['msg']);//Mensgaem do e-mail
$mail->remetente = "gamjj74@hotmail.com";//Pra quem vai o email
$mail->charset = "UTF-8";//Tipo de codificação do email
$mail->html = $_POST['html'];//Permissão de HTML no e-mail

/* Error */
$_CONFIG['errorHandler']['siteName'] = 'Meu site';
$_CONFIG['errorHandler']['from'] = '';
$_CONFIG['errorHandler']['fromName'] = 'Gabriel Jacinto';
$_CONFIG['errorHandler']['to'] = $mail->remetente;
$_CONFIG['errorHandler']['toName'] = 'Gabriel';
$_CONFIG['errorHandler']['cc'] = $mail->cc;
$_CONFIG['errorHandler']['bcc'] = $mail->bcc;

$headers = 'Content-type: text/html; charset=utf-8\r\n';
$headers .= 'From: ' . $_CONFIG['errorHandler']['fromName'] . ' <' . $_CONFIG['errorHandler']['from'] . '>' . "\r\n";

$headers .= 'Cc: ' . $_CONFIG['errorHandler']['cc'] . "\r\n";
$headers .= 'Bcc: ' . $_CONFIG['errorHandler']['bcc'] . "\r\n";
$headers .= 'Reply-To: ' . $_CONFIG['errorHandler']['fromName'] . ' <' . $_CONFIG['errorHandler']['from'] . '>' . "\r\n";
$headers .= 'Return-Path: ' . $_CONFIG['errorHandler']['fromName'] . ' <' . $_CONFIG['errorHandler']['from'] . '>' . "\r\n";
$headers .= 'X-Mailer: PHP/' . phpversion();

$corpo = $mail->Corpo();//Defini o corpo de e-mail

$mail->Envia($_CONFIG['errorHandler']['to'], $headers);//Envia o e-mail

}

?>

formulário:

<!doctype html>
<html>
<body>
<form method="post" action="enviar.php">
Nome: <input type="text" name="nome" required="required" /><br />
E-mail: <input type="text" name="email" required="required" /><br />
CC: <input type="text" name="cc" /><br />
BCC: <input type="text" name="bcc" /><br />
Assunto: <input type="text" name="assunto" required="required" /><br />
Mensagem: <textarea name="msg" required="required" ></textarea><br />
Contém HTML? <select name="html" required="required">
			<option selected="selected" disabled="disabled"></option>
			<option value="true">Sim</option>
               <option value="false">Não</option>
            </select>
<input type="submit" name="enviar" required="required" />
</form>
</body>
</html>

errors.php:

<?php

function manipuladorErros($errno, $errstr='', $errfile='', $errline='')
{
if (error_reporting() == 0) return;

global $_CONFIG;

// Verifica se não foi chamada por uma 'exception'
if(func_num_args() == 5) {
	$exception = null;
	list($errno, $errstr, $errfile, $errline) = func_get_args();
	//$backtrace = array_reverse(debug_backtrace());
} else {
	$exc = func_get_arg(0);
	$errno = $exc->getCode(); // Nome do erro
	$errstr = $exc->getMessage(); // Descrição do erro
	$errfile = $exc->getFile(); // Arquivo
	$errline = $exc->getLine(); // Linha
	//$backtrace = $exc->getTrace();
}
// A variável $backtrace pode ser usada para fazer um Back Trace do erro

// "Nome" de cada tipo de erro
$errorType = array (
	E_ERROR => 'ERROR',
	E_WARNING => 'WARNING',
	E_PARSE => 'PARSING ERROR',
	E_NOTICE => 'NOTICE',
	E_CORE_ERROR => 'CORE ERROR',
	E_CORE_WARNING => 'CORE WARNING',
	E_COMPILE_ERROR => 'COMPILE ERROR',
	E_COMPILE_WARNING => 'COMPILE WARNING',
	E_USER_ERROR => 'USER ERROR',
	E_USER_WARNING => 'USER WARNING',
	E_USER_NOTICE => 'USER NOTICE',
	E_STRICT => 'STRICT NOTICE',
	E_RECOVERABLE_ERROR => 'RECOVERABLE ERROR'
);

// Define o "nome" do erro atual
if (array_key_exists($errno, $errorType)) {
	$err = $errorType[$errno];
} else {
	$err = 'CAUGHT EXCEPTION';
}

// Se está ativo o LOG de erros, salva uma mensagem no log, usando o formato padrão
   if (ini_get('log_errors'))
       error_log(sprintf("PHP %s:  %s in %s on line %d", $err, $errstr, $errfile, $errline));

// Mensagem para o email
$mensagem = '';
$mensagem .= '[ ERRO NO PHP ]' . "\r\n";
$mensagem .= 'Site: ' . $_CONFIG['errorHandler']['siteName'] . "\r\n";
$mensagem .= 'Tipo de erro: ' . $err . "\r\n";
$mensagem .= 'Arquivo: ' . $errfile . "\r\n";
$mensagem .= 'Linha: ' . $errline . "\r\n";
$mensagem .= 'Descrição: ' . $errstr . "\r\n";
if (isset($_SERVER['REMOTE_ADDR'])) {
	$mensagem .= "\r\n";
	$mensagem .= '[ DADOS DO VISITANTE ]' . "\r\n";
	$mensagem .= 'IP: ' . $_SERVER['REMOTE_ADDR'] . "\r\n";
	$mensagem .= 'User Agent: ' . $_SERVER['HTTP_USER_AGENT'] . "\r\n";
}
if (isset($_SERVER['REQUEST_URI'])) {
	$url = (preg_match('/HTTPS/i', $_SERVER["SERVER_PROTOCOL"])) ? 'https' : 'http';
	$url .= '://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
	$mensagem .= "\r\n";
	$mensagem .= 'URL: ' . $url . "\r\n";
}
if (isset($_SERVER['HTTP_REFERER'])) {
	$mensagem .= 'Referer: ' . $_SERVER['HTTP_REFERER'] . "\r\n";
}
$mensagem .= "\r\n";
$mensagem .= 'Data: ' . date('d/m/Y H:i:s'). "\r\n";

// Mensagem simples
$mensagemSimples .= $err . ': ' . $errstr . ' no arquivo ' . $errfile . ' (Linha ' . $errline . ')';


// Começa a definição do e-mail
$assunto = '[' . $err . '] ' . $_CONFIG['errorHandler']['siteName'] . ' - ' . date('d/m/y H:i:s');

// Faz um envio simples
$enviado = @mail($_CONFIG['errorHandler']['to'], $assunto, $mensagem, $headers);

// Verifica se foi possível enviar o email, caso contrário exibe-o na tela
if ($enviado)
	return true;
else
	echo $mensagemSimples;
}

// Define o seu novo manipulador de erros
set_error_handler('manipuladorErros');


?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

você não precisa disso:

 

public $html;

       /* Corpo do email */

       public function Corpo(){

               if($this->html == "true"){

                       return "<html><body><b>".$this->nome."</b> - ".$this->email." <hr> ".$this->msg."</body></html>";

               }
               else{

                       return "<html><body><b>".$this->nome."</b> - ".$this->email." <hr> ".htmlspecialchars( $this->msg )."</body></html>";

               }

       }

 

o parâmetro html não vai ser usado em toda classe apenas na função corpo, então passe como parâmetro nela e defina um padrão

 

algo assim

 

 /* Corpo do email */

       public function Corpo($html = "true"){

               if($this->html == "true"){

                       return "<html><body><b>".$this->nome."</b> - ".$this->email." <hr> ".$this->msg."</body></html>";

               }
               else{

                       return "<html><body><b>".$this->nome."</b> - ".$this->email." <hr> ".htmlspecialchars( $this->msg )."</body></html>";

               }

       }

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.