<?php 
echo "<form action='$PHP_SELF' enctype='multipart/form-data' method='post'>\n"; 
echo "<input type='text' name='from'><br>\n"; 
echo "<input type='text' name='to'><br>\n"; 
echo "<input type='text' name='subject'><br>\n"; 
echo "<input type='file' name='attachment'><br>\n"; 
echo "<textarea name='body'></textarea><br>\n"; 
echo "<input type='submit' name='send' value='Send'>\n"; 
echo "</form>\n"; # 如果用户已经按了"Send"按钮" 
if ($send) { 
$boundary = uniqid( ""); # 生成邮件头 
$headers = "From: $from 
Content-type: multipart/mixed; boundary=\"$boundary\""; # 确定上传文件的MIME类型 
if ($attachment_type) $mimeType = $attachment_type; 
# 如果浏览器没有指定文件的MIME类型, 
# 我们可以把它设为"application/unknown". 
else $mimeType = "application/unknown"; # 确定文件的名字 
$fileName = $attachment_name; # 打开文件 
$fp = fopen($attachment, "r"); 
# 把整个文件读入一个变量 
$read = fread($fp, filesize($attachment)); # 好,现在变量$read中保存的是包含整个文件内容的文本块。 
# 现在我们要把这个文本块转换成邮件程序可以读懂的格式 
# 我们用base64方法把它编码 
$read = base64_encode($read); # 现在我们有一个用base64方法编码的长字符串。 
# 下一件事是要把这个长字符串切成由每行76个字符组成的小块 
$read = chunk_split($read); # 现在我们可以建立邮件的主体 
$body = "--$boundary 
Content-type: text/plain; charset=iso-8859-1 
Content-transfer-encoding: 8bit $body --$boundary 
Content-type: $mimeType; name=$fileName 
Content-disposition: attachment; filename=$fileName 
Content-transfer-encoding: base64 $read --$boundary--"; # 发送邮件 
mail($to, $subject, $body, $headers); 

?>

解决方案 »

  1.   

    我要做成定时运行脚本,不用提交表单怎么带附件发送呢?
    --------------------------------------------no submit??? how can you  transmit the data of the mail to the mail server?
      

  2.   

    谢谢wasuka(被奴役的食尸鬼),我用你的方法发邮件,标题旁边有附件图标,打开邮件怎么没显示附件呢?
      

  3.   

    $attachment_type 的值怎么定义呢,我要发送的附件是EXCEL、.log、.txt?
      

  4.   

    如果是excel像这样,根据你的描述,估计是因为你的filename没有编码,所以客户端显示不出来。
    还有可以检查是不是少了空行。
    Content-Type: application/vnd.ms-excel;
    name="xxx"
    Content-Transfer-Encoding: base64
    Content-Disposition: attachment;
    filename="xxx"
      

  5.   

    怎么还是不行,我这么写的$to = "**@126.com";
    $from = "**@163.com";
    $subject = "subject";
    $attachment = "/www/logphp/f.xls";
    $fileName = "f.xls"; $boundary = uniqid(""); # 生成邮件头 
    $headers = "From: $from 
    Content-type: multipart/mixed; boundary=\"$boundary\""; # 打开文件 
    $fp = fopen($attachment, "r"); 
    # 把整个文件读入一个变量 
    $read = fread($fp, filesize($attachment)); # 好,现在变量$read中保存的是包含整个文件内容的文本块。 
    # 现在我们要把这个文本块转换成邮件程序可以读懂的格式 
    # 我们用base64方法把它编码 
    $read = base64_encode($read); # 现在我们有一个用base64方法编码的长字符串。 
    # 下一件事是要把这个长字符串切成由每行76个字符组成的小块 
    $read = chunk_split($read); # 现在我们可以建立邮件的主体 
    $body = "--$boundary 
    Content-type: text/plain; charset=iso-8859-1 
    Content-transfer-encoding: 8bit $body --$boundary 
    Content-Type: application/vnd.ms-excel;
    name=$fileName
    Content-Transfer-Encoding: base64
    Content-Disposition: attachment;
    filename=$fileName
    $read --$boundary--"; # 发送邮件 
    mail($to, $subject, $body, $headers);