好的,我已经构建了以下功能,现在我已经使用了很长时间了:
/**
* 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分钟一次)选择一小段邮件。
您对发生的事情有解释吗,也许是另一种解决方案? 提前谢谢。