首页 » Linux » PHP » 阅读文章
php发送带附件的Email
示例
静态页index.html
<html> <body> <form method=post name=sndml action=sendmail.php ENCTYPE="multipart/form-data"> <table> <tr ><td>发送者:</td> <td><input type=text name=from ></td> </tr> <tr ><td>接受者:</td> <td><input type=text name=to ></td> </tr> <tr ><td>下载提示:</td> <td><input type=text name=text ></td> </tr> <tr ><td>源数据文件:</td> <td><input type=file name=upload_file size=40></td> </tr> <tr><td> </td> <td><input type="submit" value="确定"> </td> </tr> </table> </form> </body> </html>
sendmail.php
<?php //文本内容 $text = $_POST['text']; //标题 $subject = $_POST['subject']; //发送者 $from = $_POST['from']; //接受者 $to = $_POST['to']; //附件 $file = $_FILES['upload_file']['tmp_name']; // 定义分界线 $boundary = uniqid( ""); $headers = "Content-type: multipart/mixed; boundary= $boundary\r\n"; $headers .= "From:$from\r\n"; //确定上传文件的MIME类型 if($_FILES['upload_file']['type']) $mimeType = $_FILES['upload_file']['type']; else $mimeType ="application/unknown"; //文件名 $fileName = $_FILES['upload_file']['name']; // 打开文件 $fp = fopen($file, "r"); // 把整个文件读入一个变量 $read = fread($fp, filesize($file)); //我们用base64方法把它编码 $read = base64_encode($read); //把这个长字符串切成由每行76个字符组成的小块 $read = chunk_split($read); //现在我们可以建立邮件的主体 $body = "--$boundary Content-type: text/plain; charset=iso-8859-1 Content-transfer-encoding: 8bit $text --$boundary Content-type: $mimeType; name=$fileName Content-disposition: attachment; filename=$fileName Content-transfer-encoding: base64 $read --$boundary--"; //发送邮件 if(mail($to, $subject,$body,$headers)) print "OK! the mail $from --- $to has been send<br>"; else print "fail to send mail <br>"; ?>
说明:
1.邮件头的构造 :一般包括
内容类型(Content-type)要发送附件,设置为 multipart/mixed 意思是多个部分 (邮件本身+附件)。
boundary ,就是上面提到的分界线,他的值用php自带的 uniqid();函数取得
接受方,抄送等,在后面加上 From: Cc:。与上面的 Content-type boundary 之间用 \r\n 分割 。
2 .邮件体
如果是纯文本的邮件内容 它的格式如下:
Content-type: text/plain; charset=iso-8859-1
Content-transfer-encoding: 8bit
后面再紧接着加上 邮件的文本内容。
3.附件:
Content-type: $mimeType; name=$fileName
Content-disposition: attachment; filename=$fileName
Content-transfer-encoding: base64
后面再紧接着加上 附件内容。
$mimeType 是附件的 MIME类型。 可以用 $_FILES['upload_file']['type'] 得到。
$fileName 就是附件的名字了
邮件文本内容和附件之间用 boundary 分割。
附件内容就是用read函数读入所上传的附件,然后再把它经过base64编码之后再用chunk_split 大卸N块,每块大小是默认的76字符。
示例下载:http://dl.dbank.com/c039itqd4k
声明: 本文由Ezencart原创,转载请保留链接:php发送带附件的Email
评论 共0条 (RSS 2.0) 发表评论