PHP邮件在某些条件下具有空体

时间:2014-10-27 16:39:22

标签: php html email

好的,我已经构建了以下功能,现在我已经使用了很长时间了:

/**
 * Sends an HTML e-mail with attachments
 *
 * @param  string $mailto       the e-mail receiver
 * @param  string $from_mail    the sender e-mail
 * @param  string $from_name    the sender name
 * @param  string $subject      the e-mail subject line
 * @param  string $messageText  the message
 * @param  array $files        the filenames (with path)
 * @param  string $replyto      where replies should be send
 * @param  boolean $isPlain if the message should be send as plain text and not html
 * @return boolean $success TRUE if the mail has been send
 */
function mail_attachment($mailto, $from_mail, $from_name, $subject, $messageText, $files = array(), $replyto = '', $isPlain = FALSE, $charset='iso-8859-1') {
    if ($replyto == '') {
        $replyto = $from_mail;
    }
    $messageType = ($isPlain ? 'plain' : 'html');
    $boundary = '==Multipart_Boundary_x' . md5(uniqid(time())) . 'x';
    $header  = 'From: ' . $from_name . ' <' . $from_mail . '>' . LF;
    $header .= 'Reply-To: ' . $replyto . LF;
    $header .= 'MIME-Version: 1.0' . LF ;
    $header .= 'Content-Type: multipart/mixed; boundary="' . $boundary . '"';
    $message = 'This is a multi-part message in MIME format' . LF . LF;
    $message .= '--' . $boundary . LF;
    $message .= 'Content-Type: text/' . $messageType . '; charset="' . $charset . '"' . LF;
    $message .= 'Content-Transfer-Encoding: 7bit' . LF . LF;
    $message .= $messageText . LF . LF;
    foreach ($files as $file) {
        if (is_file($file)) {
            $message .= '--' . $boundary . LF;
            $name = basename($file);
            $file_size = filesize($file);
            $type = substr(strrchr($file, "."), 1);;
            $handle = fopen($file, "r");
            $content = fread($handle, $file_size);
            fclose($handle);
            $content = chunk_split(base64_encode($content));
            $message .= 'Content-Type: application/' . $type . '; name="' . $name . '"' . LF; // use different content types here
            $message .= 'Content-Transfer-Encoding: base64' . LF ;
            $message .= 'Content-Disposition: attachment; filename="' . $name . '"' . LF . LF;
            $message .= $content . LF . LF;
        }
    }
    $message .= '--' . $boundary . '--';

    return mail($mailto, $subject, $message, $header);
}

现在我在内联网系统中使用,每月一次cronjob应该将个人html邮件发送给400多名用户。我用我自己的地址替换了所选的接收器进行了测试,我收到了所有400封邮件的个人内容。 我还测试了它的条件,只有当名称在白名单中时才发送电子邮件,以确保它们是否通过内部系统。 一切顺利,直到最终发布。现在,所有400名收件人都收到了一封空的电子邮件,上面只有主题和标题。

现在我正在考虑将所有邮件存储在一个临时表中,然后用另一个发送它们的cronjob(每5分钟一次)选择一小段邮件。

您对发生的事情有解释吗,也许是另一种解决方案? 提前谢谢。

0 个答案:

没有答案