Valutazione 4.87/ 5 (100.00%) 5838 voti

Condividi:        

PHP e form per mandare mail BBC

Discussioni e opinioni costruttive sul mondo dell'informatica.
Per la soluzione di problemi specifici fare riferimento alle sezioni di assistenza!

Moderatori: aurelio37, axelrox

PHP e form per mandare mail BBC

Postdi Dylan666 » 02/04/05 10:57

abiamo il seguente codice:

Codice: Seleziona tutto
// send mail to the recipient notifying tem of the card that s waiting for them
mail("$RecEmail", "$SendName ti ha mandato una cartolina virtuale da $SiteName", "Ciao $RecName,
$SendName e' stato su $SiteName e ti ha mandato una cartolina virtuale!  Per ritirare la tua cartolina, clicca sul link qui sotto:

$ProgURL/phpCardsPickup.php?MessageID=$randval
   
$SiteName
$SiteTag
$SiteURL","FROM:$AdminAddress");


Il modo più semplice per far mandare le mail come BBC invece di TO quale è?
Vorrei che tutti gli indirizzi di RecEmail diventassero destinatari di copia carbone nascosta.
Avatar utente
Dylan666
Moderatore
 
Post: 38040
Iscritto il: 18/11/03 16:46

Sponsor
 

Postdi Dylan666 » 02/04/05 11:23

Che io sappia basta mettere un

$headers .= "bcc:"$RecEmail"\n";

Prima di mail() e poi richiamarlo al suo interno subito dopo il subject: si vede che mi impiccio con le virgolette da qualche parte, ma proprio non ci riesco... :undecided:
Avatar utente
Dylan666
Moderatore
 
Post: 38040
Iscritto il: 18/11/03 16:46

Postdi Nicola » 02/04/05 14:51

non so sotto quale versione di PHP tu stia provando quel codice, se non e' molto recente e' probabile che sia case sensitive per gli headers.

Inoltre e' probabile che la sola newline (\n) non sia sufficiente e che tu debba usare
\r\n

Codice: Seleziona tutto
/* inizio headers supplementari */
$intestazioni = "Bcc: user@domain.tld\r\n";
/* fine headers supplementari */


Inoltre che io sappia si usa .= al posto di = solo se hai gia' dichiarato la variabile, per aggiungere informazioni.

Per quanto riguarda $RecEmail, é un array o una semplice variabile? Contiene un solo indirizzo e-mail ?


Ciao
Nicola
Nicola
Utente Senior
 
Post: 7381
Iscritto il: 08/02/02 01:00

Postdi Dylan666 » 02/04/05 15:07

Versione Php 4.3.10, $RecEmail è una variabile che contiene solo il contenuto di un textfield. Il punto l'ho tolto, le concatenazioni lasciamole stare.

Il codice che mi hai dato tu andrà pure bene, ma così c'è un solo indirizzo fisso. Io invece devo infilarci quelli di $RecEmail
Avatar utente
Dylan666
Moderatore
 
Post: 38040
Iscritto il: 18/11/03 16:46

Postdi Dylan666 » 02/04/05 15:12

Nicola ha scritto:Per quanto riguarda $RecEmail, é un array o una semplice variabile? Contiene un solo indirizzo e-mail ?


Preciso: lasciando la variabile come collegata al TO funziona sia che io gli scriva un solo indirizzo sia che gliene metta 10 tutti scritti di seguito separati da una virgola. E vorrei che anche per il Bcc fosse uguale
Avatar utente
Dylan666
Moderatore
 
Post: 38040
Iscritto il: 18/11/03 16:46

Postdi *~Hayabusa~* » 02/04/05 15:47

Dai uno sguardo qua..
Codice: Seleziona tutto
/* destinatari */
$destinatari  = "Maria <maria@example.com>" . ", " ; // notare la virgola
$destinatari .= "Enrica <enrica@example.com>";

/* oggetto */
$oggetto = "Promemoria compleanni di Agosto";

/* messaggio */
$messaggio = '
<html>
<head>
 <title>Promemoria compleanni di Agosto</title>
</head>
<body>
<p>Questi sono i compleanni di Agosto!</p>
<table>
 <tr>
  <th>Persona</th><th>Giorno</th><th>Mese</th><th>Anno</th>
 </tr>
 <tr>
  <td>Walter</td><td>11</td><td>Agosto</td><td>1946</td>
 </tr>
 <tr>
  <td>Sara</td><td>14</td><td>Agosto</td><td>1985</td>
 </tr>
</table>
</body>
</html>
';

/* Per inviare email in formato HTML, si deve impostare l'intestazione Content-type. */
$intestazioni  = "MIME-Version: 1.0\r\n";
$intestazioni .= "Content-type: text/html; charset=iso-8859-1\r\n";

/* intestazioni addizionali */
$intestazioni .= "From: Promemoria Compleanni <compleanni@example.com>\r\n";

$intestazioni .= "Cc: archiviocompleanni@example.com\r\n";
$intestazioni .= "Bcc: controllocompleanni@example.com\r\n";

/* ed infine l'invio */
mail($destinatari, $oggetto, $messaggio, $intestazioni);
..ed e' cibo per la mente,
acqua dalla sorgente,
luce fosforescente
laddove il buio e' costante ..
*~Hayabusa~*
Hardware Admin
 
Post: 1386
Iscritto il: 12/05/02 22:44
Località: Davanti al monitor..

Postdi Nicola » 02/04/05 15:47

la sintassi per Bcc: `multipli' e' la seguente:

Codice: Seleziona tutto
$intestazioni = "Bcc: indirizzo1@dominio.tld,indirizzo2@dominio.tld,indirizzo3@dominio.tld\r\n";


Se la variabile é già di quel tipo perchè l'utente scrive nella textbox indirizzo1@dominio.tld,indirizzo2@dominio.tld,indirizzo3@dominio.tld è molto facile.

Il problema é che penso che mail() non ti permetta di evitare il campo To: perché é integrato.

Potresti mettere un tuo indirizzo, un indirizzo ad-hoc che filtra quel tipo di e-mail e così via.

Oppure potresti creare un socket verso l'SMTP e fare tutto a mano, ma diventerebbe penso più pesante e complesso e soprattuto potrebbero esserci problemi tecnici perché è probabile che ci sia un firewall in uscita.


Codice: Seleziona tutto
/* scrivo le intestazioni aggiuntive */

$intestazioni = "From: $AdminAddress";
$intestazioni .= "Bcc: $RecEmail\r\n";

/* fine intestazioni aggiuntive */

/* mando la email con gli headers aggiuntivi preparati e con destinatario creato ad-hoc */

mail("indirizzo@domain.tld", "$SendName ti ha mandato una cartolina virtuale da $SiteName", "Ciao $RecName, $SendName e' stato su $SiteName e ti ha mandato una cartolina virtuale!  Per ritirare la tua cartolina, clicca sul link qui sotto:

$ProgURL/phpCardsPickup.php?MessageID=$randval
   
$SiteName
$SiteTag
$SiteURL","$intestazioni");

/* fine invio email */


Così dovrebbe andare, prova e fammi sapere.
Nicola
Nicola
Utente Senior
 
Post: 7381
Iscritto il: 08/02/02 01:00

Postdi Nicola » 02/04/05 15:51

N.B.

Codice: Seleziona tutto
$intestazioni = "From: $AdminAddress";


probabilmente va cambiato in

Codice: Seleziona tutto
$intestazioni = "From: $AdminAddress\r\n";
Nicola
Nicola
Utente Senior
 
Post: 7381
Iscritto il: 08/02/02 01:00

Postdi Dylan666 » 02/04/05 15:57

e concatenzaioni le vorrei lasciare stare ripeto.
Quindi via il $intestazioni = "From: $AdminAddress\r\n"; e il punto nella variabile dopo. Diventa:

Codice: Seleziona tutto
// send mail to the recipient notifying tem of the card that s waiting for them
$intestazioni = "Bcc: $RecEmail\r\n";
mail("no@mail.com", "$SendName ti ha mandato una cartolina virtuale da $SiteName", "Ciao $RecName,
$SendName e' stato su $SiteName e ti ha mandato una cartolina virtuale!  Per ritirare la tua cartolina, clicca sul link qui sotto:

$ProgURL/phpCardsPickup.php?MessageID=$randval
   
$SiteName
$SiteTag
$SiteURL","FROM:$AdminAddress","$intestazioni");


Non va
Avatar utente
Dylan666
Moderatore
 
Post: 38040
Iscritto il: 18/11/03 16:46

Postdi Dylan666 » 02/04/05 16:01

Faccio notare: se al posto di no@mail.com metto un indirizzo valido NON va lo stesso.
Se ne metto uno valido e TOLGO il richiamo a "$intestazioni" alla fine di mail() allora funge
Avatar utente
Dylan666
Moderatore
 
Post: 38040
Iscritto il: 18/11/03 16:46

Postdi Nicola » 02/04/05 16:18

Non si possono contatenare piu' headers con la virgola perché viene accettato un solo oggetto. Inoltre manca il \r\n nel From:

Per risolvere a questo puoi fare così:

Codice: Seleziona tutto
$intestazioni = "Bcc: $RecEmail\r\n";


e

Codice: Seleziona tutto
mail("no@mail.com", "Oggetto", "Messaggio", "From:$AdminAddress\r\n" . "$intestazioni");
Nicola
Nicola
Utente Senior
 
Post: 7381
Iscritto il: 08/02/02 01:00

Postdi Dylan666 » 02/04/05 16:33

Col codice che mi hai mandato l'indirizzo del campo TO funziona, ma se non posso mettere più indirizzi nel campo Bcc è inutile...
Avatar utente
Dylan666
Moderatore
 
Post: 38040
Iscritto il: 18/11/03 16:46

Postdi Nicola » 02/04/05 16:36

Eventualmente, se vuoi evitare di aggiungere la riga $istruzioni puoi fare tutto in una riga:

Codice: Seleziona tutto
mail("no@mail.com", "Oggetto", "Messaggio", "From:$AdminAddress\r\n" . "Bcc:$RecEmail\r\n");


Ti consiglio però anche di aggiungere l'header del mailer, perchè molti mailservers senza rifiuteranno la email:

Codice: Seleziona tutto
"X-Mailer: PHP/" . phpversion();


facendo diventare il tutto così:

Codice: Seleziona tutto
mail("no@mail.com", "Oggetto", "Messaggio", "From:$AdminAddress\r\n" . "Bcc:$RecEmail\r\n" . "X-Mailer: PHP/" . phpversion(););
Nicola
Nicola
Utente Senior
 
Post: 7381
Iscritto il: 08/02/02 01:00

Postdi Dylan666 » 02/04/05 16:41

Ma così gli indirizzi separati da virgola li prende?
Avatar utente
Dylan666
Moderatore
 
Post: 38040
Iscritto il: 18/11/03 16:46

Postdi Dylan666 » 02/04/05 16:45

Codice: Seleziona tutto
// send mail to the recipient notifying tem of the card that s waiting for them

mail("no@mail.com", "$SendName ti ha mandato una cartolina virtuale da $SiteName", "Ciao $RecName,
$SendName e' stato su $SiteName e ti ha mandato una cartolina virtuale!  Per ritirare la tua cartolina, clicca sul link qui sotto:

$ProgURL/phpCardsPickup.php?MessageID=$randval
   
$SiteName
$SiteTag
$SiteURL", "From:$AdminAddress\r\n" . "Bcc:$RecEmail\r\n" . "X-Mailer: PHP/" . phpversion(););


Parse error: parse error, unexpected ';' in /membri/divertimento3r/phpCards/phpCardsSend.php on line 26
Avatar utente
Dylan666
Moderatore
 
Post: 38040
Iscritto il: 18/11/03 16:46

Postdi Nicola » 02/04/05 16:53

Data la variabile $RecEmail:

Codice: Seleziona tutto
$RecEmail  = "indirizzo1@domain.tld,indirizzo2@domain2.tld";


(presa tramite POST/GET da un form con una textbox)

e

$AdminAddress:

Codice: Seleziona tutto
$AdminAddress = "admin@domain3.tld";


(inclusa nel file di configurazione)

Il seguente codice

Codice: Seleziona tutto
mail("no@mail.com", "Oggetto", "Messaggio", "From:$AdminAddress\r\n" . "Bcc:$RecEmail\r\n . "X-Mailer: NomeScript" );


Invia all'indirizzo no@mail.com (tramite To:), a indirizzo1@domain.tld e indirizzo2@domain2.tld (tramite Bcc:) l'email con il Subject "Oggetto" e il testo "Messaggio", almeno su PHP 4.3.11 tramite Qmail.

Dylan666 ha scritto:Ma così gli indirizzi separati da virgola li prende?


Sì, Bcc: funziona tramite uno o più indirizzi separati da virgola.

Nel caso non arrivasse a tutti sospetterei in un limite del demone SMTP o filtri da parte degli indirizzi che non arrivano.

Per prova, inserisci nella textbox tuoindirizzo@domain.tld,tuoindirizzo@domain.tld.

Dovrebbero arrivare 2 emails identiche allo stesso indirizzo.
Nicola
Nicola
Utente Senior
 
Post: 7381
Iscritto il: 08/02/02 01:00

Postdi Nicola » 02/04/05 16:56

Sorry, errore mio:

Codice: Seleziona tutto
phpversion(););


deve diventare:

Codice: Seleziona tutto
phpversion());
Nicola
Nicola
Utente Senior
 
Post: 7381
Iscritto il: 08/02/02 01:00

Postdi Dylan666 » 02/04/05 16:58

ma lo script che ho messo sopra io non è identico al tuo? :undecided:
Se non lo è scrivimelo per inter per favore, vorrei essere sicuro di seguire le tue istruzioni
Avatar utente
Dylan666
Moderatore
 
Post: 38040
Iscritto il: 18/11/03 16:46

Postdi Nicola » 02/04/05 17:02

No va bene come hai fatto solo che a causa di un mio errore non va.

Come da post precedente bisogna sostituire phpversion();); con phpversion()); oppure cambiare

Codice: Seleziona tutto
"X-Mailer: PHP/" . phpversion();); // o phpversion()); se e' stato gia' corretto


con

Codice: Seleziona tutto
"X-Mailer: NomeScript"


dove NomeScript puo' essere il nome della applicazione, del sito o comunque qualcosa che non faccia bloccare l'invio dell'email da parte del server del dominio che deve ricevere la posta.
Nicola
Nicola
Utente Senior
 
Post: 7381
Iscritto il: 08/02/02 01:00

Postdi Dylan666 » 03/04/05 02:05

A chi interessasse la mia configurazione finale dello script è stata questa e pare funzionare. Farò qualche altro test ma se non mi sentite significa che non l'ho cambiata:

Codice: Seleziona tutto
// send mail to the recipient notifying tem of the card that s waiting for them

mail("", "$SendName ti ha mandato una cartolina virtuale da $SiteName", "Ciao $RecName,
$SendName e' stato su $SiteName e ti ha mandato una cartolina virtuale!  Per ritirare la tua cartolina, clicca sul link qui sotto:

$ProgURL/phpCardsPickup.php?MessageID=$randval
   
$SiteName
$SiteTag
$SiteURL", "From:$AdminAddress\r\n" . "Bcc:$RecEmail\r\n" . "X-Mailer: PHP/" . phpversion());
Avatar utente
Dylan666
Moderatore
 
Post: 38040
Iscritto il: 18/11/03 16:46

Prossimo

Torna a Discussioni


Topic correlati a "PHP e form per mandare mail BBC":


Chi c’è in linea

Visitano il forum: Nessuno e 4 ospiti