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

PHP - Enviar Email

Boa tarde agradeceria ajuda. Estou tentando enviar o email logo após o cadastramento do usuário. Este email contém o login e a senha que o usuário foi cadastrado para que ele possa fazer seu login, mas não estou conseguindo sucesso. Eu coloquei o codigo do envio de email no arquivo adiciona-casal para que logo após o retorno do cadastro eu consiga fazer o envio, mas nada. Poderiam corrigir onde estou errando?

segue arquivo adiciona-casal.php onde envio e recebo os dados e tento enviar o email para o usuário:

<?php require_once ("conecta.php");?>
<?php require_once ("noivosDAO.php");?>
<?php require_once ("noivos.php");?>

<?php
$noivo = new Noivo();
$noivo->setNome1($_POST["nome1"]) ;
$noivo->setSobrenome1($_POST["sobrenome1"]);
$noivo->setEmail($_POST["email"]);
$noivo->setNome2($_POST["nome2"]);
$noivo->setSobrenome2($_POST["sobrenome2"]);
$noivo->setTelefone($_POST["telefone"]);
$noivo->setRua($_POST["rua"]);
$noivo->setNumero($_POST["numero"]);
$noivo->setCep($_POST["cep"]);
$noivo->setCidade($_POST["cidade"]);
$noivo->setSenha();
$nome_imagem = $noivo->setFoto( $_FILES["foto"]);

20  $dao = new noivosDAO($conexao);
21  if ($dao->insereNoivos($noivo, $nome_imagem, $email, $senha)) {
22     // Mail it
23 $email = $_POST["email"];
24 $senha = $_POST["senha"];
25 require_once("PHPMailerAutoload.php");

$mail = new PHPMailer();

$mail->isSMTP();
$mail->Host = 'smtp.uni5.net';
$mail->Port = 587;
$mail->SMTPSecure = 'tls';
$mail->SMTPAuth = true;
$mail->Username = "xxxxxxxxxxs@xxxxxxxxxxxx.com";
$mail->Password = "xxxxxxxx";
$mail->setFrom("xxxxxxxxx", "xxxxxxx");
$mail->addAddress("<?=$email?>");
$mail->Subject = "Contato site xxxxxxxx";
$mail->msgHTML("<html>
<head>
  <title>Registro no Site </title>
</head>
<body>
  <p>Obrigado por se registrar em nosso site, segue abaixo seu login e senha para acesso:</p>
  <table>
    <tr>
     <p> Login: <?=$email;?></p>
    </tr>
    <tr>
      <p> Senha: <?=$senha;?></p>
    </tr>
    <tr>
      <p>Link para acesso: <a href: localhost/casamento/login.php</a></p>
    </tr>
  </table>
</body>
</html>");
var_dump($mail); exit;
?>
<!--<script language="JavaScript"> 
window.location="escolha-noivos.php"; 
</script>
            <php
             }else{
               $msg = mysqli_error($conexao);
               echo ($msg);
                ?>

            <p class="text-danger">O Casal <?= $nome1; ?> não foi adicionado, por favor volte a pagina de cadastro e verifique o erro.</p>
            <a href="cadastro-noivos.php" button type="button" class="btn btn-info btn-fill btn-l">Voltar <i class="fa fa-chevron-right"></i></button></a>
           <?php
          }
?>-->

Segue o erro que retorna:

Notice: Undefined variable: email in C:\Bitnami\wampstack-5.6.19-0\apache2\htdocs\casamento\adiciona-casal.php on line 21

Notice: Undefined variable: senha in C:\Bitnami\wampstack-5.6.19-0\apache2\htdocs\casamento\adiciona-casal.php on line 21

<--esta é a parte do cadastro que está ok-->
insert into noivos (nome1, sobrenome1, email, nome2, sobrenome2, telefone , rua, numero, cep, cidade, senha, foto) values ('Sergio', 'sdfasdf', 'superkovalev@gmail.com', 'Marilú','sdfasdf', 1533632222, 'R. Rosalina Gonçalves', '255', '18550-000', 'Boituva', 'xMZD972R', '4e450bf55c64de8e6f7b163b4fb31497.jpeg')<--fim do cadastro-->
<--inicio do mailer-->
object(PHPMailer)#4 (75) { ["Version"]=> string(6) "5.2.14" ["Priority"]=> NULL ["CharSet"]=> string(10) "iso-8859-1" ["ContentType"]=> string(9) "text/html" ["Encoding"]=> string(4) "8bit" ["ErrorInfo"]=> string(64) "Invalid address: (addAnAddress to): " ["From"]=> string(42) "xxxxxxxxxx" ["FromName"]=> string(38) "xxxxxx" ["Sender"]=> string(42) "xxxxxxxxxxxx" ["ReturnPath"]=> string(0) "" ["Subject"]=> string(54) "xxxxxxxxxxxxxx" ["Body"]=> string(502) "
Obrigado por se registrar em nosso site, segue abaixo seu login e senha para acesso:

Login:
Senha:
Link para acesso:

" ["AltBody"]=> string(174) "Obrigado por se registrar em nosso site, segue abaixo seu login e senha para acesso: Login: Senha: Link para acesso:" ["Ical"]=> string(0) "" ["MIMEBody":protected]=> string(0) "
" ["MIMEHeader":protected]=> string(0) "
" ["mailHeader":protected]=> string(0) "
" ["WordWrap"]=> int(0) ["Mailer"]=> string(4) "smtp" ["Sendmail"]=> string(18) "/usr/sbin/sendmail" ["UseSendmailOptions"]=> bool(true) ["PluginDir"]=> string(0) "
" ["ConfirmReadingTo"]=> string(0) "
" ["Hostname"]=> string(0) "
" ["MessageID"]=> string(0) "
" ["MessageDate"]=> string(0) "
" ["Host"]=> string(13) "smtp.uni5.net" ["Port"]=> int(587) ["Helo"]=> string(0) "
" ["SMTPSecure"]=> string(3) "tls" ["SMTPAutoTLS"]=> bool(true) ["SMTPAuth"]=> bool(true) ["SMTPOptions"]=> array(0) { } ["Username"]=> string(42) "xxxxxxxxxxxxx" ["Password"]=> string(8) "xxxxxxxx" ["AuthType"]=> string(0) "
" ["Realm"]=> string(0) "
" ["Workstation"]=> string(0) "
" ["Timeout"]=> int(300) ["SMTPDebug"]=> int(0) ["Debugoutput"]=> string(4) "echo" ["SMTPKeepAlive"]=> bool(false) ["SingleTo"]=> bool(false) ["SingleToArray"]=> array(0) { } ["do_verp"]=> bool(false) ["AllowEmpty"]=> bool(false) ["LE"]=> string(1) " 
" ["DKIM_selector"]=> string(0) "
" ["DKIM_identity"]=> string(0) "
" ["DKIM_passphrase"]=> string(0) "
" ["DKIM_domain"]=> string(0) "
" ["DKIM_private"]=> string(0) "
" ["action_function"]=> string(0) "
" ["XMailer"]=> string(0) "" ["smtp":protected]=> NULL ["to":protected]=> array(0) { } ["cc":protected]=> array(0) { } ["bcc":protected]=> array(0) { } ["ReplyTo":protected]=> array(0) { } ["all_recipients":protected]=> array(0) { } ["RecipientsQueue":protected]=> array(0) { } ["ReplyToQueue":protected]=> array(0) { } ["attachment":protected]=> array(0) { } ["CustomHeader":protected]=> array(0) { } ["lastMessageID":protected]=> string(0) "" ["message_type":protected]=> string(0) "" ["boundary":protected]=> array(0) { } ["language":protected]=> array(19) { ["authenticate"]=> string(35) "SMTP Error: Could not authenticate." ["connect_host"]=> string(43) "SMTP Error: Could not connect to SMTP host." ["data_not_accepted"]=> string(30) "SMTP Error: data not accepted." ["empty_message"]=> string(18) "Message body empty" ["encoding"]=> string(18) "Unknown encoding: " ["execute"]=> string(19) "Could not execute: " ["file_access"]=> string(23) "Could not access file: " ["file_open"]=> string(33) "File Error: Could not open file: " ["from_failed"]=> string(35) 
"The following From address failed: " ["instantiate"]=> string(36) "Could not instantiate mail function." ["invalid_address"]=> string(17) "Invalid address: " ["mailer_not_supported"]=> string(25) " mailer is not supported." ["provide_address"]=> string(54) "You must provide at least one recipient email address." ["recipients_failed"]=> string(45) "SMTP Error: The following recipients failed: " ["signing"]=> string(15) "Signing Error: " ["smtp_connect_failed"]=> string(22) "SMTP connect() failed." ["smtp_error"]=> string(19) "SMTP server error: " ["variable_set"]=> string(30) "Cannot set or reset variable: " ["extension_missing"]=> string(19) "Extension missing: " } ["error_count":protected]=> int(1) ["sign_cert_file":protected]=> string(0) "" ["sign_key_file":protected]=> string(0) "" ["sign_extracerts_file":protected]=> string(0) "" ["sign_key_pass":protected]=> string(0) "" ["exceptions":protected]=> bool(false) ["uniqueid":protected]=> string(0) "
" }
9 respostas
Notice: Undefined variable: email in C:\Bitnami\wampstack-5.6.19-0\apache2\htdocs\casamento\adiciona-casal.php on line 21

Notice: Undefined variable: senha in C:\Bitnami\wampstack-5.6.19-0\apache2\htdocs\casamento\adiciona-casal.php on line 21

Bom, ele está dizendo que as variável email e senha não estão definidas... Você precisa verificar se os parâmetros estão chegando.

Oi Alberto não estão chegando e estou declarando assim: Onde está o erro?

20  $dao = new noivosDAO($conexao);
21  if ($dao->insereNoivos($noivo, $nome_imagem, $email, $senha)) {
22     // Mail it
23 $email = $_POST["email"];
24 $senha = $_POST["senha"];

no formulario ou link que ta chamando a página.

Seria a noivosDAO retornando a query?

<?php
class NoivosDAO
{
    private $conexao;
    function __construct($conexao){
        $this->conexao = $conexao;
    }

    function insereNoivos ($noivos, $nome_imagem) {

  $query = "insert into noivos (nome1, sobrenome1, email, nome2, sobrenome2,
              telefone , rua, numero, cep, cidade, senha, foto) values ('{$noivos->getNome1()}', '{$noivos->getSobrenome1()}', '{$noivos->getEmail()}', '{$noivos->getNome2()}','{$noivos->getSobrenome2()}', {$noivos->getTelefone()}, '{$noivos->getRua()}', '{$noivos->getNumero()}', '{$noivos->getCep()}', '{$noivos->getCidade()}', '{$noivos->getSenha()}', '" .$nome_imagem. "')";

      echo ($query); 

  return mysqli_query($this->conexao, $query);
}

acho que não.. é algum formulário ou link que aponta para essa página.

Oi Alberto, obrigado. A página que aponta é a de cadastro e os campos email e senha são estes:

 <!--   Big container   -->
        <div class="container">
            <div class="row">
                <div class="col-sm-8 col-sm-offset-2">
                    <!--      Wizard container        -->
                    <div class="wizard-container">
                        <div class="card wizard-card" data-color="purple" id="wizardProfile">
      <form action="adiciona-casal.php" method="post" enctype="multipart/form-data">

<div class="input-group">
                                                    <span class="input-group-addon">
                                                        <i class="material-icons">email</i>
                                                    </span>
                                                    <div class="form-group label-floating">
                                                        <label class="control-label">Email <small>(obrigatorio)</small></label>
                                                        <input name="email" type="email" class="form-control">
                                                    </div>
                                                </div>

<div>
<input type="hidden" name="senha" value="senhabase">

                                        </div>

tire isso => enctype="multipart/form-data"

oi Alberto não posso porque eu preciso do enctype para enviar a foto na hora do cadastro

Meu problema acredito que seja que quando utilizo o php mailer para enviar os dados de contato do site, a gente tem que enviar os dados para a pagina de envia-mail para enviar para nosso proprio email isso eu consigo fazer sem problemas.

Mas nesse caso, eu acredito que o que eu preciso é puxar do banco de dados a senha e o email do usuário para poder enviar para ele (usuário) o login e senha que já estão definidos no BD.

è isto que estou tentando fazer sem sucesso

você pode me ajudar?

solução!

Pessoal segue a maneira de se fazer um envio de confirmação de cadastro pelo PHPMailer: este exemplo é utilizando Gmail. Mas se quiser enviar pelo seu servidor de email é só trocar o HOST Este envio deve estar no seu arquivo de adiciona (onde envia dados para o BD, no meu caso adiciona-noivos.php) Este exemplo está configurado para rodar no localhost como segue:

<?php require_once 'conecta.php';?>
<?php require_once 'noivosDAO.php';?>
<?php require_once 'noivos.php';?>
<?php require_once 'Exception.php'; ?>
<?php require_once 'PHPMailer.php'; ?>
<?php require_once 'SMTP.php'; ?>

<?php
$noivo = new Noivo();
$noivo->setNome1($_POST["nome1"]) ;
$noivo->setSobrenome1($_POST["sobrenome1"]);
$noivo->setEmail($_POST["email"]);
$noivo->setNome2($_POST["nome2"]);
$noivo->setSobrenome2($_POST["sobrenome2"]);
$noivo->setTelefone($_POST["telefone"]);
$noivo->setRua($_POST["rua"]);
$noivo->setNumero($_POST["numero"]);
$noivo->setCep($_POST["cep"]);
$noivo->setCidade($_POST["cidade"]);
$noivo->setSenha();
$nome_imagem = $noivo->setFoto( $_FILES["foto"]);

 $dao = new noivosDAO($conexao);
if ($dao->insereNoivos($noivo, $nome_imagem)) {
 // Enviar Email
$mail = new PHPMailer\PHPMailer\PHPMailer();
$mail->IsSMTP(); // enable SMTP
$mail->SMTPDebug = 2;
$mail->Host = 'smtp.gmail.com';
$mail->Port = 587;
$mail->SMTPSecure = 'tls';
$mail->SMTPAuth = true;
//Este é o email que envia o conteúdo
$mail->Username = "xxxxxxxxxxs@gmail.com";
$mail->Password = "xxxxxxxx";
//Aqui você preenche com os dados do email que envia o conteúdo e no segundo campo o nome de quem está enviando.
$mail->setFrom("xxxx@gmail.com", "xxxxxxx");
//Este é o email alternativo do site
$mail->addReplyTo('xxxxxxxxxxxx@yahoo.com.br', 'xxxxxxxxxxx');
$mail->addAddress($noivo->getEmail(), $noivo->getNome());
$mail->Subject = "Contato site xxxxxxxx";
$mail->msgHTML("<html>
<head>
  <title>Registro no Site </title>
</head>
<body>
  <p>Obrigado por se registrar em nosso site, segue abaixo seu login e senha para acesso:</p>
  <table>
    <tr>
     <p> Login: ".$noivo->getEmail()."</p>
    </tr>
    <tr>
      <p> Senha: ".$noivo->getSenha()."</p>
    </tr>
    <tr>
      <p>Link para acesso: localhost/casamento/login.php</p>
    </tr>
  </table>
</body>
</html>");
//Attach an image file
$mail->addAttachment('img/blood.jpg');
//send the message, check for errors
if (!$mail->send()) {
    echo "Mailer Error: " . $mail->ErrorInfo;
} else {
    echo "Mensagem Enviada!";
    //Section 2: IMAP
    //Uncomment these to save your message in the 'Sent Mail' folder.
    #if (save_mail($mail)) {
    #    echo "Message saved!";
    #}
}
//Section 2: IMAP
//IMAP commands requires the PHP IMAP Extension, found at: https://php.net/manual/en/imap.setup.php
//Function to call which uses the PHP imap_*() functions to save messages: https://php.net/manual/en/book.imap.php
//You can use imap_getmailboxes($imapStream, '/imap/ssl') to get a list of available folders or labels, this can
//be useful if you are trying to get this working on a non-Gmail IMAP server.
function save_mail($mail)
{
    //You can change 'Sent Mail' to any other folder or tag
    $path = "{imap.gmail.com:993/imap/ssl}[Gmail]/Sent Mail";
    //Tell your server to open an IMAP connection using the same username and password as you used for SMTP
    $imapStream = imap_open($path, $mail->Username, $mail->Password);
    $result = imap_append($imapStream, $path, $mail->getSentMIMEMessage());
    imap_close($imapStream);
    return $result;
}