用PHP发送有附件的电子邮件
- 格式:doc
- 大小:37.50 KB
- 文档页数:6
构建postfix邮件服务器(一)1、编译安装Postfix[root@mail ~]# groupadd -g 1200 postdrop[root@mail ~]# groupadd -g 1000 postfix[root@mail ~]# useradd -M -s /sbin/nologin -u 1000 -g postfix -G postdrop postfix[root@mail ~]# tar zxf postfix-2.4.6.tar.gz[root@mail ~]# gunzip postfix-2.4.6-vda-ng.patch.gz[root@mail ~]# cd postfix-2.4.6[root@mail postfix-2.4.6]# patch -p1 < ../postfix-2.4.6-vda-ng.patchpatching file README_FILES/VDA_READMEpatching file src/global/mail_params.hpatching file src/util/file_limit.cpatching file src/virtual/mailbox.cpatching file src/virtual/maildir.cpatching file src/virtual/virtual.cpatching file src/virtual/virtual.h[root@mail postfix-2.4.6]#预配置编译参数[root@mail postfix-2.4.6]# make makefiles \'CCARGS=-DHAS_MYSQL -I/usr/local/mysql/include/mysql \-DUSE_SASL_AUTH \-DUSE_CYRUS_SASL -I/usr/include/sasl' \'AUXLIBS=-L/usr/local/mysql/lib/mysql -lmysqlclient -lz -lm \-L/usr/lib/sasl2 -lsasl2 ' && make && make install //编译并进行安装Postfix的配置文件(Postfix系统最主要的配置文件包括:/etc/postfix/main.cf 和/etc/postfix/master.cf.前者是postfix服务的配置文件,后者是master程序的配置文件)[root@mail postfix-2.4.6]# postconf –n //-n 将只列出不同于默认值的配置参数command_directory = /usr/sbinconfig_directory = /etc/postfixdaemon_directory = /usr/libexec/postfixdebug_peer_level = 2html_directory = nomail_owner = postfixmailq_path = /usr/bin/mailqmanpage_directory = /usr/local/mannewaliases_path = /usr/bin/newaliasesqueue_directory = /var/spool/postfixreadme_directory = nosample_directory = /etc/postfixsendmail_path = /usr/sbin/sendmailsetgid_group = postdropunknown_local_recipient_reject_code = 550[root@mail postfix-2.4.6]#[root@mail postfix-2.4.6]# cd /etc/postfix/[root@mail postfix]# postconf -n > main2.cf[root@mail postfix]# mv main.cf main.cf.bak[root@mail postfix]# mv main2.cf main.cfPostfix的启动控制[root@mail postfix]# postfix startpostfix/postfix-script: starting the Postfix mail system[root@mail postfix]# netstat -anpt | grep :25tcp 0 0 0.0.0.0:25 0.0.0.0:* LISTEN 1995/master[root@mail postfix]# postfix check //若配置无误,不会反馈任何信息[root@mail postfix]# postfix reload //重新载入配置信息,而不需要重启Postfix服务postfix/postfix-script: refreshing the Postfix mail system[root@mail postfix]# postfix stoppostfix/postfix-script: stopping the Postfix mail system[root@mail postfix]#配置基于Postfix构建简单电子邮件系统:1、编辑main.cf文件,调整运行Postfix的基本参数[root@mail postfix]#vi main.cfinet_interfaces=192.168.1.199, 127.0.0.1 //设置postfix服务监听的IP地址,缺省为allmyhostname= //设置postfix服务器使用的主机名mydomain= //设置postfix服务器使用的邮件域myorigin=$mydomain //设置外发邮件时发件人地址中的邮件域名mydestination=$mydomain,$myhostname //设置可接收的邮件地址中的域名home_mailbox=Maildir/ //设置邮件存储位置和格式2、添加邮件用户的帐号[root@mail postfix]# groupadd mailusers[root@mail postfix]# useradd -g mailusers -s /sbin/nologin xiaowu[root@mail postfix]# useradd -g mailusers -s /sbin/nologin juncai[root@mail postfix]# passwd xiaowuChanging password for user xiaowu.New UNIX password:BAD PASSWORD: it is based on a dictionary wordRetype new UNIX password:passwd: all authentication tokens updated successfully.[root@mail postfix]# passwd juncaiChanging password for user juncai.New UNIX password:BAD PASSWORD: it is based on a dictionary wordRetype new UNIX password:passwd: all authentication tokens updated successfully.[root@mail postfix]##echo 12345 | passwd --stdin xiaowu //或这样赋予密码Changing password for user xiaowu.passwd: all authentication tokens updated successfully.3、SMTP发送邮件测试[root@mail postfix]# telnet localhost 25Trying 127.0.0.1...Connected to localhost.localdomain (127.0.0.1).Escape character is '^]'.220 ESMTP Postfixehlo 250 250-PIPELINING250-SIZE 10240000250-VRFY250-ETRN250-ENHANCEDSTATUSCODES250-8BITMIME250 DSNmail from:xiaowu@250 2.1.0 Okrcpt to:juncai@250 2.1.5 Okdata354 End data with <CR><LF>.<CR><LF>subject: A TEST MAILHELLO!This is a test mail !!!.250 2.0.0 Ok: queued as 229784E100quit221 2.0.0 ByeConnection closed by foreign host.#grep 229784E100 /var/log/messages //查找发信状态[root@mail postfix]# cat ~juncai/Maildir/new/Return-Path: <xiaowu@>X-Original-To: juncai@Delivered-To: juncai@Received: from localhost (localhost.localdomain [127.0.0.1])by (Postfix) with SMTP id 229784E100for <juncai@>; Thu, 17 Mar 2011 03:02:45 +0800 (CST)subject: A TEST MAILMessage-Id: <20110316190254.229784E100@>Date: Thu, 17 Mar 2011 03:02:45 +0800 (CST)From: xiaowu@To: undisclosed-recipients:;HELLO!This is a test mail !!![root@mail postfix]#构建Dovecot服务器1、编译安装Dovecot软件包[root@mail ~]#useradd –M –s /sbin/nologin dovecot[root@mail ~]#tar zxvf dovecot-1.1.4.tar.gz[root@mail ~]#cd dovecot-1.1.4[root@mail dovecot-1.1.4]# ./configure --sysconfdir=/etc --with-mysql && make && make install2、配置Dovecot的运行参数(1)建立dovecot.conf配置文件并进行简单设置[root@mail dovecot-1.1.4]# cp /etc/dovecot-example.conf /etc/dovecot.conf[root@mail dovecot-1.1.4]#vi /etc/dovecot.confssl_disable = yesprotocols = imap pop3disable_plaintext_auth = nomail_location = maildir:~/Maildir(2)创建PAM认证文件[root@mail dovecot-1.1.4]# vi /etc/pam.d/dovecotauth required pam_nologin.soauth include system-authaccount include system-authsession include system-auth3、启动Dovecot服务[root@mail ~]# /usr/local/sbin/dovecot -c /etc/dovecot.conf[root@mail ~]# netstat -anpt | grep dovecottcp 0 0 0.0.0.0:110 0.0.0.0:* LISTEN 3713/dovecottcp 0 0 0.0.0.0:143 0.0.0.0:* LISTEN 3713/dovecot[root@mail ~]#4、POP3接收邮件测试[root@mail ~]# telnet localhost 110Trying 127.0.0.1...Connected to localhost.localdomain (127.0.0.1).Escape character is '^]'.+OK Dovecot ready.user juncai+OKpass juncai+OK Logged in.list+OK 1 messages:1 511.retr 1+OK 511 octetsReturn-Path: <xiaowu@>X-Original-To: juncai@Delivered-To: juncai@Received: from localhost (localhost.localdomain [127.0.0.1])by (Postfix) with SMTP id 229784E100for <juncai@>; Thu, 17 Mar 2011 03:02:45 +0800 (CST) subject: A TEST MAILMessage-Id: <20110316190254.229784E100@>Date: Thu, 17 Mar 2011 03:02:45 +0800 (CST)From: xiaowu@To: undisclosed-recipients:;HELLO!This is a test mail !!!.quit+OK Logging out.Connection closed by foreign host.[root@mail ~]#WEBMAIL邮件界面SquirrelMail的工作流程1、依次安装squirrelmail程序包、中文语言包[root@mail ~]# tar jxvf squirrelmail-1.4.13.tar.bz2 -C /usr/local/apache2/htdocs /webmail[root@mail ~]# cd /usr/local/apache2/htdocs/webmail/[root@mail webmail]# tar jxvf ~/zh_CN-1.4.13-20071220.tar.bz22、创建及调整数据目录、附件目录[root@mail webmail]# mkdir -p attach data[root@mail webmail]# chown -R daemon:daemon attach/ data/ [root@mail webmail]# chmod 730 attach/3、建立config.php配置文件[root@mail webmail]# cp config/config_default.php config/config.php [root@mail webmail]# vi config/config.php$squirrelmail_default_language = 'zh_CN';'en_US' $default_charset = 'zh_CN.UTF-8'; 'iso-8859-1' $domain = '';$smtpServerAddress = 'localhost';$smtpPort = 25;$imapPort = 143;$imap_server_type = 'dovecot';$data_dir = '/usr/local/apache2/htdocs/webmail/data/'; $attachment_dir = '/usr/local/apache2/htdocs/webmail/attach/';4、重新启动httpd服务,并在浏览器中登录squirrelmail系统[root@mail webmail]# ../../bin/apachectl restart在该界面中可以完成发信、收信等电子邮件服务的基本操作。
网络安全管理员-高级工题库(附答案)一、单选题(共40题,每题1分,共40分)1.空调系统无备份设备时,单台空调制冷设备的制冷能力应留有()的余量。
A、15%-20%B、15%-30%C、20%-30%D、10%-20%正确答案:A2.()技术不能保护终端的安全。
A、防病毒B、漏洞扫描C、补丁管理D、防止非法外联正确答案:D3.下列关于客户/服务器结构的描述中,不正确的是A、连接支持处于客户机与服务器之间B、客户机都安装应用程序和工具软件等C、它是一种基于网络的分布处理系统D、服务器平台不能使用微型计算机正确答案:D4.以下哪种风险被定义为合理的风险?A、残余风险B、可接收风险C、总风险D、最小的风险正确答案:B5.攻击者通过扫描()漏洞,产生大量不可用的Sendmail子进程,导致Sendmail长时间挂起,从而耗尽服务器内存,达到攻击的目的。
A、CGIB、SMTPC、RPCD、DNS正确答案:B6.触犯新刑法 285 条规定的非法侵入计算机系统罪可判处A、三年以下有期徒刑或拘役B、1000 元罚款C、三年以上五年以下有期徒刑D、10000 元罚款正确答案:A7.哪种信息收集方法存在风险()。
A、收集目标服务器的whois、nslookup等信息B、对服务器进行远程漏洞扫描C、利用社会工程学原理获取相关管理员的敏感信息D、利用baidu、google收集目标服务器的相关信息正确答案:B8.基本磁盘包括()。
A、分区和卷B、主分区和扩展分区C、扩展分区和逻辑分区D、主分区和逻辑分区正确答案:B9.有关域树的概念的描述不正确的是()。
A、域树中这些域之间的信任关系是自动创建的,单向,可传递的信任关系B、域树中这些域有着邻接的名字空间C、域树中这些域共享相同的架构和配置信息D、域树是一个或多个域构成正确答案:A10.以下不属于网络安全控制技术的是()。
A、访问控制技术B、差错控制技术C、防火墙技术D、入侵检测技术正确答案:B11.“会话侦听和劫持技术”是属于()的技术。
信息技术基础(必修)知识要点第一章信息与信息技术1 信息技术的定义:一切与信息的获取、加工、表达、交流、管理和评价等有关的技术都可以称为信息技术。
信息技术又称为“IT(Information Technology)”。
2 信息的一般特征:载体依附性、价值性、时效性、共享性、传递性和可可处理性。
信息的基本容量单位是字节(Byte )1Byte=8bit(1)依附性。
信息不能独立存在,需要依附于一定的裁体。
信息要借助某种方式(如文本、图像和声音等)表现出来。
我们将承载信息的文字、图像、声音和电磁波等称为信息的载体。
(2)时效性。
某些信息在某一时段或范围内价值很高甚至可能起到决定性作用,但是过了这段时间,可能就没有价值了。
(3)可共享性。
信息可以被很多人无损使用、公平分享,同时也可以被一次性或多次或同时利用。
另外,信息共享有可控共享和不可控共享。
(4)价值性。
信息不能直接提供给人们物质需要,但能满足人们精神生活的需要;信息可以促进物质、能量的生产和使用。
信息被恰当的应用之后可以增值。
信息只有被人们利用才能体现出其价值。
(5)可传递、可处理。
按信息传递流向的不同划分,有单向传递、双向传递;按信息传递时信息量的不同划分,有集中传递和持续传递;按信息传递范围或环境关系的不同划分,有内部传递和外部传递。
信息可以处理:可以压缩、存储、有序化、转换形态;信息处理的类型:分类、比较、综合、研究、编制。
3、信息技术组成:计算机技术、通信技术、微电子技术和传感技术,核心是计算机技术。
4、人类社会发展历史上有五次信息技术革命:(1)第一次是语言的使用,是从猿进化到人的重要标志。
(2)第二次是文字的创造,使信息的存储和传递首次超越了时间和地域的局限。
(3)第三次是印刷术的发明,为知识的积累和传播提供了更为可靠的保证。
(4)第四次是电报、电话、广播、电视的发明和普及,进一步突破了时间与空间的限制。
(5)第五次是计算机技术与现代通信技术的普及应用,将人类社会推进到了数字化的信息时代。
三大国外免费邮箱的使用详解和点评:Hotmail,Gmail,Yahoo(含Yahoo国际和Yahoo中文)Foxmail Spaces版权所有本文是在前文《三大国外免费邮箱的使用详解:Hotmail,Gmail,Yahoo中文》的基础上更新而来,增加和编辑了部分内容。
希望能够有助于解决大家在使用foxmail收发Hotmail、GMail以及Yahoo!(包括.com和)邮件当中所遇到的问题。
这些内容默认是以读者使用Foxmail6.0版本为前提的。
全文分为以下部分:一、Hotmail(含FreePOPs使用方法)二、Gmail三、雅虎Yahoo!(含雅虎中国邮箱和雅虎国际邮箱)====================================一、Hotmail根据我的实际使用情况,Foxmail6.0beta2版本及以后版本支持Hotmail不需要任何单独的设置,直接新建账户,按照要求填写好所有选项即可。
Foxmail能够自动的为你设置好Foxhot的选项。
关键问题:如果你是2004年10月以后注册的hotmail或者msn,那么微软不提供收取邮件的pop服务。
如果你在2004年10月之前申请的,但是你从来没用pop方式收取,那么你也不可以使用pop。
即使你曾经能够使用POP 收信,但是如果你曾经使用MSN Premium破解过Hotmail的2G邮箱,一旦被查出的话也会被禁止使用POP。
还有一个传闻是:对于免费邮箱,微软只对部分“铁杆用户”继续开放pop接收功能。
我的感觉是可能在微软改变政策的那一段时间保持活跃的账户被认为是“资深用户”,这也是为什么很多申请时间非常早,也断断续续用过pop 的朋友仍然被微软排斥在外的原因。
提示:无法使用POP3的时候会弹出如下提示,原文大义为:“Hotmail出错,HTTP/1.1 402错误。
您需要注册后才能够利用OUTLOOK和OUTLOOK EXPRESS等软件收取hotmail邮件,请到/general/email这个网址去注册(交费)”。
电子商务师三级模拟习题+参考答案一、单选题(共57题,每题1分,共57分)1.网页中采用( ) 图案令人感觉柔和、团结、温暖、安全。
A、矩形B、圆形C、菱形D、三角形正确答案:B2.我国社会主义道德建设的原则是( )A、集体主义B、合理利己主义C、功利主义D、人道主义正确答案:A3.配送合理化可采取的措施不包括( )A、推行独立配送B、实行送取结合C、推行一定综合程度的专业化配送D、推行加工配送正确答案:A4.总量指标的表现形式为( )。
A、相对数B、有名数C、无名数D、绝对数正确答案:D5.( ) 占客户总数的20%,贡献了80%的利润。
A、小客户B、普通客户C、主要客户D、关键客户正确答案:D6.对明文的文件或数据按某种算法进行处理,形成的不可读代码,通常称为( ) 。
B、密码C、原文D、密文正确答案:D7.表单提交时,( ) 提交方式通过URL地址传输信息。
A、forB、postC、passD、get正确答案:D8.应当正确编制物流费用计划,对费用开支实行计划管理,而且坚持按计划执行,保证完成降低物流费用的任务,体现了物流成本管理原则的( )A、系统原则B、节约原则C、计划原则D、控制原则正确答案:C9.当表格中,需要将临近的两个单元格变成一个单元格时,应进行的操作是( )。
A、合并单元格B、拆分单元格C、插入表格D、删除表格正确答案:A10.网页中采用( ) 图案令人感觉力量、权威、牢固、侵略。
A、矩形B、三角形C、圆形D、菱形正确答案:B11.( ) 是Microsoft的新数据库应用开发接口。
A、ASPC、CGID、OLEDB正确答案:D12.以下文字大小,最大的是( )。
A、30B、40C、10D、20正确答案:B13.在GIF动画中,每一帧都是( ) 。
A、一个矢量文件B、一个图标C、一个图片D、一个动画片段正确答案:C14.网页HTML标签中h4表示( )。
A、标题1B、标题4C、标题2D、标题3正确答案:B15.提升评价的方法不包括( )。
mailparse原理Mailparse is a PHP extension that allows you to extract and manipulate email messages. mailparse是一个PHP扩展,允许您提取和操作电子邮件消息。
It provides functions to read, write, and manipulate email messages, including handling attachments and parsing different parts of an email. 它提供了读取、写入和操纵电子邮件信息的功能,包括处理附件和解析电子邮件的不同部分。
Mailparse can be used to build email clients, process incoming emails, and perform email validation and analysis. mailparse可以用于构建电子邮件客户端、处理收件箱中的电子邮件,以及进行电子邮件验证和分析。
It is a useful tool for managing email communication in web applications and automating email-related tasks. 在网页应用中管理电子邮件通讯而且自动化电子邮件相关任务是一个非常有用的工具。
One of the main features of mailparse is its ability to handle MIME-encoded email messages. mailparse的主要功能之一是它处理MIME编码的电子邮件。
MIME, which stands for Multipurpose Internet Mail Extensions, is a standard format for representing multimedia data in email. MIME代表多用途互联网邮件扩展,它是电子邮件中表示多媒体数据的标准格式。
php通讯协议解析PHP通讯协议解析涉及到解析和处理不同的通讯协议,这些协议用于在网络中传输数据。
在以下回答中,我将从多个角度探讨PHP通讯协议解析的相关内容。
首先,PHP作为一种服务器端脚本语言,可以通过各种通讯协议与客户端进行数据交互。
常见的通讯协议包括HTTP、FTP、SMTP、POP3、IMAP等。
针对这些协议,PHP提供了相应的内置函数和类库,以便解析和处理协议相关的数据。
对于HTTP协议,PHP提供了一系列函数和类库,如`$_GET`、`$_POST`、`$_REQUEST`等用于解析客户端通过GET、POST方式提交的数据;`$_COOKIE`用于解析客户端的Cookie数据;`$_SERVER`用于获取HTTP请求的相关信息,如请求方法、请求头等。
此外,PHP还提供了`curl`扩展,可以通过该扩展与其他服务器进行HTTP通讯。
对于FTP协议,PHP提供了`ftp`扩展,可以通过该扩展连接到FTP服务器并进行文件上传、下载等操作。
通过使用该扩展提供的函数,可以解析FTP服务器返回的响应数据,获取文件列表、文件大小等信息。
对于SMTP、POP3和IMAP等电子邮件相关的协议,PHP提供了`mail`函数和`IMAP`、`POP3`扩展。
通过`mail`函数可以发送电子邮件,而通过`IMAP`和`POP3`扩展可以解析和处理收件箱中的邮件,包括获取邮件内容、附件等信息。
除了以上提到的常见通讯协议,还有一些其他的协议,如WebSocket、SOAP等。
对于这些协议,PHP也提供了相应的扩展和类库,以便解析和处理相关的数据。
总结来说,PHP通讯协议解析涉及到解析和处理不同的通讯协议,包括HTTP、FTP、SMTP、POP3、IMAP等。
PHP提供了一系列内置函数和扩展,以便解析和处理这些协议相关的数据。
通过使用这些函数和扩展,我们可以从多个角度全面完整地解析和处理通讯协议中的数据。
用PHP发送有附件的电子邮件我经常听到这样一个问题:"我有一个从网站发来的合同。
我如何给通过表单发送的电子邮件增加一个附件呢?"首先我要说的是要做到这个没有什么简单的办法。
你要很好的理解PHP或其它的服务器端的脚本语言。
当然你还要一个真正支持PHP的网站的账号。
如果满足了这个前提,在你读完了本章后就可以用PHP发送带附件的电子邮件了。
1. 附件是如何工作的如果你曾经在PHP的手册中搜索过"附件"函数,那么结果可能是什么都没有(至少在我写本文的时间还没有)。
后来你就要花很多时间来了解这方面的知识。
你也许会想当你给某个人发送一封带附件的电子邮件时,附件是和邮件一起放到收件人的信箱里的(比如,如果你给他/她发了一个PNG的图片文件,他/她的信箱里会包含一个txt 文件(电子邮件)和一个.png文件(附件))。
但这不是它的工作原理。
当你加入一个附件时,你的邮件程序把附件转换成纯文本文件,并在你写的内容(实际的电子邮件)后面插入这个文本块。
这个,当你把所有的东西发出来后,收件人的信箱里只有一个纯文本文件--一个同时包含附件和实际电子邮件内容的文件。
下面是一个带附件(一个HTML文件)电子邮件的例子。
我已经标注了其中重要的几行:Return-Path:Date: Mon, 22 May 2000 19:17:29 +0000From: SomeoneTo: PersonMessage-id: <83729KI93LI9214@>Content-type: multipart/mixed; boundary="396d983d6b89a"Subject: Here's the subject--396d983d6b89aContent-type: text/plain; charset=iso-8859-1Content-transfer-encoding: 8bitThis is the body of the email.--396d983d6b89aContent-type: text/html; name=attachment.htmlContent-disposition: inline; filename=attachment.htmlContent-transfer-encoding: 8bitThis 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文件的内容,而是显示一个连接到文件的图标(或其它的类似的东西)。
收件人要看附件的内容,必须点击这个图标。
一般情况下,如果附件是一些文本(包含HTML),Content-disposition会被设为inline,这是因为现在大部分邮件程序能够不借助其它浏览器而直接显示附件(文本)的内容。
如果附件不是文本(比如图片或其它类似的内容),Content-disposition就设为attachment。
2. 用PHP生成带附件的电子邮件这里一个例子,告诉你如果把一个定义好的HTML文件加为邮件的附件:# 我们首先写实际的消息内容$emailBody = "This is text that goes into the body of the email.";# 然后我们要作为附件的HTML文件$attachment = "This is the attached HTML file";# 建立在邮件中分隔不同部分的分界线。
# 基本上,分界线可以是任意的字符串。
# 但是重要的一点是确定一个写邮件的人# 这会随意写出的字符串,所以我们用# uniqid函数来产生一个随机的字符串。
$boundary = uniqid( "");# 现在我们要建立邮件头。
不要忘了插入# Content-type头来说明这个邮件包含一个或更多的附件。
$headers = "From: someone@Content-type: multipart/mixed; boundary=\"$boundary\"";# 好,现在我们已经有了邮件的所有内容。
# 下一件事是修改邮件的主体。
$emailBody = "--$boundaryContent-type: text/plain; charset=iso-8859-1Content-transfer-encoding: 8bit$emailBody--$boundaryContent-type: text/html; name=attachment.htmlContent-disposition: inline; filename=attachment.htmlContent-transfer-encoding: 8bit$attachment--$boundary--";# 现在可以把邮件发出去了mail( "person@eksempel.dk", "The subject", $emailBody, $headers);?>3. 把用户上传的文件作为附件你也许会觉得上面的例子难以理解,但下面...。
在下面的例子中事情更难了,因为我们要用一个表单让用户上传他们的文件,并把这个文件作为我们要发的邮件的附件。
麻烦的是我们不能预先知道文件的MIME类型。
在前面的例子中,我们已经知道该它是一个HTML文件,所以给这个附件设置Content-type头是很简单的。
在下面的例子中,MIME类型可能是任意的,因为用户可能会上传一个HTML文件,一个PNG文件,一个vCard文件,或者其它的东西。
让我们来看看例子:# 现在我们来生成表单。
在产生可以上传文件的表单时,# 不要忘了把标签的"enctype"属性设为"multipart/form-data".echo "\n";echo "\n";echo "\n";echo "\n";echo "\n";echo "\n";echo "\n";echo "\n";# 如果用户已经按了"Send"按钮"if ($send) {# 定义分界线$boundary = uniqid( "");# 生成邮件头$headers = "From: $fromContent-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 = "--$boundaryContent-type: text/plain; charset=iso-8859-1Content-transfer-encoding: 8bit$body--$boundaryContent-type: $mimeType; name=$fileNameContent-disposition: attachment; filename=$fileName Content-transfer-encoding: base64$read--$boundary--";# 发送邮件mail($to, $subject, $body, $headers);}?>本文由:牙齿种植/提供!。