inviare email con allegato e immagini

ciao, sto inviando una email con allegato e funziona vorrei aggiungere un'immagine e quindi mandarla in formato html ma anche se ho modificato multipart/mixed in multipart/html non va l'html come dovrei modificarla per vedere l'img ??

$to      = $_POST['usermail'];
$from    = "info@miosito.com";
$subject = "miosito";
$message = "<html><body><p><img src='http://miosito.com/emailimg.jpg'/></p>";

$message .= "<p>ciao</p> ";



// Obtain file upload vars
$fileatt      = $_FILES['fileatt']['tmp_name'];
$fileatt_type = $_FILES['fileatt']['type'];
$fileatt_name = $_FILES['fileatt']['name'];

$headers = "From: $from";

if (is_uploaded_file($fileatt)) {
 // Read the file to be attached ('rb' = read binary)
 $file = fopen($fileatt,'rb');
 $data = fread($file,filesize($fileatt));
 fclose($file);

 // Generate a boundary string
 $semi_rand = md5(time());
 $mime_boundary = "==Multipart_Boundary_x{$semi_rand}x";

 // Add the headers for a file attachment
 $headers .= "\nMIME-Version: 1.0\n" .
 "Content-Type: multipart/html;\n" .
 " boundary=\"{$mime_boundary}\"";
 
/*  $headers .= "\nMIME-Version: 1.0\n" .
 "Content-Type: multipart/mixed;\n" .
 " boundary=\"{$mime_boundary}\"";*/
 
 $headers .= "Content-Type: multipart/alternative;\n";
 $headers .= " boundary=\"$boundary2\";\n\n";

 // Add a multipart boundary above the plain message
 $message = "This is a multi-part message in MIME format.\n\n" .
 "--{$mime_boundary}\n" .
 "Content-Type: text/plain; charset=\"iso-8859-1\"\n" .
 "Content-Transfer-Encoding: 7bit\n\n" .
 $message . "\n\n";

 // Base64 encode the file data
 $data = chunk_split(base64_encode($data));

 // Add file attachment to the message
 $message .= "--{$mime_boundary}\n" .
 "Content-Type: {$fileatt_type};\n" .
 " name=\"{$fileatt_name}\"\n" .
 //"Content-Disposition: attachment;\n" .
 //" filename=\"{$fileatt_name}\"\n" .
 "Content-Transfer-Encoding: base64\n\n" .
 $data . "\n\n" .
 "--{$mime_boundary}--\n";
}

// Send the message
$ok = @mail($to, $subject, $message, $headers);
if ($ok) {
 echo "<p>Mail sent! Yay PHP!</p>";
} else {
 echo "<p>Mail could not be sent. Sorry!</p>";
}
   
inviato 6 anni fa
surferbloggy
X 0 X

Che client di posta usi e che cosa ottieni?

Tu stai inviando un link ad una immagine...sbaglio?

;

$message = "<html><body><p><img src='http://miosito.com/emailimg.jpg'/></p>";

risposto 6 anni fa
Mario Santagiuliana
X 0 X

mi arriva solo testo così:

<html><body><p><img src='http://miosito.com/emailimg.jpg'/></p><p>ciao</p> </body> </html>

risposto 6 anni fa
surferbloggy
X 0 X

Metti questo:

// Generate a boundary string

 $semi_rand = md5(time());

 $mime_boundary = "==Multipart_Boundary_x{$semi_rand}x";

 // Add the headers for a file attachment

 $headers .= "\nMIME-Version: 1.0\n" .

 "Content-Type: multipart/html;\n" .

 " boundary=\"{$mime_boundary}\"";

/*  $headers .= "\nMIME-Version: 1.0\n" .

 "Content-Type: multipart/mixed;\n" .

 " boundary=\"{$mime_boundary}\"";*/

 $headers .= "Content-Type: multipart/alternative;\n";

 $headers .= " boundary=\"$boundary2\";\n\n";

Al di fuori dell'if, tu vuoi allegare una immagine dopo upload. Se non fai l'upload invii una email senza l'header.

risposto 6 anni fa
Mario Santagiuliana
X 0 X

ho messo $headers .= "Content-Type: text/html;\n";  $headers .= " boundary=\"$boundary2\";\n\n";   fuori dall'if ma è sempre testo io dovrei mandare contemporaneamente sia l'allegato che l'immagine in html ma non va

risposto 6 anni fa
surferbloggy
X 0 X

Ok, puoi recuperare il testo completo dell'email che ti arriva? (non quello che visualizzi dal tuo client di posta, tutto il file di testo dell'email).

Hai già letto questa guida?

http://www.webcheatsheet.com/php/send_email_text_html_attachment.php

risposto 6 anni fa
Mario Santagiuliana
X 0 X

grazie, questo codice nell'articolo che hai postato è html e allegato però non ho capito l'allegato se lo prende da un campo upload o dall'hd, vediamo se riesco a fargli mandare il file del campo upload come allegato grazie!!

risposto 6 anni fa
surferbloggy
X 0 X

ho modificato il codice così per allegare il file del campo upload ma mi manda un'email bianca, vuota senza allegato:

   
   //define the receiver of the email
$to = 'info@miosito.com';
//define the subject of the email
$subject = 'Test email with attachment';
//create a boundary string. It must be unique
//so we use the MD5 algorithm to generate a random hash
$random_hash = md5(date('r', time()));
//define the headers we want passed. Note that they are separated with \r\n
$headers = "From: info@website.com\r\nReply-To: webmaster@example.com";
//add boundary string and mime type specification
$headers .= "\r\nContent-Type: multipart/mixed; boundary=\"PHP-mixed-".$random_hash."\"";
//read the atachment file contents into a string,
//encode it with MIME base64,
//and split it into smaller chunks

//inizio codice aggiunto
//if (is_uploaded_file($fileatt)) {
 // Read the file to be attached ('rb' = read binary)
 $file = fopen($fileatt,'rb');
 $attachment = fread($file,filesize($fileatt));
 fclose($file);

 // Generate a boundary string
 $semi_rand = md5(time());
 $mime_boundary = "==Multipart_Boundary_x{$semi_rand}x";


 
  $headers .= "\nMIME-Version: 1.0\n" .
 "Content-Type: multipart/mixed;\n" .
 " boundary=\"{$mime_boundary}\"";
 


 // Add a multipart boundary above the plain message
 $message = "This is a multi-part message in MIME format.\n\n" .
 "--{$mime_boundary}\n" .
 "Content-Type: text/plain; charset=\"iso-8859-1\"\n" .
 "Content-Transfer-Encoding: 7bit\n\n" .
 $message . "\n\n";


 // Base64 encode the file data
 $attachment = chunk_split(base64_encode($attachment));

//fine codice aggiunto

//$attachment = chunk_split(base64_encode(file_get_contents('attachment.zip')));
//define the body of the message.
ob_start(); //Turn on output buffering
?>
--PHP-mixed-<?php echo $random_hash; ?> 
Content-Type: multipart/alternative; boundary="PHP-alt-<?php echo $random_hash; ?>"

--PHP-alt-<?php echo $random_hash; ?> 
Content-Type: text/plain; charset="iso-8859-1"
Content-Transfer-Encoding: 7bit

Hello World!!!
This is simple text email message.

--PHP-alt-<?php echo $random_hash; ?> 
Content-Type: text/html; charset="iso-8859-1"
Content-Transfer-Encoding: 7bit

<h2>Hello World!</h2>
<p>This is something with <b>HTML</b> formatting.</p>

--PHP-alt-<?php echo $random_hash; ?>--

--PHP-mixed-<?php echo $random_hash; ?> 
Content-Type: application/zip; name="attachment.zip" 
Content-Transfer-Encoding: base64 
Content-Disposition: attachment 

<?php echo $attachment; ?>
--PHP-mixed-<?php echo $random_hash; ?>--

<?php
//copy current buffer contents into $message variable and delete current output buffer
$message = ob_get_clean();
//send the email
$mail_sent = @mail( $to, $subject, $message, $headers );
//if the message is sent successfully print "Mail sent". Otherwise print "Mail failed"
echo $mail_sent ? "Mail sent" : "Mail failed"; 
   

con <input type="file" name="fileatt"><br>

risposto 6 anni fa
surferbloggy
modificato 6 anni fa
X 0 X

Hai già controllato eventuali errori presentati da apache?

P.S. perchè non usare Zend_Mail? A breve dovrebbe venire fuori una guida qui in phpnews.it su un uso base.

risposto 6 anni fa
Mario Santagiuliana
X 0 X

zend_mail devo istallare lo zend framework ma sono su wordpress, gli errori apache non li so controllare addirittura con questo script l'antivirus mi dava un segnale di allarme ma forse è perchè l'ho modificato male ho fatto qualche errore??

risposto 6 anni fa
surferbloggy
X 0 X

avevo dimenticato questo ma lo stesso:

   // Obtain file upload vars
$fileatt      = $_FILES['fileatt']['tmp_name'];
$fileatt_type = $_FILES['fileatt']['type'];
$fileatt_name = $_FILES['fileatt']['name'];
risposto 6 anni fa
surferbloggy
X 0 X

Inizia con il leggere gli ultimi errori che apache ti dice nei log. Da li procedi a risolverli uno alla volta.

risposto 6 anni fa
Mario Santagiuliana
X 0 X

Grazie, il codice dell'articolo che hai postato alla fine ha funzionato prima faccio l'upload e poi lo invio come allegato - ciao :bye:

risposto 6 anni fa
surferbloggy
X 0 X

Bene così  :)

risposto 6 anni fa
Mario Santagiuliana
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda