Back to top

Autore Topic: [Risolto] FacileForms invio allegati per email e gestione campi email  (Letto 10579 volte)

Offline vales

  • Global Moderator
  • Instancabile
  • ********
  • Post: 8012
  • Sesso: Maschio
    • Mostra profilo
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.

 
Codice: [Seleziona]
// 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"

Codice: [Seleziona]
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"

Codice: [Seleziona]
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
« Ultima modifica: 09 Dic 2007, 19:26:04 da vales »
Download e demo di Albo Pretorio On Line per Joomla 1.5 e Joomla 2.5 e 3
Moduli scuola On Line v1 per Joomla 3
http://valesweb.altervista.org

Offline mochi

  • Esploratore
  • **
  • Post: 112
    • Mostra profilo
Grandioso!!! Finalmente ho trovato risp :Dosta alle mie domande!!!

Offline vales

  • Global Moderator
  • Instancabile
  • ********
  • Post: 8012
  • Sesso: Maschio
    • Mostra profilo
Ho inserito oggi nel primo post importanti aggiornamenti.

Saluti Vales
Download e demo di Albo Pretorio On Line per Joomla 1.5 e Joomla 2.5 e 3
Moduli scuola On Line v1 per Joomla 3
http://valesweb.altervista.org

Offline emanuLele

  • Nuovo arrivato
  • *
  • Post: 30
    • Mostra profilo
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



Offline bibopm

  • Esploratore
  • **
  • Post: 155
    • Mostra profilo
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

Offline vales

  • Global Moderator
  • Instancabile
  • ********
  • Post: 8012
  • Sesso: Maschio
    • Mostra profilo
Nel primo post mi riferivo alla funzione originaria sendmail e dicevo quanto segue.

Citazione
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

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

Codice: [Seleziona]
$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
Download e demo di Albo Pretorio On Line per Joomla 1.5 e Joomla 2.5 e 3
Moduli scuola On Line v1 per Joomla 3
http://valesweb.altervista.org

Offline bibopm

  • Esploratore
  • **
  • Post: 155
    • Mostra profilo
ok...però ora ho tutto formattato vicino...come posso dargli un ordine in modo che sia chiaro?

Offline vales

  • Global Moderator
  • Instancabile
  • ********
  • Post: 8012
  • Sesso: Maschio
    • Mostra profilo
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
« Ultima modifica: 12 Mar 2008, 20:02:15 da vales »
Download e demo di Albo Pretorio On Line per Joomla 1.5 e Joomla 2.5 e 3
Moduli scuola On Line v1 per Joomla 3
http://valesweb.altervista.org

Offline mahagonny

  • Appassionato
  • ***
  • Post: 453
  • Sesso: Maschio
    • Mostra profilo
scusa potresti chiarirmi una cosa quando dici
Citazione
// 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


Offline vales

  • Global Moderator
  • Instancabile
  • ********
  • Post: 8012
  • Sesso: Maschio
    • Mostra profilo
scusa potresti chiarirmi una cosa quando dici
Citazione
// 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

Download e demo di Albo Pretorio On Line per Joomla 1.5 e Joomla 2.5 e 3
Moduli scuola On Line v1 per Joomla 3
http://valesweb.altervista.org

Offline mahagonny

  • Appassionato
  • ***
  • Post: 453
  • Sesso: Maschio
    • Mostra profilo
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
« Ultima modifica: 09 Apr 2008, 17:59:48 da mahagonny »

Offline vales

  • Global Moderator
  • Instancabile
  • ********
  • Post: 8012
  • Sesso: Maschio
    • Mostra profilo
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
Download e demo di Albo Pretorio On Line per Joomla 1.5 e Joomla 2.5 e 3
Moduli scuola On Line v1 per Joomla 3
http://valesweb.altervista.org

Offline mahagonny

  • Appassionato
  • ***
  • Post: 453
  • Sesso: Maschio
    • Mostra profilo
Il codice funziona e a me tanto bastava  ;D
Per quanto riguarda la versione ho la 1.4.7

Offline zippomaker

  • Appassionato
  • ***
  • Post: 221
    • Mostra profilo
Mi accodo al post..
vales, funziona bene, ma vorrei chiederti 2 cose:

1- Nella mail che arriva ci sono anche queste informazioni:
   
Codice: [Seleziona]
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

Offline vales

  • Global Moderator
  • Instancabile
  • ********
  • Post: 8012
  • Sesso: Maschio
    • Mostra profilo
Mi accodo al post..
vales, funziona bene, ma vorrei chiederti 2 cose:

1- Nella mail che arriva ci sono anche queste informazioni:
   
Codice: [Seleziona]
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 :

Codice: [Seleziona]
$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

Download e demo di Albo Pretorio On Line per Joomla 1.5 e Joomla 2.5 e 3
Moduli scuola On Line v1 per Joomla 3
http://valesweb.altervista.org

Offline zippomaker

  • Appassionato
  • ***
  • Post: 221
    • Mostra profilo
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

Offline vales

  • Global Moderator
  • Instancabile
  • ********
  • Post: 8012
  • Sesso: Maschio
    • Mostra profilo
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
Download e demo di Albo Pretorio On Line per Joomla 1.5 e Joomla 2.5 e 3
Moduli scuola On Line v1 per Joomla 3
http://valesweb.altervista.org

 



Web Design Bolzano Kreatif