Invio Mail con Javascript

franciccio

Nuovo Utente
10 Apr 2017
18
0
1
41
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
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
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

franciccio

Nuovo Utente
10 Apr 2017
18
0
1
41
Capito,
quindi sul tasto submit richiamare una pagina php che invia la mail.
Avresti qualche script a riguardo?
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
Codice:
<input type="button" value="mail" onclick="location.href = 'mailto:[email protected]'"/>
edit
scusa ho letto male
puoi utilizzare la classe phpmailer
 
Ultima modifica:

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
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>
 

franciccio

Nuovo Utente
10 Apr 2017
18
0
1
41
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
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
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
 

franciccio

Nuovo Utente
10 Apr 2017
18
0
1
41
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?
 

franciccio

Nuovo Utente
10 Apr 2017
18
0
1
41
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;
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
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:

franciccio

Nuovo Utente
10 Apr 2017
18
0
1
41
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
//...
?>
 

franciccio

Nuovo Utente
10 Apr 2017
18
0
1
41
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
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
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
 

franciccio

Nuovo Utente
10 Apr 2017
18
0
1
41
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
 

franciccio

Nuovo Utente
10 Apr 2017
18
0
1
41
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:

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
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
 

franciccio

Nuovo Utente
10 Apr 2017
18
0
1
41
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:

franciccio

Nuovo Utente
10 Apr 2017
18
0
1
41
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:

franciccio

Nuovo Utente
10 Apr 2017
18
0
1
41
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
Autore Titolo Forum Risposte Data
R Invio mail con allegati multipli PHP 0
R Invio mail con allegati da directory PHP 1
G Invio mail con php da dati prelevati da un database PHP 9
A [PHP] Problema invio mail con funzione mail() PHP 3
A [PHP] RISOLTO Invio Mail con Tabella PHP 2
G Invio Mail con PHPMailer, problemi SMTP PHP 7
Z Limite invio newsletter con PHP - mail() PHP 4
P invio mail da form con dati php PHP 7
S Form invio mail html, con invio tramite file denominato invio.php PHP 8
asevenx link cliccabile che non funziona con invio mail PHP 1
M Invio mail con destinatari da mysql con inserimento di nome e cognome PHP 6
I [Risolto] Problemi invio e-mail con CDOSYS con domini @live.it Classic ASP 4
L Form con invio mail PHP 1
P Invio multiplo mail con phpmailer PHP 5
E Form invio e-mail con allegato PHP 51
E Form invio e-mail con allegato PHP 0
M Invio e mail al destinatario con invio di una copia al mittente PHP 35
A invio mail con php PHP 6
N Form invio Mail con Allegato PHP 2
C problema invio mail con form php PHP 0
V Invio E-Mail con la notifica degli ordini effettuati PHP 2
neo996sps Errore con script per invio mail PHP 3
D For invio mail-allegato con smtp PHP 9
L Problema invio allegati via mail con libero PHP 5
V Problema con l'invio delle mail in locale (usando quindi easy php) PHP 16
S form invio mail con foto o logo PHP 46
Angel0 Problema invio e-mail (era: problemi con xoom) Posta Elettronica 4
SolidSnake4 invio mail html con php non va PHP 6
S form invio mail con opzioni PHP 3
B Problema invio mail con script php verso i dominii libero PHP 9
L invio mail con CreateMHTMLBody Classic ASP 2
T Invio mail da form contatti con annesso file attachment Classic ASP 1
L Problemi con invio form via mail Classic ASP 3
F Implementare l'invio mail con allegato PHP 1
G invio mail con allegati PHP 0
F script asp invio mail con dati di un form Classic ASP 3
M il loop per l'invio mail con CDOSYS ad un tratto non funziona più Classic ASP 1
H ASPMail - Invio di mail html con variabili Classic ASP 5
E Errore invio mail con CDO Classic ASP 4
X Invio mail con allegati PHP 11
A problema con invio e-mail con CDONTS Classic ASP 0
V problema con invio mail Hosting 2
M telecamera Foscam - mancato invio mail ad account gmail IP Cam e Videosorveglianza 0
Daniele_Carrara Problema timeout - invio mail PHP 7
U PHP bottone per invio mail o ritorno al form PHP 15
AC1 [PHP] Invio Mail PHP 18
B [PHP] Invio mail automatico dopo compilazione form - db PHP 25
paloppa [PHP] Invio mail da form dubbio PHP 17
F Form mail php errore invio PHP 5
Punix [PHP] problema script invio e-mail PHP 2

Discussioni simili