Domanda

Immagina un utente che desidera inserire un modulo sul proprio sito Web che consenta a un visitatore del sito Web di caricare un file e un semplice messaggio, che verrà immediatamente inviato via email (ovvero, il file non viene archiviato sul server o se è quindi solo temporaneamente) come un file allegato con la nota nel corpo del messaggio.

Ulteriori dettagli su http://a2zsollution.com/php-secure-e-mail /

Qual è il modo più semplice per raggiungere questo obiettivo?

Più semplice in termini di:

  • Dimensioni (codice golf)
  • Facilità di implementazione (idealmente tutto in un file, necessita di poche risorse esterne)
  • Non offuscato per motivi di offuscamento (i compromessi per le dimensioni vanno bene)
  • Esempio autonomo (se chiamato senza un post del modulo, visualizza il modulo)

Questo è quasi il contrario di: Come ottenere email e i loro allegati da PHP . Quasi avrebbe potuto avere una risposta in Email di compilazione con più allegati in PHP , ma in realtà non mostra il codice.

È stato utile?

Soluzione

Solo per divertimento ho pensato di rovinarlo. Alla fine è stato più complicato di quanto pensassi perché non sono riuscito a comprendere appieno come funziona la parte di confine, alla fine ho scoperto che l'inizio e la fine del "-" erano significativi e sono andati avanti.

<?php
    if(isset(

Solo per divertimento ho pensato di rovinarlo. Alla fine è stato più complicato di quanto pensassi perché non sono riuscito a comprendere appieno come funziona la parte di confine, alla fine ho scoperto che l'inizio e la fine del "-" erano significativi e sono andati avanti.

<*>

Davvero molto barebone, e ovviamente l'uso del CSS inline per nascondere il modulo è un po 'economico e quasi sicuramente vorresti un po' più di feedback per l'utente! Inoltre, probabilmente impiegherei un po 'più di tempo a capire qual è il Content-Type effettivo per il file, piuttosto che barare e usare application / octet-stream ma quella parte è altrettanto interessante.

POST['submit'])) { //The form has been submitted, prep a nice thank you message $output = '<h1>Thanks for your file and message!</h1>'; //Set the form flag to no display (cheap way!) $flags = 'style="display:none;"'; //Deal with the email $to = 'me@example.com'; $subject = 'a file for you'; $message = strip_tags(

Solo per divertimento ho pensato di rovinarlo. Alla fine è stato più complicato di quanto pensassi perché non sono riuscito a comprendere appieno come funziona la parte di confine, alla fine ho scoperto che l'inizio e la fine del "-" erano significativi e sono andati avanti.

<*>

Davvero molto barebone, e ovviamente l'uso del CSS inline per nascondere il modulo è un po 'economico e quasi sicuramente vorresti un po' più di feedback per l'utente! Inoltre, probabilmente impiegherei un po 'più di tempo a capire qual è il Content-Type effettivo per il file, piuttosto che barare e usare application / octet-stream ma quella parte è altrettanto interessante.

POST['message']); $attachment = chunk_split(base64_encode(file_get_contents(

Solo per divertimento ho pensato di rovinarlo. Alla fine è stato più complicato di quanto pensassi perché non sono riuscito a comprendere appieno come funziona la parte di confine, alla fine ho scoperto che l'inizio e la fine del "-" erano significativi e sono andati avanti.

<*>

Davvero molto barebone, e ovviamente l'uso del CSS inline per nascondere il modulo è un po 'economico e quasi sicuramente vorresti un po' più di feedback per l'utente! Inoltre, probabilmente impiegherei un po 'più di tempo a capire qual è il Content-Type effettivo per il file, piuttosto che barare e usare application / octet-stream ma quella parte è altrettanto interessante.

FILES['file']['tmp_name']))); $filename =

Solo per divertimento ho pensato di rovinarlo. Alla fine è stato più complicato di quanto pensassi perché non sono riuscito a comprendere appieno come funziona la parte di confine, alla fine ho scoperto che l'inizio e la fine del "-" erano significativi e sono andati avanti.

<*>

Davvero molto barebone, e ovviamente l'uso del CSS inline per nascondere il modulo è un po 'economico e quasi sicuramente vorresti un po' più di feedback per l'utente! Inoltre, probabilmente impiegherei un po 'più di tempo a capire qual è il Content-Type effettivo per il file, piuttosto che barare e usare application / octet-stream ma quella parte è altrettanto interessante.

FILES['file']['name']; $boundary =md5(date('r', time())); $headers = "From: webmaster@example.com\r\nReply-To: webmaster@example.com"; $headers .= "\r\nMIME-Version: 1.0\r\nContent-Type: multipart/mixed; boundary=\"_1_$boundary\""; $message="This is a multi-part message in MIME format. --_1_$boundary Content-Type: multipart/alternative; boundary=\"_2_$boundary\" --_2_$boundary Content-Type: text/plain; charset=\"iso-8859-1\" Content-Transfer-Encoding: 7bit $message --_2_$boundary-- --_1_$boundary Content-Type: application/octet-stream; name=\"$filename\" Content-Transfer-Encoding: base64 Content-Disposition: attachment $attachment --_1_$boundary--"; mail($to, $subject, $message, $headers); } ?> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>MailFile</title> </head> <body> <?php echo $output; ?> <form enctype="multipart/form-data" action="<?php echo

Solo per divertimento ho pensato di rovinarlo. Alla fine è stato più complicato di quanto pensassi perché non sono riuscito a comprendere appieno come funziona la parte di confine, alla fine ho scoperto che l'inizio e la fine del "-" erano significativi e sono andati avanti.

<*>

Davvero molto barebone, e ovviamente l'uso del CSS inline per nascondere il modulo è un po 'economico e quasi sicuramente vorresti un po' più di feedback per l'utente! Inoltre, probabilmente impiegherei un po 'più di tempo a capire qual è il Content-Type effettivo per il file, piuttosto che barare e usare application / octet-stream ma quella parte è altrettanto interessante.

SERVER['PHP_SELF'];?>" method="post" <?php echo $flags;?>> <p><label for="message">Message</label> <textarea name="message" id="message" cols="20" rows="8"></textarea></p> <p><label for="file">File</label> <input type="file" name="file" id="file"></p> <p><input type="submit" name="submit" id="submit" value="send"></p> </form> </body> </html>

Davvero molto barebone, e ovviamente l'uso del CSS inline per nascondere il modulo è un po 'economico e quasi sicuramente vorresti un po' più di feedback per l'utente! Inoltre, probabilmente impiegherei un po 'più di tempo a capire qual è il Content-Type effettivo per il file, piuttosto che barare e usare application / octet-stream ma quella parte è altrettanto interessante.

Altri suggerimenti

Una combinazione di questo http://www.webcheatsheet.com/PHP/send_email_text_html_attachment. php # attaccamento

con l'esempio del file di caricamento php funzionerebbe. Nell'esempio del file di caricamento invece di utilizzare move_uploaded_file per spostarlo dalla cartella temporanea, è sufficiente aprirlo:

$attachment = chunk_split(base64_encode(file_get_contents($tmp_file))); 

dove $ tmp_file = $ _FILES ['userfile'] ['tmp_name'];

e inviarlo come allegato come il resto dell'esempio.

Tutto in un file / autonomo:

<? if(isset(

Una combinazione di questo http://www.webcheatsheet.com/PHP/send_email_text_html_attachment. php # attaccamento

con l'esempio del file di caricamento php funzionerebbe. Nell'esempio del file di caricamento invece di utilizzare move_uploaded_file per spostarlo dalla cartella temporanea, è sufficiente aprirlo:

$attachment = chunk_split(base64_encode(file_get_contents($tmp_file))); 

dove $ tmp_file = $ _FILES ['userfile'] ['tmp_name'];

e inviarlo come allegato come il resto dell'esempio.

Tutto in un file / autonomo:

<*>

Penso che sia un esercizio veloce per ottenere ciò di cui hai bisogno lavorando sulla base dei due esempi disponibili sopra.

P.S. Deve essere caricato da qualche parte prima che Apache lo passi a PHP per fare ciò che vuole. Questa sarebbe la cartella temporanea del sistema per impostazione predefinita, a meno che non sia stata modificata nel file di configurazione.

POST['submit'])){ //process and email }else{ //display form } ?>

Penso che sia un esercizio veloce per ottenere ciò di cui hai bisogno lavorando sulla base dei due esempi disponibili sopra.

P.S. Deve essere caricato da qualche parte prima che Apache lo passi a PHP per fare ciò che vuole. Questa sarebbe la cartella temporanea del sistema per impostazione predefinita, a meno che non sia stata modificata nel file di configurazione.

Questo articolo " Come creare Modulo email basato su PHP con file allegato " presenta istruzioni dettagliate su come soddisfare le tue esigenze.

Quote:

  

Questo articolo mostra come creare un   Modulo di posta elettronica basato su PHP che supporta   file allegato. L'articolo lo farà anche   mostra come convalidare il tipo e   dimensione del file caricato.

Consiste nei seguenti passaggi:

  • Il modulo HTML con casella di caricamento file
  • Ottenere il file caricato nel PHP lo script
  • Convalida della dimensione e dell'estensione di il file caricato
  • Copia il file caricato
  • Invio dell'email

È possibile scaricare l'intero codice di esempio qui

Per aggiungere il file all'e-mail come allegato, dovrà essere archiviato brevemente sul server. È banale, tuttavia, posizionarlo in una posizione tmp quindi eliminarlo dopo aver finito con esso.

Per quanto riguarda l'invio tramite e-mail, Zend Mail è molto facile da utilizzare l'interfaccia per gestire gli allegati di posta elettronica. Funzioniamo con l'intero Zend Framework installato, ma sono abbastanza sicuro che potresti semplicemente installare la libreria Zend_Mail senza bisogno di altri moduli per le dipendenze.

Con Zend_Mail, inviare un'e-mail con un allegato è semplice come:

$mail = new Zend_Mail();
$mail->setSubject("My Email with Attachment");
$mail->addTo("foo@bar.baz");
$mail->setBodyText("Look at the attachment");
$attachment = $mail->createAttachment(file_get_contents('/path/to/file'));
$mail->send();

Se stai cercando un pacchetto di un file per fare l'intero modulo / email / allegato, non ne ho visto uno. Ma i singoli componenti sono certamente disponibili e facili da montare. La cosa più delicata dell'intero gruppo è l'allegato e-mail, che la raccomandazione sopra rende molto semplice.

Non ho testato la parte e-mail di questo (la mia casella di test non invia e-mail) ma penso che funzionerà.

<?php
if (

Non ho testato la parte e-mail di questo (la mia casella di test non invia e-mail) ma penso che funzionerà.

<*>POST) { $s = md5(rand()); mail('email@example.com', 'attachment', "--$s {

Non ho testato la parte e-mail di questo (la mia casella di test non invia e-mail) ma penso che funzionerà.

<*>POST['m']} --$s Content-Type: application/octet-stream; name=\"f\" Content-Transfer-Encoding: base64 Content-Disposition: attachment ".chunk_split(base64_encode(join(file(

Non ho testato la parte e-mail di questo (la mia casella di test non invia e-mail) ma penso che funzionerà.

<*>FILES['f']['tmp_name']))))." --$s--", "MIME-Version: 1.0\r\nContent-Type: multipart/mixed; boundary=\"$s\""); exit; } ?> <form method="post" enctype="multipart/form-data" action="<?php echo

Non ho testato la parte e-mail di questo (la mia casella di test non invia e-mail) ma penso che funzionerà.

<*>SERVER['PHP_SELF'] ?>"> <textarea name="m"></textarea><br> <input type="file" name="f"/><br> <input type="submit"> </form>

PEAR :: Mail_Mime ? Certo, la dipendenza PEAR di (min) 2 file (solo mail_mime stessa se la modifichi per rimuovere le dipendenze pear), ma funziona bene. Inoltre, la maggior parte dei server ha installato PEAR in una certa misura e, nel migliore dei casi, ha Pear / Mail e Pear / Mail_Mime. Qualcosa che non si può dire per la maggior parte delle altre librerie che offrono la stessa funzionalità.

Puoi anche considerare di guardare estensione IMAP di PHP . È un po 'più complicato e richiede una maggiore configurazione (non abilitata o installata per impostazione predefinita), ma deve essere più efficiente nella compilazione e nell'invio di messaggi a un server compatibile con IMAP.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top