douyang5943 2012-03-26 18:40
浏览 9
已采纳

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

I am using a class i found to email something with attachment, yet when i send the message it dosen't appear. i'm trying to send an HTML message but even a regular one dosen't send. Can't spot the error. The email sends fine only the message is empty Can someone take a look please? Code:

<?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 .= "
MIME-Version: 1.0
" .
                "Content-Type: multipart/mixed;
" .
                " boundary=\"{$this->mime_boundary}\"";
        $this->email_message .= "This is a multi-part message in MIME format.

" .
                "--{$this->mime_boundary}
" .
                "Content-Type:text/html; charset=\"iso-8859-1\"
".
                $email_message . "

";
    }

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

" .
        $data . "

" .
        "--{$this->mime_boundary}
";
        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 populate:

    $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";

calling the class:

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

$test=$mailer->send();
  • 写回答

1条回答 默认 最新

  • douye2488 2012-05-29 09:38
    关注

    For sending mail with attachment.

    <?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";
    
    }
    }
    
    ?>
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 python的qt5界面
  • ¥15 无线电能传输系统MATLAB仿真问题
  • ¥50 如何用脚本实现输入法的热键设置
  • ¥20 我想使用一些网络协议或者部分协议也行,主要想实现类似于traceroute的一定步长内的路由拓扑功能
  • ¥30 深度学习,前后端连接
  • ¥15 孟德尔随机化结果不一致
  • ¥15 apm2.8飞控罗盘bad health,加速度计校准失败
  • ¥15 求解O-S方程的特征值问题给出边界层布拉休斯平行流的中性曲线
  • ¥15 谁有desed数据集呀
  • ¥20 手写数字识别运行c仿真时,程序报错错误代码sim211-100