2.9 构筑邮件送信的调查表单(Form)
本节将构筑一个调查表单,用户填写好调查信息,单击“送信”按钮后,就会将用户输入的信息向指定的Web邮件地址里送信。本节的程序可以应用在网上调查、自动配信等实际的系统中。
本例要点
邮件中采用的语言编码(如UTF-8)与Web页面的语言编码(如GB2312)不一致时,如果直接将页面的信息送出的话,就很容易产生乱码。
但是,在PHP中使用支持多字节字符的mb_send_mail邮件送信函数,完全不用理会上述所谓文字编码的差异。有利用其他语言,或PHP低级版本编写邮件送信程序经验的用户,在使用了mb_send_mail样的高级函数后,再也不用mb_convert_encoding函数进行文字代码的转换了。
目录结构
本例代码
本节所采用的邮件系统,提供通用的邮件送信结构,事先在隐藏域中定义了邮件送信所需要的最低必要信息。
_subject中定义了文件名,_next中定义了送信后表示的页面。这些都是既有的关键字,送信邮件本文中并不包含这些内容。
_from为送信者的邮件地址,当然也可以给其设成固定值。
用'MAILTO'定义邮件的送信地址。
define('MAILTO', 'mysin007@hotmail.com');
变量$body放置邮件的本文。
上一页面设定的调查信息通过超级全局变量,联想数组$_POST传入。
循环输出设定的调查信息。
以头的形式指定[From送信者][Content-Type数据类型][X-Mailer送信邮件种类]。
向指定邮件地址送信,使用了mb_send_mail函数后,如果件名,邮件本文中含有中文时,自动进行文字代码的转换。
送信处理结束后,跳转到指定的页面中。
相关知识
运行的注意事项(Windows版本与Linux版本共同)
本节中用到的多字节函数mb_send_mail属于扩展模块,运行前需要事先导入到PHP环境中,而且使该扩展模块有效。
如果你是按照第1章介绍的步骤进行安装的话,该模块已经有效了,不用再进行任何其他的配置了。
运行的注意事项(Linux版本)
Linux版本中的mb_send_mail函数,使用内部命令sendmail来实现邮件送信。如果没有特别的指定,在安装OS时,内部命令sendmail将被默认安装上。不需要再进行配置,直接运行实例就可以了。
(1)启动sendmail
以下是启动sendmail的命令:
–bd选项指示以模拟(demo)的形式启动sendmail。
-q[time]选项指示以指定的时间间隔发送缓冲(cue)中残留的信息。上述的间隔为一个小时。time的指定有s:senconds/m:minutes/h:hours/d:days/w:weeks等几种形式。
(2)在php.ini中追加sendmail_path参数
sendmail_path参数的默认设定值为“/usr/sbin/sendmail–t–i”。根据具体环境的不同,有时可能需要编辑。
*php.ini编辑后,请务必重新启动Apache。
运行的注意事项(Windows版本)
Windows版本的mb_send_mail函数,使用外部的SMTP服务器来发送邮件。请事先设置好php.ini中的SMTP与sendmail_from参数。下面为一设定例,请根据实际使用的SMTP服务来编辑它。
*php.ini编辑后,请务必重新启动Apache。
知识专栏:性能调试的小技巧(二)——明确检索的域名(field)
在进行编写数据检索SQL时,很多人喜欢使用“*”。的确,这样写SQL语句会很方便。但是对比较复杂的表来说,尽管有很多用不到的域,都能将其一并从数据库中检索出来了,保存在内存中占用了大量的系统资源,是很大的浪费,也影响系统的性能。
在编写数据检索SQL语句,请务必明确定义需要检索的域名,将抽出的数据限制在最小范围。明确检索的域名,以及从何表中抽出,对程序的可读性来说也很重要。
同样,在进行数据检索时,要尽量细化Where语句后的检索条件,将抽出的数据限制在最小范围。比如请尽量避免出现如下情况,即先从数据库中抽出所有的数据,然后在PHP应用程序中进行排序、修饰的处理。