带附件的邮件不会发送HTML消息

时间:2012-03-26 18:40:06

标签: php sendmail email-attachments

我正在使用一个我发现通过附件发送邮件的课程,但是当我发送邮件时它不会出现。我正在尝试发送HTML消息,但即使是常规的也不发送。 无法发现错误。 电子邮件只发送消息为空 有人可以看一下吗?  代码:

<?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);
                }
            }
        }
    }
}

消息填充:

    $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 contact@shibby.co.il";

调用课程:

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

$test=$mailer->send();

1 个答案:

答案 0 :(得分:2)

用于发送带附件的邮件。

<?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 <Yourname@domainname.com>";
$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";

}
}

?>
相关问题