Sending email with AngularJS and PHP

I have created an app in AngularJS and has a form to send email and send emails using a PHP file on the server.

Here's my Controller.js part in AngularJS:

$scope.feedbacksubmit= function (){  

  var name1 = document.getElementById("name").value;
  var email1 = document.getElementById("email").value;
  var message1 = document.getElementById("message").value;


    $http({
    url: "http://boost.meximas.com/mobile/email.php", 
    method: "POST",
    data: { name: name1, email: email1, message:message1 }

    }).success(function(data, status, headers, config) {
   // this callback will be called asynchronously
   // when the response is available

    if(status == 200) {

      var return_data = data;

        if(return_data != 0){


          $scope.hide();
          //$scope.closeFeedback();
        }else{

          $scope.showEmailError();
        }
      }
    }).
  error(function(data, status, headers, config) {
   // called asynchronously if an error occurs
   // or server returns response with an error status.
   console.log(status);
   $scope.showAlertNetwork();
   $scope.hide();

    });

  };

      

Here's my PHP code:

<?php 

    $array = json_decode(file_get_contents('php://input'), true);
    $name = $array['name'];
    $email = $array['email'];
    $message = $array['message'];

    if (($name=="")||($email=="")||($message=="")) 
        { 
        printf("0"); 
        } 
    else{         
        $from="From: $name<$email>\r\nReturn-path: $email"; 
        $subject="Message sent using your contact form"; 
        mail("mygmail@gmail.com", $subject, $message, $from); 

        } 

?> 

      

The problem occurs when I fill out the contact form and click the submit button. I receive $scope.showEmailError();

. But I get the message with no problem.

And if I try to click the button without filling out the form, I still get the same message $scope.showEmailError();

.

+3


source to share


2 answers


Why aren't you using model values ​​from input? It looks like you are trying to use AngularJS, but you are still thinking with different frameworks in mind.

In the following example, I am sending a model to a php script, if NAME is not filled, PHP returns a 404 error and is processed in AngularJS $http

through a handler .error

. You don't need to add so much extra logic to success to deal with it.

http://plnkr.co/edit/sw9RRXb3kdEWXszJdwX3?p=preview

Html

<input type="text" ng-model="formData.name" placeholder="name">
<input type="text" ng-model="formData.email" placeholder="email">
<input type="text" ng-model="formData.message" placeholder="message">

      



Javascript

  $scope.formData = {
    'name': '',
    'email': '',
    'message': ''
  };
  $scope.postData = function () {
    $http.post('http://edeen.pl/form.php', $scope.formData)
    .success(
      function(data){
        $scope.response = data.replace(/\ /g, '&nbsp;&nbsp;').replace(/\n/g, '<br/>') //format response
      })
    .error(
      function(data){
        $scope.response = data
      })
  }

      

PHP

$input = json_decode(file_get_contents('php://input'));

if($input->name === ''){
  header("HTTP/1.0 404 Not Found");
  echo "Something went terribly wrong, missing name maybe?";
  return;
}

header('Content-Type: application/json');
var_dump($input);

      

+1


source


    <?php

    $data = json_decode(file_get_contents("php://input"),true);

    $name = $data->name;
    $email = $data->email;
    $sujet = $data->sujet;
    $contenu = $data->contenu;

   if($name && $email && $sujet && $contenu){

            $destinataire = 'bercybilingualschool@gmail.com';
            // Pour les champs $expediteur / $copie / $destinataire, séparer par une virgule s'il y a plusieurs adresses
            $expediteur = $email;
            $copie = 'sss17@gmail.com';
            $copie_cachee = 'xxx@xxx.xxx';
            $objet = $sujet; // Objet du message
            $headers  = 'MIME-Version: 1.0' . "\n"; // Version MIME
            $headers .= 'Content-type: text/html; charset=ISO-8859-1'."\n"; // l'en-tete Content-type pour le format HTML
            $headers .= 'Reply-To: '.$expediteur."\n"; // Mail de reponse
            $headers .= 'From: '.$name.'<'.$name.'>'."\n"; // Expediteur
            $headers .= 'Delivered-to: '.$destinataire."\n"; // Destinataire
            $headers .= 'Cc: '.$copie."\n"; // Copie Cc
            $headers .= 'Bcc: '.$copie_cachee."\n\n"; // Copie cachée Bcc
            $message = '<div style="width: 100%; text-align: justify; font-weight: bold">hello</div>';

            mail($destinataire, $objet, $message, $headers);
   }else{

    }

?>

      



0


source







All Articles