In vari post è stato richiesto come inviare allegati per email, email multiple e più in generale gestire i campi email con FacileForms.
In questo post
qui di qualche mese fa, riferito all'invio di email di notifica multiple, mi ero posto il problema che oggi ho risolto. Era più semplice del previsto.
Riassumo per semplicità e chiarezza la procedura già esposta nel post sopra citato e le varianti inserite.
1. Dopo creato e salvato il form cliccare sul "nome" del form non sul "titolo".
2. Nella tab "impostazioni" settare "Notifica email" a NO.
3. Cliccare sulla tab "Carica pezzi".
4. Nella sezione di questa linguetta "Fine caricamento" settare il pulsante di opzione "custom". Ciò visualizzerà una casella di testo per scrivere dentro il codice PHP. Inserire il codice qui sotto riportato.
// Send profile to Client
global $ff_config, $mosConfig_mailfrom, $mosConfig_fromname, $my;
$this->execPieceByName('ff_InitLib');
if ($this->dying) return;
$from = $mosConfig_mailfrom;
$fromname = $mosConfig_fromname.' - FacileForms';
if ($this->formrow->emailntf==2)
$recipient = $this->formrow->emailadr;
else
$recipient = $ff_config->emailadr;
$subject = _FACILEFORMS_PROCESS_FORMRECRECEIVED;
$body = '';
if ($this->record_id != '')
$body .= _FACILEFORMS_PROCESS_RECORDSAVEDID." ".$this->record_id.nl().nl();
$body .=
_FACILEFORMS_PROCESS_FORMID.": ".$this->form.nl().
_FACILEFORMS_PROCESS_FORMTITLE.": ".$this->formrow->title.nl().
_FACILEFORMS_PROCESS_FORMNAME.": ".$this->formrow->name.nl().nl().
_FACILEFORMS_PROCESS_SUBMITTEDAT.": ".$this->submitted.nl().
_FACILEFORMS_PROCESS_SUBMITTERIP.": ".$this->ip.nl().
_FACILEFORMS_PROCESS_PROVIDER.": ".$this->provider.nl().
_FACILEFORMS_PROCESS_BROWSER.": ".$this->browser.nl().
_FACILEFORMS_PROCESS_OPSYS.": ".$this->opsys.nl().nl();
if (count($this->maildata)) foreach ($this->maildata as $data)
$body .= $data[_FF_DATA_TITLE].": ".$data[_FF_DATA_VALUE].nl();
$attachment = NULL;
if ($this->formrow->emailxml>0) {
$attachment = $this->expxml();
if ($this->status != _FF_STATUS_OK) return;
} // if
$recipient2 = ff_getSubmit('email_input', '');
// email_input è il nome del campo email nel mio form - email_input is the email field input in the my form
$attachment=ff_getSubmit('input_foto1', '');
//input_foto1 è il campo del percorso dell'allegato nel mio form - input_foto1 is the field width the path of the attachment in to my form
// definire eventuale variabile $body2 per testi email personalizzati
/* Sostituendo la variabile $body2 a $body nelle funzioni sendMail() sotto richiamate
con $body2 = $body.nl()."testo riga 1".nl()."testo riga 2";
si possono aggiungere righe al testo della risposta standard.
con $body2 ="testo riga 1".nl()."testo riga 2".nl();
invece si può creare una nuova email con righe a piacere.
nota - nl() è la funzione che manda a capo il testo
*/
// ora invio l'email all'amministratore - now send the mail to administrator
$this->sendMail($from, $fromname, $recipient, $subject, $body, $attachment);
// ora invio l'email di conferma al mittente a $recipient2 - now send the mail to $recipient2
$this->sendMail($from, $fromname, $recipient2, $subject, $body, $attachment);
Aggiornamenti inseriti il 09.12.2007Per maggiore chiarezza segnalo che il codice sopra riportato è una modifica della funzione originale di Facileforms che invia l'email di notifica e si trova nella directory del componente nel file "facileforms.process.php"
function sendEmailNotification()
{
global $ff_config, $mosConfig_mailfrom, $mosConfig_fromname;
if ($this->dying) return;
$from = $mosConfig_mailfrom;
$fromname = $mosConfig_fromname.' - FacileForms';
if ($this->formrow->emailntf==2)
$recipient = $this->formrow->emailadr;
else
$recipient = $ff_config->emailadr;
$subject = _FACILEFORMS_PROCESS_FORMRECRECEIVED;
$body = '';
if ($this->record_id != '')
$body .= _FACILEFORMS_PROCESS_RECORDSAVEDID." ".$this->record_id.nl().nl();
$body .=
_FACILEFORMS_PROCESS_FORMID.": ".$this->form.nl().
_FACILEFORMS_PROCESS_FORMTITLE.": ".$this->formrow->title.nl().
_FACILEFORMS_PROCESS_FORMNAME.": ".$this->formrow->name.nl().nl().
_FACILEFORMS_PROCESS_SUBMITTEDAT.": ".$this->submitted.nl().
_FACILEFORMS_PROCESS_SUBMITTERIP.": ".$this->ip.nl().
_FACILEFORMS_PROCESS_PROVIDER.": ".$this->provider.nl().
_FACILEFORMS_PROCESS_BROWSER.": ".$this->browser.nl().
_FACILEFORMS_PROCESS_OPSYS.": ".$this->opsys.nl().nl();
if (count($this->maildata)) foreach ($this->maildata as $data)
$body .= $data[_FF_DATA_TITLE].": ".$data[_FF_DATA_VALUE].nl();
$attachment = NULL;
if ($this->formrow->emailxml>0) {
$attachment = $this->expxml();
if ($this->status != _FF_STATUS_OK) return;
} // if
$this->sendMail($from, $fromname, $recipient, $subject, $body, $attachment);
} // sendEmailNotification
che ha sua volta usa la funzione sendMail() contenuta sempre in "facileforms.process.php"
function sendMail($from, $fromname, $recipient, $subject, $body,
$attachment = NULL, $html = NULL, $cc = NULL, $bcc = NULL)
{
if ($this->dying) return;
$mail = mosCreateMail($from, $fromname, $subject, $body);
if (is_array($recipient))
foreach ($recipient as $to) $mail->AddAddress($to);
else
$mail->AddAddress($recipient);
if ($attachment) {
if ( is_array($attachment) )
foreach ($attachment as $fname) $mail->AddAttachment($fname);
else
$mail->AddAttachment($attachment);
} // if
if (isset($html)) $mail->IsHTML($html);
if (isset($cc)) {
if( is_array($cc) )
foreach ($cc as $to) $mail->AddCC($to);
else
$mail->AddCC($cc);
} // if
if (isset($bcc)) {
if( is_array($bcc) )
foreach ($bcc as $to) $mail->AddBCC($to);
else
$mail->AddBCC($bcc);
} // if
if (!$mail->Send()) {
$this->status = _FF_STATUS_SENDMAIL_FAILED;
$this->message = $mail->ErrorInfo;
} // if
} // sendMail
Quest'ultima ci mostra che i parametri utilizzabili sono molti di più e per utilizzarli basta aggiungerli alla funzione chiamante. (es. $html = NULL, $cc = NULL, $bcc = NULL)
abilitando $html=true si può inserire in $body i tag html che consentono di formattare il testo.
Gli altri due parametri sono: $cc chi legge per conoscenza e $bcc chi legge in copia nascosta.
Un'ulteriore possibilità è data dall'uso di array anzichè semplici variabili in $recipient ed $attachement.
Nel primo caso se si crea l'array
$recipient = array($recipient1,$recipient2,"mia@mail.it");
ecc. aggiungendo variabili contenenti email o costanti a piacimento e possibile inviare email multiple.
La differenza rispetto alla soluzione riportata nel codice è che in questo caso ogni recipiente vede l'indirizzo di tutti gli altri.
Se questo non è desiderato si usa più volte la funzione sendMail() come nel mio caso.
Altra bella cosina è che usando l'array
$attachment= array($attachemnt1,$attachment2,"/mio/percorso/file.jpg");
è possibile inviare allegati multipli.
Attenzione i percorsi nelle variabili o nelle costanti devono essere percorsi assoluti del server ed i
file allegati devono essere ospitati in directory accessibili (es: images)del server.Il percorso assoluto si trova in Pannello amministratore
Sito->Configurazione generale->Server
A quello va aggiunta/e la/e directory del sito che ospita/no gli allegati e i nomi degli allegati.
Esempio mio caso:
/home/petra/data/VirtualDomains/miosito/www/docs/images/file.txt
Nel caso di file allegati nei campi del form la funzione
$attachment=ff_getSubmit('input_foto1','');
da già il percorso assoluto.
Come si può vedere con questi codici è possibile personalizzare tutti i campi dell'email ed inviarne a piacere.
Sperando di essere stato utile e sufficientemente chiaro, invio saluti a tutti
Vales