澳门新浦京8455com用php发送带附件的Email

参照他事他说加以考查了须臾间网络的小说。古语说,天下小说一大抄,看你会抄不会抄。关键是能为笔者所用,那是最根本的。废话不多讲,let‘s
go。 其实发mail异常粗略,php有现有的函数,能够参照php 的
manual,极度是第八个例子,讲的很详细。
关键是怎么把上传附属类小构件跟邮件发送结合起来。关于文件的上传,能够参照他事他说加以考察那篇随笔。 讲一下 文件上传的法子及其脾性:
大家假使文件上传字段的名号如上例所示,为 userfile。名称可随便命名。
表单里能够这么写: input type=file name=userfile
提交之后,php利用$_FILES 数组 自动获得有关参数:
$_FILES[‘userfile’][‘name’] 顾客端机器文件的原名称。
$_FILES[‘userfile’][‘type’] 文件的 MIME
类型,必要浏览器提供该音讯的支撑,比如“image/gif”。
$_FILES[‘userfile’][‘size’] 已上传文件的轻重缓急,单位为字节。
$_FILES[‘userfile’][‘tmp_name’]
文件被上传后在服务端积攒的一时文件名。 $_FILES[‘userfile’][‘error’]
和该公文上传相关的错误代码。[‘error’] 是在 PHP 4.2.0 版本中追加的。

1.上传表单 upload.html

注: 在 PHP 4.1.0 版本早先该数组的名为 $HTTP_POST_FILES,它并不像
$_FILES 肖似是机关全局变量。PHP 3 不扶持 $HTTP_POST_FILES 数组。 当
php.ini 中的 register_globals 棉被服装置为 on
时,您能够利用更加的多的变量。譬如,$userfile_name 等价于
$_FILES[‘userfile’][‘name’],$userfile_type 等价于
$_FILES[‘userfile’][‘type’] 等。请深深记住从 PHP 4.2.0
开头,register_globals 的暗许值为
off,因而大家提出您不要依赖于改设置项而使用刚刚提到的那叁个附加变量。
文件被上传后,暗中认可地会被贮存到服务端的暗中同意不常目录中,除非你将 php.ini
中的 upload_tmp_dir
设置为了其余的不二等秘书诀。服务端的暗中认可不经常目录可以经过更动 PHP
运维条件的情形变量 TMPDI智跑 来再一次安装,可是在 PHP 脚本内部通过运转putenv()函数来安装是不起功效的。该情形变量也得以用来认同别的的操作也是在上传的文本上海展览中心开的。
有了那些,大家再看与邮件相关的事物。上边是二个带附属类小零件电子邮件的事例。

复制代码 代码如下:

Return-Path: Date: Mon, 22 May 2000 19:17:29 +0000 From: Someone To:
Person Message-id: 83729KI93LI9214@example.com Content-type:
multipart/mixed; boundary=”396d983d6b89a” Subject: Here’s the subject
–396d983d6b89a Content-type: text/plain; charset=iso-8859-1
Content-transfer-encoding: 8bit

<form enctype=”multipart/form-data” action=”upload.php”
method=”post”>
<input type=”hidden” name=”max_file_size” value=”100000″>
<input name=”userfile” type=”file”>  
<input type=”submit” value=”上传文件”>
</form>

This is the body of the email.

1.小心<form
enctype=”multipart/form-data”……>那是一个标签,我们要完结公文的上传,必需钦点为multipart/form-data,不然服务器将不知晓要怎么。
2.值得注意的是文件upload.html中表单选项 MAX_FILE_SIZE
的隐讳值域,通过设置其Value(值卡塔尔能够限定上载文件的轻重。
3.MAX_FILE_澳门新浦京8455com ,SIZE
的值只是对浏览器的二个提出,实际上它可以被略去的绕过。由此不用把对浏览器的约束寄希望于该值。实际上,PHP
设置中的上传文件最大值,是不会失灵的。不过最为依然在表单中增长MAX_FILE_SIZE,因为它能够制止客户在花时间等待上传大文件从此以后才发觉该文件太大了的分神。

–396d983d6b89a Content-type: text/html; name=attachment.html
Content-disposition: inline; filename=attachment.html
Content-transfer-encoding: 8bit

PHP上传文件涉及到的参数

This is the attached HTML file

复制代码 代码如下:

–396d983d6b89a–

$f=&$HTTP_POST_FILES[‘Myfile’];
$dest_dir=’uploads’;//设定上传目录
$dest=$dest_dir.’/’.date(“ymd”).”_”.$f[‘name’];//设置文件名字为日期加上文件名幸免双重
$r=move_uploaded_file($f[‘tmp_name’],$dest);
chmod($dest, 0755State of Qatar;//设定上传的文件的习性

前方的7行是邮件的头,当中值得注意的是Content-type底部分。那么些头告诉邮件程序电子邮件是由二个以上的一部分组成的。不含附属类小零器件的邮件唯有二个片段:音信小编。带附属类小零件的电子经常最少由两某些构成:信息和附属类小零件。这样,带五个附属类小零件的邮件由三局地构成:新闻,第八个附属类小构件和第二个附属类小零部件。

或者

带附属类小零部件的电子邮件的分裂部分之间用汾水陵来分隔。分水岭在Content–type头中定义。邮件的各类新部分以五个连字号和分水岭起初。
最后一个分水岭后也许有三个连字号,表示那个邮件中并未有此外的片段了。

<?copy($_FILES[MyFile][tmp_name],$_FILES[MyFile][name]);?>

上述楷模中 $_FILES 数组的剧情如下所示。我们只要文件上传字段的名字为userfile(名称可自由命名)

复制代码 代码如下:

$_FILES[‘userfile’][‘name’] 顾客端机器文件的原名称。
$_FILES[‘userfile’][‘type’] 文件的 MIME
类型,须求浏览器提供该音讯的扶植,比方“image/gif”。
$_FILES[‘userfile’][‘size’] 已上传文件的轻重,单位为字节。
$_FILES[‘userfile’][‘tmp_name’]
文件被上传后在服务端积攒的不常文件名。
$_FILES[‘userfile’][‘error’] 和该公文上传相关的错误代码

值:0; 没错误发生,文件上传成功。
值:1; 上传的文书当先了 php.ini 中 upload_max_filesize
选项约束的值。
值:2; 上传文件的轻重缓急抢先了 HTML 表单中 MAX_FILE_SIZE 选项钦点的值。
值:3; 文件唯有一部分被上传。
值:4; 未有公文被上传。

PHP私下认可的上传约束是最大2M,想上传当先此设定的文本,须求调解PHP、apache等的局地参数.
上面,我们简介一下PHP文件上传涉及到的一对参数:

file_uploads
是或不是允许通过HTTP上传文件的开关,默以为ON便是开

upload_tmp_dir
upload_tmp_dir用来评释PHP上传的文件放置的有时目录,要想上传文件,得保障服务器并未有关闭一时文件和有对文本夹的写权限,如若未钦定则PHP使用系统暗中同意值

upload_max_filesize
同意上传文件大小的最大值,默以为2M

复制代码 代码如下:

<?php
define(‘MUILTI_FILE_UPLOAD’, ’10’卡塔尔(قطر‎; //最多12个文本同不时间上传
define(‘MAX_SIZE_FILE_UPLOAD’, ‘500000’ 卡塔尔; //文件大小不超过5MB
define(‘FILE_UPLOAD_DIPRADO’, ‘d:/’卡塔尔国; //上传文件的目录
//允许上传的文书名
$array_extention_interdite = array( ‘.php’ , ‘.php3’ , ‘.php4’ ,
‘.exe’ , ‘.msi’ , ‘.htaccess’ , ‘.gz’ State of Qatar; //上传文件的恢宏名

//呈现新闻的公家函数
function func_message($message=”, $ok=”){
echo ‘<table width=”100%” cellspacing=”0″ cellpadding=”5″>’;
if($ok == true){
echo ‘<tr bgcolor=”#99FF99″ ><td
width=”100″> </td><td class= “text”>
‘.$message.'</td></tr>’ ;
}
if($ok == false){
echo ‘<tr bgcolor=”#FF99CC” ><td
width=”100″> </td><td class=”text”>
‘.$message.'</td></tr>’;
}
echo ‘</table>’;
}
//管理表单提交
$action = (isset($_POST[‘action’])) ? $_POST[‘action’] :” ;
$file = (isset($_POST[‘file’])) ? $_POST[‘file’] :” ;
if($file != ”) {
$file = $file.’/’;
}
$message_true = ”;
$message_false = ”;

switch($action){
case ‘upload’ :
chmod(FILE_UPLOAD_DIR,0777);
for($nb = 1 ; $nb <= MUILTI_FILE_UPLOAD ; $nb ++ ){
if( $_FILES[‘file_’.$nb][‘size’] >= 10 ){
if ($_FILES[‘file_’.$nb][‘size’] <= MAX_SIZE_FILE_UPLOAD
){
if
(!in_array(ereg_replace(‘^[[:alnum:]]([-_.]?[[:alnum:]])*.’
,’.’, $_FILES[‘file_’.$nb][‘name’] ) ,
$array_extention_interdite) ){
if($_POST[‘file_name_’.$nb] !=”){
$file_name_final = $_POST[‘file_name_’.$nb].$extension ;
}else {
$file_name_final = $_FILES[‘file_’.$nb][‘name’] ;
}
//文件名的改造
$file_name_final = strtr($file_name_final, ‘aaaaaa’,
‘AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy’);
$file_name_final = preg_replace(‘/([^.a-z0-1]+)/i’, ‘_’, $file_
name_final );

$_FILES[‘file_’.$nb][‘name’] = $file_name_final;
move_uploaded_file( $_FILES[‘file_’.$nb][‘tmp_name’] ,
FILE_UPLOAD_ DIR . $file . $file_name_final );

$message_true .= ‘已经上传文件 : ‘.$_FILES[‘file_’.$nb][‘name’]
.'<br>’;
}else{
$message_false .= ‘文件上传失败 : ‘.$_FILES[‘file_’.$nb][‘name’]
.’ <br>’;
}
}else{
$message_false .= ‘文件尺寸超过’.MAX_SIZE_FILE_UPLOAD/1000 . ‘KB : ”
‘.$_FILES[‘file_’.$nb][‘tmp_name’].'” <br>’;}
}
}//end for
break;
}
?>
<html>
<head>
<title>多文本上传</title>
<style>
.border{background-color:#000000}
.box{background-color:#f8f8f9;}
.text{ color:#000000;
font-family: 宋体;
font-size: 12px;
font-weight:bold}
input, select{font-size: 12px;}
body {
margin-top: 8px;
}
</style>
<meta http-equiv=”Content-Type” content=”text/html;
charset=gb2312″></head>
<body marginwidth=”0″ bottommargin=”0″ leftmargin=”0″
rightmargin=”0″>
<form name=”form” enctype=”multipart/form-data” method=”post”
action=”<?php echo $_SERVER[‘PHP_SELF’] ; ?>”>
<input type=”hidden” name=”action” value=”upload”>
<table border=”0″ cellspacing=”1″ cellpadding=”0″ align=”center”
class=”border”>
<tr>
<td>
<?php
if($message_true != ”) { func_message($message_true, true); }
if($message_false != ”){ func_message($message_false, false); }
?>
<table width=”100%” border=”0″ cellspacing=”5″ cellpadding=”2″
align=”center” class=”box”>
<?php
for($nb = 1 ; $nb <= MUILTI_FILE_UPLOAD ; $nb ++ ){
?>
<tr class=”text”>
<td>上传文件: <?php echo $nb; ?></td>
<td><input type=”file” name=”file_<?php echo $nb;
?>”></td>
<td>新文件名(包蕴扩展名):<?php echo $nb; ?>
</td><td><input type=”text” name=”file_name_<?php
echo $nb; ?>”></td>
</tr>
<?php } ?>
<tr>
<td colspan=”2″ align=”right” class=”text”>上传指标地方:<?php
echo FILE_UPLOAD_DIR ;?>
<select name=”file”>
<option value=””></option>
<?php
$repertoire = opendir(FILE_UPLOAD_DIR);
while( $file = readdir($repertoire) ) {
$file = str_replace(‘.’,”,$file);
if( is_dir($file)) {
?>
<option value=”<?php echo $file; ?>”> <?php echo $file;
?>/</option>
<?php
}
}
closedir($repertoire);
?>
</select>
</td>
<td colspan=”2″ align=”right”><input type=”submit”
value=”可同不常候上传<?php echo $nb-1; ?> 个文件 “></td>
</tr>
</table>
</td>
</tr>
</table>
</form>
</body>
</html>

在每种分割线后有一部分行,用来告诉邮件程序这一个片段的内容的花色。
举个例子,看看下面例子中第二个分割线后边的两行–以Content-type:
text/plain开始的行。这一个行表明后边的部分是ISO-8859-1字符集的纯文本。跟在其次个分割线后的行告诉邮件程序现在的有的是一个HTML文件,它的名字是”attachment.html”。

你恐怕感兴趣的篇章:

  • 功效齐全的PHP发送邮件类代码附详细表明
  • PHP 文件上传作用实今世码
  • ajax+php 谷歌(Google卡塔尔(قطر‎搜索框自动填写功能实例代码
  • php利用iframe达成无刷新文件上传功用的代码
  • 用PHP+MySQL搭建闲谈室功效实例代码
  • php流量计算功效的落到实处代码
  • PHP达成下载效用的代码
  • php多文件上传功用完毕原理及代码
  • 8个必备的PHP效用实例代码
  • php编写的简洁明了页面跳转职能实今世码
  • php完成公文下载功能的多少个代码分享
  • 享用10段PHP常用代码

Content-disposition那持告诉邮件程序一旦可能就以内嵌的法门展现附属类小零器件。将来新的邮件程序会在信息后出示HTML的内容。要是Content-
disposition被设为attachment,那么邮件程序就不会显得HTML文件的从头到尾的经过,而是展现贰个连连到文件的Logo。收件人要看附属类小构件的源委,必需点击这么些Logo。平日情状下,假使附属类小构件是一对文书,Content-disposition会被设为inline,那是因为明天津高校部分邮件程序能够不依赖其余浏览器而向来体现附属类小零器件的开始和结果。假诺附属类小零件不是文件,Content-disposition
就设为attachment。 我们仿照上边的例子,本身写八个php程序,能够对交付的
收信人,发送给外人,信件内容,附属类小构件实行管理。
首先创立一个静态页面,代码如下: html body form method=post name=sndml
action=sendmail.php ENCTYPE=”multipart/form-data” table tr td发送者:/td
tdinput type=text name=from /td /tr tr td选拔者:/td tdinput type=text
name=to /td /tr tr td下载提示:/td tdinput type=text name=text /td /tr
tr td源数据文件:/td tdinput type=file name=upload_file size=40/td /tr
trtd&nbsp/td tdinput type=”submit” value=”鲜明” /td /tr /table /form
/body /html 要留神的是 : 表单里 ENCTYPE=”multipart/form-data”
必需求有。 再来看一下 发送邮件的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”State of Qatar; // 把整个文件读入二个变量 $read =
fread($fp, filesize($file卡塔尔国卡塔尔国; //大家用base64方法把它编码 $read =
base64_encode($read卡塔尔国; //把这一个长字符串切成由每行柒十九个字符组成的小块
$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 sendbr”; else print “fail to send
mail br”; ? 看不掌握不要紧,笔者来证实一下: 1,邮件头的协会 :日常包括内容类型要发送附属类小部件,设置为 multipart/mixed 意思是八个部分 。 boundary
,就是下面提到的汾水陵,他的值用php自带的 uniqid(State of Qatar;函数获得采用方,抄送等,在后头加上 From: Cc:。与地方的 Content-type boundary
之间用 /r/n 分割 。 2 邮件体 借使是纯文本的邮件内容 它的格式如下:
Content-type: text/plain; charset=iso-8859-1 Content-transfer-encoding:
8bit 前面再接着加上 邮件的文本内容。 尽管是附属类小构件: 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字符。
好了,现在再去看这段程序,应该没什么难题了吧?把相应的变量带入mail函数里面就ok了。
以上程序在 PHP Version 4.3.8 freeBSD 下测量试验通过。 参考小说:《php
发送带附属类小构件的邮件 小编: cn-linux》

You can leave a response, or trackback from your own site.

Leave a Reply

网站地图xml地图