发送文件附件思考PHP的mail()函数

时间:2010-12-01 21:40:54

标签: php email

我使用PHP的邮件功能发送电子邮件,但我需要附上一条包含该邮件的文件。

在大多数情况下,我认为将要附加的项目将是一个文本文件,如果必须,我可以将内容回显到电子邮件中,但我担心最终文件类型将变成PDF,Word文档等,因为对于将要上传文件的人来说,不会知道纯文本和他们自己的格式之间的区别。

2 个答案:

答案 0 :(得分:3)

有很多内容,我强烈建议您使用一个为您完成所有工作的软件包,例如PHPMailer

你可以花更多的时间去做,其他人已经完成了这项工作。

答案 1 :(得分:0)

<?php
$to = 'destination-address@somewhere.com';
$from = 'source@somewhere.com';
$subject = 'See Attachments';
$message = 'Please review the following attachments.';

// Define a list of FILES to send along with the e-mail. Key = File to be sent. Value = Name of file as seen in the e-mail.
$attachments = array(
    '/tmp/WEDFRTS' => 'first-attachment.png',
    '/tmp/some-other-file' => 'second-attachment.png'
);

// Define any additional headers you may want to include
$headers = array(
    'Reply-to' => 'source@somewhere.com',
    'Some-Other-Header-Name' => 'Header Value'
);

$status = mailAttachments($to, $from, $subject, $message, $attachments, $headers);
if($status === True) {
    print 'Successfully mailed!';
} else {
    print 'Unable to send e-mail.';
}




function mailAttachments($to, $from, $subject, $message, $attachments = array(), $headers = array(), $additional_parameters = '') {
    $headers['From'] = $from;

    // Define the boundray we're going to use to separate our data with.
    $mime_boundary = '==MIME_BOUNDARY_' . md5(time());

    // Define attachment-specific headers
    $headers['MIME-Version'] = '1.0';
    $headers['Content-Type'] = 'multipart/mixed; boundary="' . $mime_boundary . '"';

    // Convert the array of header data into a single string.
    $headers_string = '';
    foreach($headers as $header_name => $header_value) {
        if(!empty($headers_string)) {
            $headers_string .= "\r\n";
        }
        $headers_string .= $header_name . ': ' . $header_value;
    }

    // Message Body
    $message_string  = '--' . $mime_boundary;
    $message_string .= "\r\n";
    $message_string .= 'Content-Type: text/plain; charset="iso-8859-1"';
    $message_string .= "\r\n";
    $message_string .= 'Content-Transfer-Encoding: 7bit';
    $message_string .= "\r\n";
    $message_string .= "\r\n";
    $message_string .= $message;
    $message_string .= "\r\n";
    $message_string .= "\r\n";

    // Add attachments to message body
    foreach($attachments as $local_filename => $attachment_filename) {
        if(is_file($local_filename)) {
            $message_string .= '--' . $mime_boundary;
            $message_string .= "\r\n";
            $message_string .= 'Content-Type: application/octet-stream; name="' . $attachment_filename . '"';
            $message_string .= "\r\n";
            $message_string .= 'Content-Description: ' . $attachment_filename;
            $message_string .= "\r\n";

            $fp = @fopen($local_filename, 'rb'); // Create pointer to file
            $file_size = filesize($local_filename); // Read size of file
            $data = @fread($fp, $file_size); // Read file contents
            $data = chunk_split(base64_encode($data)); // Encode file contents for plain text sending

            $message_string .= 'Content-Disposition: attachment; filename="' . $attachment_filename . '"; size=' . $file_size.  ';';
            $message_string .= "\r\n";
            $message_string .= 'Content-Transfer-Encoding: base64';
            $message_string .= "\r\n\r\n";
            $message_string .= $data;
            $message_string .= "\r\n\r\n";
        }
    }

    // Signal end of message
    $message_string .= '--' . $mime_boundary . '--';

    // Send the e-mail.
    return mail($to, $subject, $message_string, $headers_string, $additional _parameters); }

reference