用php发送带附件的Email_php基础_脚本之家

参谋了须臾间网络的篇章。常言说,天下文章第一次全国代表大会抄,看您会抄不会抄。关键是能为笔者所用,这是最重要的。废话十分少讲,let‘s
go。 其实发mail很简短,php有现存的函数,能够参照他事他说加以调查php 的
manual,极其是第三个例证,讲的很详细。
关键是怎么把上传附属类小零器件跟邮件发送结合起来。关于文件的上传,能够参照他事他说加以考查
那篇文章。 讲一下 文件上传的主意及其性质:
大家假设文件上传字段的名目如上例所示,为 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 版本中扩张的。

注: 在 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

This is the body of the email.

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

This is the attached HTML file

–396d983d6b89a–

后面包车型客车7行是邮件的头,当中值得注意的是Content-type底部分。那一个头告诉邮件程序电子邮件是由叁个之上的有的构成的。不含附属类小零部件的邮件唯有多个有个别:新闻作者。带附属类小零件的电子平常起码由两有的构成:音信和附件。那样,带八个附属类小零器件的邮件由三片段构成:音讯,第一个附属类小零件和第二个附属类小构件。

带附属类小零器件的电子邮件的两样部分之间用分水岭来分隔。分水岭在Content–type头中定义。邮件的各种新部分以四个连字号和分水线早前。
最终三个汾水陵后也可能有五个连字号,表示那个邮件中未有别的的某个了。

在各样分水线后有一部分行,用来告诉邮件程序那个部分的内容的种类。
比如,看看上边例子中率先个分水线前边的两行–以Content-type:
text/plain开头的行。那几个行表达前面包车型客车局地是ISO-8859-1字符集的纯文本。跟在第一个分割线后的行告诉邮件程序今后的一部分是贰个HTML文件,它的名字是”attachment.html”。

Content-disposition那持告诉邮件程序一旦可能就以内嵌的点子显示附属类小构件。今后新的邮件程序会在新闻后出示HTML的原委。假设Content-
disposition被设为attachment,那么邮件程序就不交易会示HTML文件的故事情节,而是突显贰个三番五遍到文件的Logo。收件人要看附属类小零部件的始末,必得点击那么些Logo。日常情形下,要是附属类小零件是有些文书,Content-disposition会被设为inline,这是因为以往相当多邮件程序能够不正视任何浏览器而直接呈现附属类小零件的剧情。倘诺附件不是文件,Content-disposition
就设为attachment。 大家仿照上面包车型地铁例证,自个儿写三个php程序,能够对交付的
收信人,发赠给他人,信件内容,附属类小零器件进行处理。
首先创设一个静态页面,代码如下:

要潜心的是 : 表单里 ENCTYPE=”multipart/form-data” 必须求有。 再来看一下
发送邮件的php程序:

// 展开文件 $fp = fopen; // 把全副文件读入叁个变量 $read = fread;
//大家用base64方法把它编码 $read = base64_encode;
//把那一个长字符串切成由每行七二十个字符组成的小块 $read = chunk_split;
//未来大家能够建构邮件的主心骨 $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卡塔尔(قطر‎State of Qatar print
“OK! the mail $from — $to has been send
“; else print “fail to send mail
“; ?> 看不知晓不要紧,小编来验证一下: 1,邮件头的构造 :平日包含内容类型要发送附属类小零器件,设置为 multipart/mixed 意思是三个部分 。 boundary
,正是地点提到的分割线,他的值用php自带的 uniqid(卡塔尔(قطر‎;函数取得接纳方,抄送等,在末端加上 From: Cc:。与地点的 Content-type boundary
之间用 rn 分割 。 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》

发表评论

电子邮件地址不会被公开。 必填项已用*标注