2012-03-26 35 views
0

Ich verwende eine Klasse, die ich gefunden habe, um etwas mit Anhang zu mailen, aber wenn ich die Nachricht sende, wird es nicht angezeigt. Ich versuche, eine HTML-Nachricht zu senden, aber auch eine normale Nachricht wird nicht gesendet. Kann den Fehler nicht erkennen. Die E-Mail sendet nur die Nachricht ist leer Kann jemand bitte einen Blick darauf werfen? Code:Mail mit Anhang keine HTML-Nachricht senden

<?php 

class mailer{ 
    var $email_to; 
    var $email_subject; 
    var $headers; 
    var $mime_boundary; 
    var $email_message; 

    //sets up variables and mail email 
    function mailer($email_to,$email_subject,$email_message,$headers){ 
     $this->email_to=$email_to; 
     $this->email_subject=$email_subject; 
     $this->headers = $headers; 
     $semi_rand = md5(time()); 
     $this->mime_boundary = "==Multipart_Boundary_x{$semi_rand}x"; 
     $this->headers .= "\nMIME-Version: 1.0\n" . 
       "Content-Type: multipart/mixed;\n" . 
       " boundary=\"{$this->mime_boundary}\""; 
     $this->email_message .= "This is a multi-part message in MIME format.\n\n" . 
       "--{$this->mime_boundary}\n" . 
       "Content-Type:text/html; charset=\"iso-8859-1\"\n". 
       $email_message . "\n\n"; 
    } 

    //adds attachment 
    function attach($fileatt_type,$fileatt_name,$fileatt_content){ 
     $data = chunk_split(base64_encode($fileatt_content)); 
     $this->email_message .= "--{$this->mime_boundary}\n" . 
     "Content-Type: {$fileatt_type};\n" . 
     " name=\"{$fileatt_name}\"\n" . 
     "Content-Transfer-Encoding: base64\n\n" . 
     $data . "\n\n" . 
     "--{$this->mime_boundary}\n"; 
     unset($data); 
     unset($file); 
     unset($fileatt); 
     unset($fileatt_type); 
     unset($fileatt_name); 
    } 

    //send email 
    function send(){ 
     return mail($this->email_to, $this->email_subject, $this->email_message, $this->headers); 
    } 



    //extra functions to make life easier 

    //send email with imap 
    function imap_send(){ 
     return imap_mail($this->email_to, $this->email_subject, $this->email_message, $this->headers); 
    } 

    //read file and add as attachment 
    function file($file){ 
     $o=fopen($file,"rb"); 
     $content=fread($o,filesize($file)); 
     fclose($o); 
     $name=basename($file); 
     $type="application/octet-stream"; 
     $this->attach($type,$name,$content); 
    } 

    //read directory and add files as attachments 
    function dir($dir){ 
     $o=opendir($dir); 
     while(($file=readdir($o)) !==false){ 
      if($file != "." && $file != ".."){ 
       if(is_dir($dir."/".$file)){ 
        $this->dir($dir."/".$file); 
       }else{ 
        $this->file($dir."/".$file); 
       } 
      } 
     } 
    } 
} 

Nachricht bevölkern:

$message = "<span style='color:red;'>NOTICE: test tesx.."; 
$message .= "test text"; 
$message .= "Please text test.</span>"; 
$message .= "If you encounter any problems please contact at [email protected]"; 

die Klasse aufrufen:

 $mailer=new mailer($mail_to,$subject,$message,"From: $from_mail"); 
$mailer->file($fileName); 

$test=$mailer->send(); 
+0

Welche Fehler bekommen Sie? –

+0

Keine Fehler E-Mail sendet ohne die Nachricht. Datei fügt nur das HTML-Dosent hinzu –

+0

Wie bevölkern Sie $ email_message? –

Antwort

2

Für Mail mit Anhang senden.

<?php 

//If there is no error, send the email 
if(isset($_POST['ur_submit_button_name'])) { 
$uname=$_POST['uname']; 
$to = $_POST['mailid']; 
$mobileno=$_POST['mobile']; 
$location=$_POST['location']; 
$from = "Yourname <[email protected]>"; 
$subject = "This is the subject"; 

$separator = md5(time()); 

// carriage return type (we use a PHP end of line constant) 
$eol = PHP_EOL; 

// attachment name 
$filename = "ip.zip";//store that zip file in ur root directory 
$attachment = chunk_split(base64_encode(file_get_contents('ip.zip'))); 

// main header 
$headers = "From: ".$from.$eol; 
$headers .= "MIME-Version: 1.0".$eol; 
$headers .= "Content-Type: multipart/mixed; boundary=\"".$separator."\""; 

// no more headers after this, we start the body! // 

$body = "--".$separator.$eol; 
$body .= "Content-Transfer-Encoding: 7bit".$eol.$eol; 
$body .= "This is a MIME encoded message.".$eol; 

// message 
$body .= "--".$separator.$eol; 
$body .= "Content-Type: text/html; charset=\"iso-8859-1\"".$eol; 
$body .= "Content-Transfer-Encoding: 8bit".$eol.$eol; 
$body .= $message.$eol; 

// attachment 
$body .= "--".$separator.$eol; 
$body .= "Content-Type: application/octet-stream; name=\"".$filename."\"".$eol; 
$body .= "Content-Transfer-Encoding: base64".$eol; 
$body .= "Content-Disposition: attachment".$eol.$eol; 
$body .= $attachment.$eol; 
$body .= "--".$separator."--"; 

// send message 
if (mail($to, $subject, $body, $headers)) { 
$mail_sent=true; 
echo "mail sent"; 
} else { 
$mail_sent=false; 
echo "Error,Mail not sent"; 

} 
} 

?> 
+0

Ur fehlt ein Code Ich nehme an –

+0

Es funktioniert nur gut.Sie ​​können es sicherlich versuchen. –

+0

Dies ist ein alter Thread, aber es hat ein neues Problem für mich gelöst. Ich bekam plötzlich einen Fehler, "Mehrere oder falsch formatierte Zeilenumbrüche in zusätzlichen_Köpfen". Keine der "Lösungen", die ich online fand, funktionierte für mich (und es gab viele). Eine erweiterte Suche hat diesen Thread gefunden und es hat das Problem gelöst !! – seveninstl