Joomla.it Forum

Non solo Joomla... => Sviluppo => : vales 03 Sep 2007, 18:09:27

: [Risolto] FacileForms invio allegati per email e gestione campi email
: vales 03 Sep 2007, 18:09:27
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 (http://forum.joomla.it/index.php?topic=14595.msg91548#msg91548) 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.2007

Per 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
: Re: [Risolto] FacileForms invio allegati per email e gestione campi email
: mochi 26 Oct 2007, 09:28:22
Grandioso!!! Finalmente ho trovato risp :Dosta alle mie domande!!!
: Re: [Risolto] FacileForms invio allegati per email e gestione campi email
: vales 09 Dec 2007, 17:47:37
Ho inserito oggi nel primo post importanti aggiornamenti.

Saluti Vales
: Re: [Risolto] FacileForms invio allegati per email e gestione campi email
: emanuLele 13 Dec 2007, 15:18:30
grande Vales... come al solito un super perno della magnifica macchina che è forum.joomla..
Volevo porti/Vi una domanda riguardo la funzione di allegati multipli
Ho un problema che non riesco a risolvere
nel mio form ho la necessita di mettere 10 campi allega file
volevo sapere alcune info
1) c'è un limite per ogni singolo allega? io ho messo a zero la property " Max.Dimensione file " altrimenti non mi permetteva di mettere più di 2 mega di file!
2)posso mettere un alert e quale per consentire all'utente di capire quando sta sforando con l'allegato?

Un altra domandona ma questa è meno impellente..
nel form ho messo una "Seleziona Lista" èsiste la remota possibilità che a seconda di una  selezione di una voce mi carica con dei dati(diversi a seconda della scelta) un altra lista?
Vi ringrazio ragazzi... spero di essere stato chiaro..
Saluti, Lele


: Re: [Risolto] FacileForms invio allegati per email e gestione campi email
: bibopm 12 Mar 2008, 11:02:42
abilitando $html=true si può inserire in $body i tag html che consentono di formattare il testo.

Cosa devo inserire in questa funzione per formattare il testo e dove? grazie
: Re: [Risolto] FacileForms invio allegati per email e gestione campi email
: vales 12 Mar 2008, 17:36:41
Nel primo post mi riferivo alla funzione originaria sendmail e dicevo quanto segue.

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.

Ciò vuol dire che puoi aggiungere alla funzione modificata

:
$this->sendMail($from, $fromname, $recipient2, $subject, $body, $attachment);
 dopo il parametro $attachment il parametro $html=true così

:
$this->sendMail($from, $fromname, $recipient2, $subject, $body, $attachment, $html=true);
e questo abiliterà ad inserire nella variabile $body tag html per formattare il testo della email.

Saluti Vales
: Re: [Risolto] FacileForms invio allegati per email e gestione campi email
: bibopm 12 Mar 2008, 18:04:22
ok...però ora ho tutto formattato vicino...come posso dargli un ordine in modo che sia chiaro?
: Re: [Risolto] FacileForms invio allegati per email e gestione campi email
: vales 12 Mar 2008, 19:40:26
Non conoscendo il testo che hai formattato non so dirti.

Comunque penso che usando appropriati tag html che agiscono sulla dimensione caratteri e sullo stile di testo otterrai i risulti voluti.

Saluti Vales
: Re: [Risolto] FacileForms invio allegati per email e gestione campi email
: mahagonny 09 Apr 2008, 01:06:28
scusa potresti chiarirmi una cosa quando dici
// email_input è il nome del campo email nel mio form - email_input is the email field input in the my form

io sostituisco così
$recipient2     = ff_getSubmit('cf_email',     ''); ma non funziona;
ho provato anche così:
$recipient2     = ff_getSubmit('email_input',     'cf_email'); ma non va lo stesso.
saresti così gentile da spiegarmi?
Grazie per la pazienza

: Re: [Risolto] FacileForms invio allegati per email e gestione campi email
: vales 09 Apr 2008, 12:46:15
scusa potresti chiarirmi una cosa quando dici
// email_input è il nome del campo email nel mio form - email_input is the email field input in the my form

io sostituisco così
$recipient2     = ff_getSubmit('cf_email',     ''); ma non funziona;
ho provato anche così:
$recipient2     = ff_getSubmit('email_input',     'cf_email'); ma non va lo stesso.
saresti così gentile da spiegarmi?
Grazie per la pazienza



Se "cf_email" è il nome del tuo campo di inserimento dell'indirizzo email nel form è giusta la prima assegnazione.

Hai disabilitato la "Notifica email" come detto al punto 2 del primo post ?

Saluti Vales

: Re: [Risolto] FacileForms invio allegati per email e gestione campi email
: mahagonny 09 Apr 2008, 17:57:33
probabilmente mi manca qualcosa.
allora.

Parli di allegato ma cosa intendi? io non ho un file o altro da allegare.
Ho capito o sono fuori?
Per essere ancora più esplicito, desidererei che l'email inviata all'amministratore si recapitata anche all'indirizzo di posta di chi compila il form.
Un'altra cosa. Il messaggio di conferma di invio è in inglese. dove si agisce per modificarlo?
Grazie
: Re: [Risolto] FacileForms invio allegati per email e gestione campi email
: vales 09 Apr 2008, 18:12:52
Il codice sopra descritto fa diverse cose. Quindi per prima cosa occorre stabilire che tipo di form stai preparando.

Quali campi hai predisposto? Ci sono campi in cui inserisci indirizzi email o percorsi di allegati ?

Per quanto riguarda l'inglese quale versione di facile form hai?

Vales
: Re: [Risolto] FacileForms invio allegati per email e gestione campi email
: mahagonny 09 Apr 2008, 19:37:03
Il codice funziona e a me tanto bastava  ;D
Per quanto riguarda la versione ho la 1.4.7
: Re: [Risolto] FacileForms invio allegati per email e gestione campi email
: zippomaker 23 May 2008, 13:10:57
Mi accodo al post..
vales, funziona bene, ma vorrei chiederti 2 cose:

1- Nella mail che arriva ci sono anche queste informazioni:
   
:
Record saved to database with ID: 9

Form ID: 11
Form title: newsletter
Form name: newsletter

Submitted at: 2008-05-22 21:41:32
Submitter IP: 151.49.121.77
Submitter provider: Unknown
Submitter browser: Mozilla Firefox 2.0.0.14
Submitter operating system: Windows XP
  come faccio ad eliminarle?

2- per la mail che arriva all'utente  che compila il form invece di farli arrivare tutto il form, come posso scrivergli solo (Es: Grazie per averci scelto)nella mail che riceve?

grazie
Ciao
: Re: [Risolto] FacileForms invio allegati per email e gestione campi email
: vales 24 May 2008, 22:25:10
Mi accodo al post..
vales, funziona bene, ma vorrei chiederti 2 cose:

1- Nella mail che arriva ci sono anche queste informazioni:
   
:
Record saved to database with ID: 9

Form ID: 11
Form title: newsletter
Form name: newsletter

Submitted at: 2008-05-22 21:41:32
Submitter IP: 151.49.121.77
Submitter provider: Unknown
Submitter browser: Mozilla Firefox 2.0.0.14
Submitter operating system: Windows XP
  come faccio ad eliminarle?

2- per la mail che arriva all'utente  che compila il form invece di farli arrivare tutto il form, come posso scrivergli solo (Es: Grazie per averci scelto)nella mail che riceve?

grazie
Ciao

Per risolvere i problemi devi tenere per riferimento il codice commentato nel primo post

1) per non visualizzare le informazioni generali devi togliere le seguenti righe   dalla variabile $body :

:
$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();

commentandole, o sostituendo i contenuti delle assegnazioni, oppure facendo $body.="";

2)per personalizzare il testo della email del mittente devi definire una nuova variabile es. $body2, riempirla con  i testi che ti interessano e utilizzarla al posto della variabile $body  nella seguente seconda chiamata della funzione sendmail() 

$this->sendMail($from, $fromname, $recipient2, $subject, $body2, $attachment);

Attenzione all'assegnazione dei valori alle variabili. E tutto dovrebbe funzionare.

Saluti Vales

: Re: [Risolto] FacileForms invio allegati per email e gestione campi email
: zippomaker 26 May 2008, 10:48:37
mmmm... forse è troppo complicato per me...
inoltre  ho visto, fingendomi io un utente che compila il form, che non ricevo alcuna mail di notifica. (questo prima di fare queste ultime modifiche)..

Dove sbaglio, che devo controllare?

Grazie ancora
ciao
: Re: [Risolto] FacileForms invio allegati per email e gestione campi email
: vales 26 May 2008, 18:39:50
mmmm... forse è troppo complicato per me...
inoltre  ho visto, fingendomi io un utente che compila il form, che non ricevo alcuna mail di notifica. (questo prima di fare queste ultime modifiche)..

Dove sbaglio, che devo controllare?

Grazie ancora
ciao

Forse c'è qualche problema nell'assegnazione dei valori alle variabili. Se posti il codice che stai usando provo a darti un aiuto.

Non dimenticare il nome del campo email del mittente

Vales