代码之家  ›  专栏  ›  技术社区  ›  jerrygarciuh

PHP mail()-HTML在添加文件附件后显示为附件

  •  1
  • jerrygarciuh  · 技术社区  · 14 年前

    有谁能从后面打我的头,或者告诉我哪里出了问题?我想要在邮件用户界面中可用的HTML内联,不可用HTML的纯文本版本,以及作为附件的单个附件。

    有什么帮助吗?

    <?php
    $template = $_SERVER['DOCUMENT_ROOT'] . '/leads/templates/'.$_SESSION['templateFile'];
    ob_start();
    include($template);
    $html = ob_get_contents();
    ob_end_clean();
    
    if (strlen($html) == 0) {
        echo "The template at $template did not load.";
        exit;
    }
    
    $email   = $_SESSION['user']->email;
    $name    = $_SESSION['user']->first_name . ' ' . $_SESSION['user']->last_name;
    $from = "$name <$email>";
    $subject = unslash($_SESSION['subject']);
    
    $TextMessage =  strip_tags(unslash($_SESSION['message']));
    
    $notice_text = "This is a multi-part message in MIME format.";
    $plain_text =  str_replace('&nbsp;',' ', $TextMessage);
    
    if ($_SESSION['attachment']) {
        $fileatt = 'files/' . $_SESSION['attachment'];
        $file = fopen($fileatt,'rb');
        $data = fread($file,filesize($fileatt));
        fclose($file);
        $data = chunk_split(base64_encode($data));
        $mailtype = 'mixed';
    
        $fileatt_type = "application/octet-stream"; 
        $fileatt_name = $_SESSION['attachment'];
    } else {
        $mailtype = 'alternative';
    }
    
    $semi_rand = md5(time());
    $mime_boundary = "==MULTIPART_BOUNDARY_$semi_rand";
    $mime_boundary_header = chr(34) . $mime_boundary . chr(34);
    
    $body = "$notice_text
    
    --$mime_boundary
    Content-Type: text/plain; charset=us-ascii
    Content-Transfer-Encoding: 7bit
    
    $plain_text
    
    --$mime_boundary
    Content-Type: text/html; charset=us-ascii
    Content-Transfer-Encoding: 7bit
    
    $html
    
    --$mime_boundary
    ";
    
    $body .= "Content-Type: {$fileatt_type};\n" .
    " name=\"{$fileatt_name}\"\n" .
    "Content-Disposition: attachment;\n" .
    "Content-Transfer-Encoding: base64\n\n" .
    $data . "\n\n" .
    "--$mime_boundary\n";
    
    
    
    // #1  //
    if ($to = $_SESSION['recipients'][0]) {
        mail($to, $subject, $body,
        "From: " . $from . "\n" .
        "MIME-Version: 1.0\n" .
        "Content-Type: multipart/$mailtype;\n" .
        "     boundary=" . $mime_boundary_header);
    
        echo "Email sent to " . htmlentities($to) . ".<br />";
    }
    
    
    // #2  //
    if ($to = $_SESSION['recipients'][1]) {
        mail($to, $subject, $body,
        "From: " . $from . "\n" .
        "MIME-Version: 1.0\n" .
        "Content-Type: multipart/$mailtype;\n" .
        "     boundary=" . $mime_boundary_header);
        echo "Email sent to " . htmlentities($to) . ".<br />";
    }
    
    // #3  //
    if ($to = $_SESSION['recipients'][2]) {
        mail($to, $subject, $body,
        "From: " . $from . "\n" .
        "MIME-Version: 1.0\n" .
        "Content-Type: multipart/$mailtype;\n" .
        "     boundary=" . $mime_boundary_header);
        echo "Email sent to " . htmlentities($to) . ".<br />";
    }
    
    // #4  //
    if ($to = $_SESSION['recipients'][3]) {
        mail($to, $subject, $body,
        "From: " . $from . "\n" .
        "MIME-Version: 1.0\n" .
        "Content-Type: multipart/$mailtype;\n" .
        "     boundary=" . $mime_boundary_header);
        echo "Email sent to " . htmlentities($to) . ".<br />";
    }
    
    // #5 //
    if ($to = $_SESSION['recipients'][4]) {
        mail($to, $subject, $body,
        "From: " . $from . "\n" .
        "MIME-Version: 1.0\n" .
        "Content-Type: multipart/$mailtype;\n" .
        "     boundary=" . $mime_boundary_header);
        echo "Email sent to " . htmlentities($to) . ".<br />";
    }
    
    // CC self?  //
    if ($_SESSION['cc_me']) {
        mail($from, $subject, $body,
        "From: " . $from . "\n" .
        "MIME-Version: 1.0\n" .
        "Content-Type: multipart/$mailtype;\n" .
        "     boundary=" . $mime_boundary_header);
        echo "Email sent to " . htmlentities($from) . ".<br />";
    }
    
    if ($fileatt) {
        unlink($fileatt);
    }
    
    echo "<a href='email_start.php'>Click here</a> to send another email.";
    list($_SESSION['email'], $_SESSION['subject'], $_SESSION['bullets'], $_SESSION['message'], 
        $_SESSION['templateFile'], $_SESSION['template'], $_SESSION['cc_me'], $_SESSION['recipients']) = '';
    ?>
    
    2 回复  |  直到 13 年前
        1
  •  2
  •   jerrygarciuh    14 年前
        2
  •  0
  •   quantumSoup    14 年前

    我想把这个作为评论发表,但太长了。

    // #1  //
    if ($to = $_SESSION['recipients'][0]) {
        mail($to, $subject, $body,
        "From: " . $from . "\n" .
        "MIME-Version: 1.0\n" .
        "Content-Type: multipart/$mailtype;\n" .
        "     boundary=" . $mime_boundary_header);
    
        echo "Email sent to " . htmlentities($to) . ".<br />";
    }
    
    
    // #2  ... #3 ... #4 ... #5
    

    将执行所有的块,因为 ($to = $_SESSION['recipients'][0]) 永远是真的。它还将显示“电子邮件发送到…”,即使 mail() 失败。

    你想要的是:

    if (in_array($to, $_SESSION['recipients'])) {
        if (mail($to, $subject, $body,
        "From: " . $from . "\n" .
        "MIME-Version: 1.0\n" .
        "Content-Type: multipart/$mailtype;\n" .
        "     boundary=" . $mime_boundary_header)) {
            echo "Email sent to " . htmlentities($to) . ".<br />";
        }
    }
    

    或者,如果你真的想给每个人发邮件,或者

    foreach ($_SESSION['recipients'] as $to ) {
        if (mail($to, $subject, $body,
        "From: " . $from . "\n" .
        "MIME-Version: 1.0\n" .
        "Content-Type: multipart/$mailtype;\n" .
        "     boundary=" . $mime_boundary_header)) {
            echo "Email sent to " . htmlentities($to) . ".<br />";
        }
    }