Invio Mail con Javascript

franciccio

Nuovo Utente
10 Apr 2017
18
0
1
42
Salve a tutti,
sto facendo un sito e mi sto servendo della libreria bootstrap per la parte di impaginazione.
Il sito è veramente molto statico e non ha particolari funzioni(1 sola pagina html, il menù lo scorro con le funzionalità di bootstrap senza cambiare pagina).
Ho creato direttamente sulla home un form di contatti molto semplice (Nome,mail e testo con due bottoni).
Vorrei gentilmente sapere da voi come faccio per far si che alla pressione del tasto submit venga inviata una mail coni dati di contatto ad una mail prestabilita.
Non vorrei usare php perchè essendo su un'unica pagina no saprei come farlo, evorrei restare sulla struttura del menu di bootstrap.

Chiedo scusa anticipatamente se la domanda è idiota

Grazie
 
Ciao, non puoi inviare mail con javascript, devi utilizzare un linguaggio lato server come php.
Puoi al massimo far aprire il client di posta dell'utente con mailto.
 
  • Like
Reactions: franciccio
Capito,
quindi sul tasto submit richiamare una pagina php che invia la mail.
Avresti qualche script a riguardo?
 
Codice:
<input type="button" value="mail" onclick="location.href = 'mailto:[email protected]'"/>
edit
scusa ho letto male
puoi utilizzare la classe phpmailer
 
Ultima modifica:
ogii sono proprio fuso
ecco un esempio con ajax
index.php
PHP:
<?php
$isAjax = isset($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) === 'xmlhttprequest';

if ($isAjax) {
    echo "invio mail";
    die();
}

?>
<script src="http://code.jquery.com/jquery-latest.min.js" type="text/javascript"></script>
<script>
    function sendMail() {
        $.post("index.php", $("#form").serialize(), function (response) {
            $("#response").html(response);
        });
    }
</script>
<form>
    email <input type="text" name="email"/>
    <input type="button" value="mail" onclick="sendMail()"/>
    <div id="response"></div>
</form>
 
Scusami non riesco a capire dove devo posizionare questo codice.
Ho scaricato phpmailer ma nn riesco a configurarlo, quando premo il bottone non succede niente, forse ho sbagliato a configurarlo.
Altra domanda: php mailer può funzionare se non sono su un server locale? quindi apro la pagina html semplicemente cl browser?
Grazie
 
il codice è un sempio va da solo. Crea una pagina php, chiamala sendmail.php e incollaci il codice
PHP:
<?php
$isAjax = isset($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) === 'xmlhttprequest';
if ($isAjax) {
    if (!filter_var($_REQUEST['email'], FILTER_VALIDATE_EMAIL)) {
        die("Email non valida!");
    }
    $mittente = 'From: criric <[email protected]>';
    $titolo = "Prova invio mail";
    $email = $_REQUEST['email'];
    $messaggio = "prova mail";
    if (mail($email, $titolo, $messaggio, $mittente)) {
        die("mail inviata");
    } else {
        die("errore invio mail");
    }
}
?>
<html>
    <head>
        <script src="http://code.jquery.com/jquery-latest.min.js" type="text/javascript"></script>
        <script>
            function sendMail() {
                $.post("sendmail.php", $("#form").serialize(), function (response) {
                    $("#response").html(response);
                });
            }
        </script>
    </head>
    <body>
        <form id="form">
            email <input type="text" name="email"/>
            <input type="button" value="invia" onclick="sendMail()"/>
            <div id="response"></div>
        </form>
    </body>
</html>
ho utilizzato al funzione mail per provare. Puoi anche separare il codice php da quello html basta che poi indichi la pagina php alla funzione post(). In locale non funziona deve essere appoggiata su un server online.
Per php mailer posta nella sezione di php, non lo conosco bene
 
Sto facedo con phpmailer
La form va a richiamare phpmailer-fe.php
Ma cosa va configurato ?
non devo inserire i dati:
-a chi spedire la mail
-smtp
ecc
ecc

Ho anche il file cass.phpmailer.php, questo va configurato?
 
ttengo questo errore che non riesco a risolvere:

Fatal error: Class 'SMTP' not found in C:\xampp\htdocs\sito_avis\class.phpmailer.php on line 1520

Icodice
require 'PHPMailerAutoload.php';
require 'class.phpmailer.php';
/**
* This example shows how to handle a simple contact form.
*/

$msg = '';
//Don't run this unless we're handling a form submission
if (array_key_exists('email', $_POST)) {
date_default_timezone_set('Etc/UTC');

echo "Hello World 2";

//Create a new PHPMailer instance
$mail = new PHPMailer;
 
ciao
intanto ti conviene mettere la classe in sua apposita cartella (generalmete chiamata phpmailler) dentro tale cartella una volta scaricata la clase verifica che ci siano class.phpmailler.php e class.smtp.php (la class.smtp non va inclusa ci pensa phpmailler a richiamarla se configurata per l'smtp) poi nella pagina di invio, ti schematizzo:
PHP:
<?php
//....leggi e VERIFICHI i vari $_POST che vengono dal form
require "phpmailler/class.phpmailer.php";//richiamo la classe, attento ai percorsi
$email = new PHPmailer();
//e la instanzio, esmpio
$email->SetLanguage('it','language/'); //messo italiano, ma la scelta è vasta
//per inviare da locale o SMTP*** INIZIO*************************************************************
//$email->IsSMTP();  // send via SMTP
//$email->Host = "smtp.tuo_ost_di_posta"; // SMTP servers esempio alice o tim o...
//$email->SMTPAuth = true; // turn on SMTP authentication
//$email->Username = "tuo_username";  // SMTP username
//$email->Password = "tua_password"; // SMTP password
//per inviare da locale o SMTP *** FINE***************************************************************
$email->IsHTML(true); // invio l'email in formato HTML se solo txt lo commenti
$email->FromName= $mittente_nome;//se serve
$email->Subject=$oggetto;//subjet dell'email
$email->From=$mittente_email;//indirizzao email del mittente
$email->AddAddress($destinatario);//a chi inviare es [email protected]
$email->AddReplyTo($mittente_email,"");//per usare il rispondi
$email->Body=$invio_il_testo;//corpo dell'email
//fine preparazione del corpo dell'email e allegato
//invio l'email
if(!$email->Send()){ //errore di trasmissione
    echo "errore di trasmissione";
}else{ //invio avvenuto
      echo "email inviata";
}//fine if-else invio
//...
?>
tieni presente che:
- se invii da locale devi per forza usare l'smtp con i dati del tuo gestore di posta
- in remoto alcuni provider non ammettono l'smtp di altri gestori quindi non serve (es io su aruba non l'ho messo)

inoltre la classe risolve molti problemi che si hanno con la funzione php mail() ed è molto comoda se devi inviare allegati
 
Ultima modifica:
Ho adattato il tuo codice:
ho solo 3 campi, nome,mail e messaggio.
Questo file php lo metto poi nella action della form html?
grazie


PHP:
<?php
//....leggi e VERIFICHI i vari $_POST che vengono dal form
$nome = ($_POST['name']);
$emailcontatto = ($_POST['email']);
$testo = ($_POST['message']);
require "phpmailler/class.phpmailer.php";//richiamo la classe, attento ai percorsi
$email = new PHPmailer();
//e la instanzio, esmpio
$email->SetLanguage('it','language/'); //messo italiano, ma la scelta è vasta
//per inviare da locale o SMTP*** INIZIO*************************************************************
$email->IsSMTP();  // send via SMTP
$email->Host = "smtp.gmail.com"; // SMTP servers esempio alice o tim o...
$email->SMTPAuth = true; // turn on SMTP authentication
$email->Username = "la mia email";  // SMTP username
//$email->Password = "la mia password"; // SMTP password
//per inviare da locale o SMTP *** FINE***************************************************************
$email->IsHTML(true); // invio l'email in formato HTML se solo txt lo commenti
//$email->FromName= $mittente_nome;//se serve
$email->Subject = "Contatto da sito web";//subjet dell'email
$email->From=$emailcontatto;//indirizzo email del mittente
$email->AddAddress("[email protected]");//a chi inviare es [email protected]
$email->AddReplyTo($emailcontatto,"");//per usare il rispondi
$email->Body=$testo;//corpo dell'email
//fine preparazione del corpo dell'email e allegato
//invio l'email
if(!$email->Send()){ //errore di trasmissione
    echo "errore di trasmissione";
}else{ //invio avvenuto
      echo "email inviata";
}//fine if-else invio
//...
?>
 
Ricevo questo errore:

Warning: require(phpmailler/class.phpmailer.php): failed to open stream: No such file or directory in C:\xampp\htdocs\sito_avis\phpmailler\phpmailler.php on line 6

Fatal error: require(): Failed opening required 'phpmailler/class.phpmailer.php' (include_path='C:\xampp\php\PEAR') in C:\xampp\htdocs\sito_avis\phpmailler\phpmailler.php on line 6
 
ciao
probabilmente è un problema di percorso, in che cartella è messo il file che richiama la classe? hai verificato che nella cartella phpmailler ci sia la classe?
poi sei sicuro che si chiami phpmailler.php? il file dovrebbe chiamarsi class.phpmailer.php
 
Ho rinominato la cartella:
+phpmailer
-class.phpmailer.php
-class.smtp.php
-phpmailer.php

la form html richiama il seguente file:

action="phpmailer\phpmailer.php"

Denro il file phpmailer.php ho fatto la require:

require "phpmailer\class.phpmailer.php";

Bho mi sembra corretto
 
ciao
probabilmente è un problema di percorso, in che cartella è messo il file che richiama la classe? hai verificato che nella cartella phpmailler ci sia la classe?
poi sei sicuro che si chiami phpmailler.php? il file dovrebbe chiamarsi class.phpmailer.php


Ho fatto un test e ho tirato fuori tutti i file e messi al primo livello, ora sembra che li legga, quindi come dicevi era un problem di percorso.
Attualment ottengo questo errore:


Deprecated: Function eregi() is deprecated in C:\xampp\htdocs\sito_avis\phpmailer\class.phpmailer.php on line 594
errore di trasmissione

Ho sostituito la funzione con preg_match ma no ancora l'errore

Warning: preg_match(): No ending delimiter '^' found in C:\xampp\htdocs\sito_avis\phpmailer\class.phpmailer.php on line 594
errore di trasmissione

Il file l'ho scaricato da Internet
 
Ultima modifica:
ciao
intanto verificha che la class.phpmailer.php sia "Version: 2.0.0 rc3" o maggiore
poi non vedo nella classe dove sia eregi(),
eventualmete posta come era scritto l'eregi e come l'hai modificato
 
Version: 2.0.4

PHP:
while($index < count($hosts) && $connection == false) {
      $hostinfo = array();
      if(eregi('(.+):([0-9]+)$', $hosts[$index], $hostinfo)) {
        $host = $hostinfo[1];
        $port = $hostinfo[2];
      } else {
        $host = $hosts[$index];
        $port = $this->Port;
      }
modificato in:

PHP:
while($index < count($hosts) && $connection == false) {
      $hostinfo = array();
      if(preg_match('(.+):([0-9]+)$', $hosts[$index], $hostinfo)) {
        $host = $hostinfo[1];
        $port = $hostinfo[2];
      } else {
        $host = $hosts[$index];
        $port = $this->Port;
      }
 
Ultima modifica di un moderatore:
Ho scaricato una versione aggiornata del class.phpmailer.php e in effetti eregi() non c'è.
Ho sostituito il file e si spacca qui:

Fatal error: Class 'SMTP' not found in C:\xampp\htdocs\sito_avis\class.phpmailer.php on line 1520

PHP:
public function getSMTPInstance()
    {
        if (!is_object($this->smtp)) {
            $this->smtp = new SMTP;
        }
        return $this->smtp;
    }
 
Ultima modifica di un moderatore:
Ciao
per risolvere il problema ho aggiunto al phpmailer.php la seguente require:

require "PHPMailerAutoload.php";

Attualmente ottengo l'errore : "errore di trasmissione" almeno vedo che sta girando.

Ho qualche dubbio sulla configurazione dell'smtp:

PHP:
$email->Host = "smtp.gmail.com";
$email->SMTPAuth = true;
$email->Username = "[email protected]";
$email->Password = "Password indirizzo mail";

GMAIL mi ha madato una mail nel quale mi chiedeva di autorizzare l'accesso esterno che ho autorizzato.

Ovviamente sto facendo dei tes in locale, successivamente inserirò l'host del provider

Sai come posso risolvere per poter testare l'invio?

Grazie per l'aiuto
 
Ultima modifica di un moderatore:

Discussioni simili