请问使用php如何在linux中添加用户? 如果是Windows,可以通过COM技术实现,不知道Linux有没有提供这方面的接口。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 不知道下面的文章对你是否有用。-----------------------------------------也谈用Socket发送电子邮件(转载)在phpuser.com的文章中limodou大哥发表了文章《用Socket发送电子邮件》。在smtp协议 中邮件的结束是以 . 结束,但是要和内容不在同一行,否则,邮件服务器认为邮件还没有 结束,服务器还在等待数据的上传!下面请看outlook发的邮件内容: >>> [email protected] <<< smileyou@localhost X-Server: Advanced Direct Remailer (www.elcomsoft.com) Message-ID: <002d01c04b32$60196960$0300a8c0@zyh> From: "zyh" <[email protected]> To: <smileyou@localhost> Subject: Fw: aa Date: Sat, 11 Nov 2000 00:22:09 +0800 MIME-Version: 1.0 Content-Type: multipart/alternative; boundary="----=_NextPart_000_002A_01C04B75.6E2BE080" X-Priority: 3 X-MSMail-Priority: Normal X-Mailer: Microsoft Outlook Express 5.00.2615.200 X-MimeOLE: Produced By Microsoft MimeOLE V5.00.2615.200 This is a multi-part message in MIME format. ------=_NextPart_000_002A_01C04B75.6E2BE080 Content-Type: text/plain; charset="gb2312" Content-Transfer-Encoding: base64 DQphYQ0K ------=_NextPart_000_002A_01C04B75.6E2BE080 Content-Type: text/html; charset="gb2312" Content-Transfer-Encoding: base64 PCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMCBUcmFuc2l0aW9uYWwv L0VOIj4NCjxIVE1MPjxIRUFEPg0KPE1FVEEgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PWdi MjMxMiIgaHR0cC1lcXVpdj1Db250ZW50LVR5cGU+DQo8TUVUQSBjb250ZW50PSJNU0hUTUwgNS4w MC4yNjE0LjM1MDAiIG5hbWU9R0VORVJBVE9SPg0KPFNUWUxFPjwvU1RZTEU+DQo8L0hFQUQ+DQo8 Qk9EWSBiZ0NvbG9yPSNmZmZmZmY+DQo8RElWPiZuYnNwOzwvRElWPg0KPERJVj48Rk9OVCBzaXpl PTI+YWE8L0ZPTlQ+PC9ESVY+PC9CT0RZPjwvSFRNTD4NCg== ------=_NextPart_000_002A_01C04B75.6E2BE080-- . 大家可以看到最后是换行+.+换行结束的!而且内容使用了base64编码,在limodou的文章 中,没有将内容编码, 所以,有的朋友就无法看到信件的内容!我们将内容解码,得到的内容是"aa"这两个字母 。那我们怎么让 上传的内容最后换行+.+换行呢? 其实很简单,fputs上去的数据直接换行就可以了:请看下面的例子: <? $smtpserver="localhost" ; $fp = fsockopen($smtpserver, 25, &$errno, &$errstr, 10); echo ($hostreply=fgets($fp,128)); $server_name=strstr(ltrim($hostreply)," ") ; $server_name=substr(ltrim($server_name),0,strlen ($server_name )-12) ; echo "<br>server_name:".$server_name."<br>" ; fputs($fp,"HELO $server_name n"); $hostreply=fgets($fp,128); fputs($fp,"MAIL FROM: [email protected]") ; echo($hostreply=fgets($fp,128)); echo "<br>--------------------------<br>"; fputs($fp,"RCPT TO: [email protected]") ; echo($hostreply=fgets($fp,128)) ; fputs($fp,"DATAn") ; echo($hostreply=fgets($fp,128)) ; echo "<br>--------------------------<br>n"; $mail_from="[email protected]"; $mail_to="[email protected]"; $subject="test"; $mail_from="From: <$mail_from>"; $mail_to="TO: <$mail_to>"; $subject="Subject: $subject"; $message=base64_encode("this is a test leter"); fputs($fp,$mail_from." ") ; fputs ($fp ,$mail_to." "); fputs ($fp,$subject." "); fputs ($fp,$message." "); fputs ($fp,"."); fputs ($fp," "); echo($hostreply=fgets($fp,128)); fputs($fp,"QUIT") ; fclose($fp) ; ?> 大家看到,fputs邮件内容是直接换行的,而不是用php中"n"或者"r"的,可是一部分却以 "n"换行的, 我没法搞懂那部分,哪位明白的话告诉小弟一声。这个邮件就这样发出去了。 好,下面让我们看一个带附件的邮件的发送情况。下面是附件为line.gif,主题为“附件 ”,内容为“附件” 的邮件发送到smtp服务器的数据内容: >>> [email protected] <<< [email protected] X-Server: Advanced Direct Remailer (www.elcomsoft.com) Message-ID: <000901c04b3c$b7aa82e0$0300a8c0@zyh> From: "zyh" <[email protected]> To: <[email protected]> Subject: =?gb2312?B?uL28/g==?= Date: Sat, 11 Nov 2000 01:36:11 +0800 MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_NextPart_000_0005_01C04B7F.C5A30960" X-Priority: 3 X-MSMail-Priority: Normal X-Mailer: Microsoft Outlook Express 5.00.2615.200 X-MimeOLE: Produced By Microsoft MimeOLE V5.00.2615.200 This is a multi-part message in MIME format. ------=_NextPart_000_0005_01C04B7F.C5A30960 Content-Type: multipart/alternative; boundary="----=_NextPart_001_0006_01C04B7F.C5AC3120" ------=_NextPart_001_0006_01C04B7F.C5AC3120 Content-Type: text/plain; charset="gb2312" Content-Transfer-Encoding: base64 uL28/g0K ------=_NextPart_001_0006_01C04B7F.C5AC3120 Content-Type: text/html; charset="gb2312" Content-Transfer-Encoding: base64 PCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMCBUcmFuc2l0aW9uYWwv L0VOIj4NCjxIVE1MPjxIRUFEPg0KPE1FVEEgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PWdi MjMxMiIgaHR0cC1lcXVpdj1Db250ZW50LVR5cGU+DQo8TUVUQSBjb250ZW50PSJNU0hUTUwgNS4w MC4yNjE0LjM1MDAiIG5hbWU9R0VORVJBVE9SPg0KPFNUWUxFPjwvU1RZTEU+DQo8L0hFQUQ+DQo8 Qk9EWSBiZ0NvbG9yPSNmZmZmZmY+DQo8RElWPjxGT05UIHNpemU9Mj64vbz+PC9GT05UPjwvRElW PjwvQk9EWT48L0hUTUw+DQo= ------=_NextPart_001_0006_01C04B7F.C5AC3120-- ------=_NextPart_000_0005_01C04B7F.C5A30960 Content-Type: image/gif; name="line.gif" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="line.gif" R0lGODlhugEHAJEAAP9/D////wAAAAAAACwAAAAAugEHAEACfIyPqcvtD6OctNqLs968+w+GDQAY pFkGp5qubgujMju/dUznto7vfg+8CXnDXzFITBqVyKWzCT1KmdNnNUrNWnOirvcLDovH5LL5jE6r 1+y2+w2Py+f0uv2Ol2/3WP71r9UnCOgXSDhomFi4iMh4+KjYiJRHWWl5iZnJUAAAOw== ------=_NextPart_000_0005_01C04B7F.C5A30960-- . 大家可以看到subject部分变化了,还有变化的有X-Priority: 3上面的Content-Type变了 , 在phpuser的站长hunte的文章《用PHP发送有附件的电子邮件》中了解到以下的内容: 这个头告诉邮件程序电子邮件是由一个以上的部分组成的。不含附件的邮件只有一个部分 :消息本身。 带附件的电子通常至少由两部分组成:消息和附件。这样,带两个附件的邮件由三部分组 成:消息,第一 个附件和第二个附件。 带附件的电子邮件的不同部分之间用分界线来分隔。分界线在Content-type头中定义。邮 件的每个新部分 以两个连字号(--)和分界线开始。最后一个分界线后也有两个连字号,表示这个邮件中 没有其它的部分了。 在每个分界线后有一些行,用来告诉邮件程序这个部分的内容的类型。比如,看看上面例 子中第一个分界 线后面的两行--以Content-type: text/plain开头的行。这些行说明后面的部分是gb2312 字符集的纯文本。跟在第二 个分界线后的行告诉邮件程序现在的部分是一个HTML文件,它的名字是"attachment.html" 。 Content-disposition这持告诉邮件程序如果可能就以内嵌的方式显示附件。现在新的邮件 程序会在消息后 显示HTML的内容。如果Content-disposition被设为attachment,那么邮件程序就不会显示 HTML文件的内容 ,而是显示一个连接到文件的图标(或其它的类似的东西)。收件人要看附件的内容,必 须点击这个图标。 一般情况下,如果附件是一些文本(包含HTML),Content-disposition会被设为inline, 这是因为 现在大部分邮件程序能够不借助其它浏览器而直接显示附件(文本)的内容。如果附件不 是文本(比如 图片或其它类似的内容),Content-disposition就设为attachment。 邮件的内容的content-type是text/html,图片的content-type是image/gif,而且多用了 base64编码。现在我们将 其改进一下, <? if ($submit){ /*-------------------- #打开附件、读取内容、并编码、分割 $fpfile = fopen($file, "r"); $read = fread($fpfile, filesize($file)); $read = base64_encode($read); $read = chunk_split($read); ----------------------*/ /*----------------- #获得文件的类型 if ($file_type){ $mimeType = $file_type; } else {$mimeType = "application/unknown";} --------------------*/ 首先感谢二位帮助。在网址http://phpuser.com/articles_and_tutorials/article.php?id=113的专题文章《在PHP中执行系统外部命令》中有介绍如何添加用户,大家可以去看一下。但问题是,该方法好像对我不起作用。 缺省安装时,Apache用户的身份是nobody,当然没有权限,解决的方法可以:1、重新编译Apache,使用户身份为root,但是处于安全考虑不提倡或者2、建立一个数据库,使用root的cron来定期建立用户 你的WEBMail要建立的用户需要是系统的用户么,我觉得好像用数据库来实现好一点吧. 我也做了一個郵件系統,是用php+qmail+vpopmail做的 支持pop3 imap 虛擬域名 虛擬用戶 http://www.inter7.com/vpopmail/http://www.trlinux.com/希望對你有幫助 急急急!!!PHP调用webservice接口 php搜索的问题 得到来源者的硬盘id,网卡mac值,在线等 请教一个用空格分割字符串但不包括引号括起来的正则 一次性向目录下的所有HTML文件中插入一段代码 请问日期问题 产生数据库中记录唯一标识的函数怎样写? 如何在xp下,安装imail8.0,一安装就说安装程序必须被关闭,无法继续?怎么办? PHP如何和SQL server连接? 【IDE】在Eclipse PDT中创建项目时候,项目文件夹路径该如何选择?? 关于php中图形显示的问题 怎么用PHP在MySQL的表中分页?
<<< smileyou@localhost X-Server: Advanced Direct Remailer (www.elcomsoft.com)
Message-ID: <002d01c04b32$60196960$0300a8c0@zyh>
From: "zyh" <[email protected]>
To: <smileyou@localhost>
Subject: Fw: aa
Date: Sat, 11 Nov 2000 00:22:09 +0800
MIME-Version: 1.0
Content-Type: multipart/alternative;
boundary="----=_NextPart_000_002A_01C04B75.6E2BE080"
X-Priority: 3
X-MSMail-Priority: Normal
X-Mailer: Microsoft Outlook Express 5.00.2615.200
X-MimeOLE: Produced By Microsoft MimeOLE V5.00.2615.200 This is a multi-part message in MIME format. ------=_NextPart_000_002A_01C04B75.6E2BE080
Content-Type: text/plain;
charset="gb2312"
Content-Transfer-Encoding: base64 DQphYQ0K ------=_NextPart_000_002A_01C04B75.6E2BE080
Content-Type: text/html;
charset="gb2312"
Content-Transfer-Encoding: base64 PCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMCBUcmFuc2l0aW9uYWwv
L0VOIj4NCjxIVE1MPjxIRUFEPg0KPE1FVEEgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PWdi
MjMxMiIgaHR0cC1lcXVpdj1Db250ZW50LVR5cGU+DQo8TUVUQSBjb250ZW50PSJNU0hUTUwgNS4w
MC4yNjE0LjM1MDAiIG5hbWU9R0VORVJBVE9SPg0KPFNUWUxFPjwvU1RZTEU+DQo8L0hFQUQ+DQo8
Qk9EWSBiZ0NvbG9yPSNmZmZmZmY+DQo8RElWPiZuYnNwOzwvRElWPg0KPERJVj48Rk9OVCBzaXpl
PTI+YWE8L0ZPTlQ+PC9ESVY+PC9CT0RZPjwvSFRNTD4NCg== ------=_NextPart_000_002A_01C04B75.6E2BE080-- .
大家可以看到最后是换行+.+换行结束的!而且内容使用了base64编码,在limodou的文章 中,没有将内容编码,
所以,有的朋友就无法看到信件的内容!我们将内容解码,得到的内容是"aa"这两个字母 。那我们怎么让
上传的内容最后换行+.+换行呢?
其实很简单,fputs上去的数据直接换行就可以了:请看下面的例子: <? $smtpserver="localhost" ;
$fp = fsockopen($smtpserver, 25, &$errno, &$errstr, 10); echo ($hostreply=fgets($fp,128)); $server_name=strstr(ltrim($hostreply)," ") ;
$server_name=substr(ltrim($server_name),0,strlen ($server_name )-12) ;
echo "<br>server_name:".$server_name."<br>" ;
fputs($fp,"HELO $server_name n"); $hostreply=fgets($fp,128);
fputs($fp,"MAIL FROM: [email protected]") ;
echo($hostreply=fgets($fp,128));
echo "<br>--------------------------<br>";
fputs($fp,"RCPT TO: [email protected]") ;
echo($hostreply=fgets($fp,128)) ;
fputs($fp,"DATAn") ;
echo($hostreply=fgets($fp,128)) ;
echo "<br>--------------------------<br>n";
$mail_from="[email protected]";
$mail_to="[email protected]";
$subject="test";
$mail_from="From: <$mail_from>";
$mail_to="TO: <$mail_to>";
$subject="Subject: $subject";
$message=base64_encode("this is a test leter");
fputs($fp,$mail_from."
") ;
fputs ($fp ,$mail_to."
");
fputs ($fp,$subject."
");
fputs ($fp,$message." ");
fputs ($fp,".");
fputs ($fp,"
");
echo($hostreply=fgets($fp,128));
fputs($fp,"QUIT") ; fclose($fp) ;
?> 大家看到,fputs邮件内容是直接换行的,而不是用php中"n"或者"r"的,可是一部分却以 "n"换行的,
我没法搞懂那部分,哪位明白的话告诉小弟一声。这个邮件就这样发出去了。
好,下面让我们看一个带附件的邮件的发送情况。下面是附件为line.gif,主题为“附件 ”,内容为“附件”
的邮件发送到smtp服务器的数据内容: >>> [email protected]
<<< [email protected] X-Server: Advanced Direct Remailer (www.elcomsoft.com)
Message-ID: <000901c04b3c$b7aa82e0$0300a8c0@zyh>
From: "zyh" <[email protected]>
To: <[email protected]>
Subject: =?gb2312?B?uL28/g==?=
Date: Sat, 11 Nov 2000 01:36:11 +0800
MIME-Version: 1.0
Content-Type: multipart/mixed;
boundary="----=_NextPart_000_0005_01C04B7F.C5A30960"
X-Priority: 3
X-MSMail-Priority: Normal
X-Mailer: Microsoft Outlook Express 5.00.2615.200
X-MimeOLE: Produced By Microsoft MimeOLE V5.00.2615.200 This is a multi-part message in MIME format. ------=_NextPart_000_0005_01C04B7F.C5A30960
Content-Type: multipart/alternative;
boundary="----=_NextPart_001_0006_01C04B7F.C5AC3120"
------=_NextPart_001_0006_01C04B7F.C5AC3120
Content-Type: text/plain;
charset="gb2312"
Content-Transfer-Encoding: base64 uL28/g0K ------=_NextPart_001_0006_01C04B7F.C5AC3120
Content-Type: text/html;
charset="gb2312"
Content-Transfer-Encoding: base64 PCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMCBUcmFuc2l0aW9uYWwv
L0VOIj4NCjxIVE1MPjxIRUFEPg0KPE1FVEEgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PWdi
MjMxMiIgaHR0cC1lcXVpdj1Db250ZW50LVR5cGU+DQo8TUVUQSBjb250ZW50PSJNU0hUTUwgNS4w
MC4yNjE0LjM1MDAiIG5hbWU9R0VORVJBVE9SPg0KPFNUWUxFPjwvU1RZTEU+DQo8L0hFQUQ+DQo8
Qk9EWSBiZ0NvbG9yPSNmZmZmZmY+DQo8RElWPjxGT05UIHNpemU9Mj64vbz+PC9GT05UPjwvRElW
PjwvQk9EWT48L0hUTUw+DQo= ------=_NextPart_001_0006_01C04B7F.C5AC3120-- ------=_NextPart_000_0005_01C04B7F.C5A30960
Content-Type: image/gif;
name="line.gif"
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
filename="line.gif" R0lGODlhugEHAJEAAP9/D////wAAAAAAACwAAAAAugEHAEACfIyPqcvtD6OctNqLs968+w+GDQAY
pFkGp5qubgujMju/dUznto7vfg+8CXnDXzFITBqVyKWzCT1KmdNnNUrNWnOirvcLDovH5LL5jE6r
1+y2+w2Py+f0uv2Ol2/3WP71r9UnCOgXSDhomFi4iMh4+KjYiJRHWWl5iZnJUAAAOw== ------=_NextPart_000_0005_01C04B7F.C5A30960-- . 大家可以看到subject部分变化了,还有变化的有X-Priority: 3上面的Content-Type变了 ,
在phpuser的站长hunte的文章《用PHP发送有附件的电子邮件》中了解到以下的内容:
这个头告诉邮件程序电子邮件是由一个以上的部分组成的。不含附件的邮件只有一个部分 :消息本身。
带附件的电子通常至少由两部分组成:消息和附件。这样,带两个附件的邮件由三部分组 成:消息,第一
个附件和第二个附件。 带附件的电子邮件的不同部分之间用分界线来分隔。分界线在Content-type头中定义。邮 件的每个新部分
以两个连字号(--)和分界线开始。最后一个分界线后也有两个连字号,表示这个邮件中 没有其它的部分了。 在每个分界线后有一些行,用来告诉邮件程序这个部分的内容的类型。比如,看看上面例 子中第一个分界
线后面的两行--以Content-type: text/plain开头的行。这些行说明后面的部分是gb2312 字符集的纯文本。跟在第二
个分界线后的行告诉邮件程序现在的部分是一个HTML文件,它的名字是"attachment.html" 。 Content-disposition这持告诉邮件程序如果可能就以内嵌的方式显示附件。现在新的邮件 程序会在消息后
显示HTML的内容。如果Content-disposition被设为attachment,那么邮件程序就不会显示 HTML文件的内容
,而是显示一个连接到文件的图标(或其它的类似的东西)。收件人要看附件的内容,必 须点击这个图标。
一般情况下,如果附件是一些文本(包含HTML),Content-disposition会被设为inline, 这是因为
现在大部分邮件程序能够不借助其它浏览器而直接显示附件(文本)的内容。如果附件不 是文本(比如
图片或其它类似的内容),Content-disposition就设为attachment。
邮件的内容的content-type是text/html,图片的content-type是image/gif,而且多用了 base64编码。现在我们将
其改进一下, <?
if ($submit){
/*--------------------
#打开附件、读取内容、并编码、分割
$fpfile = fopen($file, "r");
$read = fread($fpfile, filesize($file));
$read = base64_encode($read);
$read = chunk_split($read);
----------------------*/
/*-----------------
#获得文件的类型
if ($file_type){
$mimeType = $file_type;
}
else {$mimeType = "application/unknown";}
--------------------*/
在网址http://phpuser.com/articles_and_tutorials/article.php?id=113的专题文章《在PHP中执行系统外部命令》中有介绍如何添加用户,大家可以去看一下。
但问题是,该方法好像对我不起作用。
1、重新编译Apache,使用户身份为root,但是处于安全考虑不提倡
或者
2、建立一个数据库,使用root的cron来定期建立用户
虛擬用戶
http://www.trlinux.com/希望對你有幫助