如何创建一个基于 PHP 的电子邮件系统?
How to create a PHP based email system?
目前我正在使用 cPanel 管理邮箱。我在 cPanel 中配置了邮箱,将电子邮件传送到 PHP 脚本。我使用 cPanel 只是为了这个目的,所以我想摆脱所有这些装备。
我只需要:
- 创建一个电子邮件服务器(从这里我想我需要一些 PHP library/application)
- 在电子邮件服务器中创建电子邮件account/mailbox
- 对于邮箱收到的每封电子邮件:运行一个PHP处理字节的脚本
These PHP extensions 依赖于已有的电子邮件服务器和帐户,因此,仅有这些是不够的。
从我一直在研究的内容来看,显然我需要通过 PHP 命令行,使用 CLI 或 CGI,不确定是哪一个。
我在 VPS 和 LAMP CentOS 工作,也许有一个开源 PHP 应用程序或库可以在这里实现,只是为了特定的任务。
要阅读邮箱中的电子邮件,我建议使用 IMAP。
这里的电子邮件存储在服务器上,IMAP 协议允许您访问服务器上的电子邮件。
您必须在服务器上启用 IMAP 并使用 imap_open 功能 [1]
此处取自 php.net 的示例:
<?php
$mbox = imap_open("{imap.example.org:143}", "username", "password");
echo "<h1>Mailboxes</h1>\n";
$folders = imap_listmailbox($mbox, "{imap.example.org:143}", "*");
if ($folders == false) {
echo "Call failed<br />\n";
} else {
foreach ($folders as $val) {
echo $val . "<br />\n";
}
}
echo "<h1>Headers in INBOX</h1>\n";
$headers = imap_headers($mbox);
if ($headers == false) {
echo "Call failed<br />\n";
} else {
foreach ($headers as $val) {
echo $val . "<br />\n";
}
}
imap_close($mbox);
?>
在创建新帐户方面,如果您在邮件服务器上有一个用于创建帐户的 HTML 输入表单,一个非常 hacky 的解决方案是使用 PHP cURL 提交 POST 变量来创建一个新帐户,这里是关于该主题的一个很好的 Whosebug 答案 [2]。
当您在注册表单上提交信息时,您实际上是在提交一系列 POST 变量。如果您不熟悉 cURL 或 HTTP 请求的基础知识,这可能需要一些阅读。
这可能涉及使用 cURL 登录到您为邮件服务器设置的任何管理框架的管理面板。如果您是相关邮件服务器上的根用户,则有更好的解决方案。
[1] http://php.net/manual/en/function.imap-open.php
[2]Passing $_POST values with cURL
很抱歉这么说,但你打算做的事情根本没有任何意义。
原因:
为了能够接收和访问电子邮件,您必须至少实现一个完全成熟的网络服务器:一个用于接收的 SMTP 服务器和一个用于访问邮箱的附加服务器,例如 IMAP4 服务器或类似服务器。加上 ssl 或 tls 加密、身份验证以及和和...的所有开销...
- PHP 不是一种非常适合此类项目的语言。
- 你目前可能低估了这样的计划意味着的工作量。如果您看一下现有的实现,您会发现它们都是非常庞大和复杂的软件包。我会说实现如此多的东西将需要一个非常好的程序员几个月甚至几年的时间。
请不要误会,但我的印象是您还没有完全理解电子邮件交换的实际工作原理以及所需的条件。
相反,我建议您通过掌握一些您可以使用的独立系统来进入这个领域,也许您租用一个虚拟专用服务器,包括一个域名和一个静态 IP 地址。请注意,某些带有 php 的网站空间 不足以 满足此要求。然后你安装典型的包,一些 Linux 操作系统,也许是 Postfix SMTP 服务器,Dovecot IMAP 服务器和他们需要的一切。然后你配置那些东西,如果你真的成功并且能够通过该设置实际接收消息,然后是时候回到这个问题了。我期待两件事:
- 你会通过那个实验学到很多东西
- 你会同意你目前的计划没有意义。
目前我正在使用 cPanel 管理邮箱。我在 cPanel 中配置了邮箱,将电子邮件传送到 PHP 脚本。我使用 cPanel 只是为了这个目的,所以我想摆脱所有这些装备。
我只需要:
- 创建一个电子邮件服务器(从这里我想我需要一些 PHP library/application)
- 在电子邮件服务器中创建电子邮件account/mailbox
- 对于邮箱收到的每封电子邮件:运行一个PHP处理字节的脚本
These PHP extensions 依赖于已有的电子邮件服务器和帐户,因此,仅有这些是不够的。
从我一直在研究的内容来看,显然我需要通过 PHP 命令行,使用 CLI 或 CGI,不确定是哪一个。
我在 VPS 和 LAMP CentOS 工作,也许有一个开源 PHP 应用程序或库可以在这里实现,只是为了特定的任务。
要阅读邮箱中的电子邮件,我建议使用 IMAP。 这里的电子邮件存储在服务器上,IMAP 协议允许您访问服务器上的电子邮件。
您必须在服务器上启用 IMAP 并使用 imap_open 功能 [1]
此处取自 php.net 的示例:
<?php
$mbox = imap_open("{imap.example.org:143}", "username", "password");
echo "<h1>Mailboxes</h1>\n";
$folders = imap_listmailbox($mbox, "{imap.example.org:143}", "*");
if ($folders == false) {
echo "Call failed<br />\n";
} else {
foreach ($folders as $val) {
echo $val . "<br />\n";
}
}
echo "<h1>Headers in INBOX</h1>\n";
$headers = imap_headers($mbox);
if ($headers == false) {
echo "Call failed<br />\n";
} else {
foreach ($headers as $val) {
echo $val . "<br />\n";
}
}
imap_close($mbox);
?>
在创建新帐户方面,如果您在邮件服务器上有一个用于创建帐户的 HTML 输入表单,一个非常 hacky 的解决方案是使用 PHP cURL 提交 POST 变量来创建一个新帐户,这里是关于该主题的一个很好的 Whosebug 答案 [2]。
当您在注册表单上提交信息时,您实际上是在提交一系列 POST 变量。如果您不熟悉 cURL 或 HTTP 请求的基础知识,这可能需要一些阅读。
这可能涉及使用 cURL 登录到您为邮件服务器设置的任何管理框架的管理面板。如果您是相关邮件服务器上的根用户,则有更好的解决方案。
[1] http://php.net/manual/en/function.imap-open.php
[2]Passing $_POST values with cURL
很抱歉这么说,但你打算做的事情根本没有任何意义。
原因:
为了能够接收和访问电子邮件,您必须至少实现一个完全成熟的网络服务器:一个用于接收的 SMTP 服务器和一个用于访问邮箱的附加服务器,例如 IMAP4 服务器或类似服务器。加上 ssl 或 tls 加密、身份验证以及和和...的所有开销...
- PHP 不是一种非常适合此类项目的语言。
- 你目前可能低估了这样的计划意味着的工作量。如果您看一下现有的实现,您会发现它们都是非常庞大和复杂的软件包。我会说实现如此多的东西将需要一个非常好的程序员几个月甚至几年的时间。
请不要误会,但我的印象是您还没有完全理解电子邮件交换的实际工作原理以及所需的条件。
相反,我建议您通过掌握一些您可以使用的独立系统来进入这个领域,也许您租用一个虚拟专用服务器,包括一个域名和一个静态 IP 地址。请注意,某些带有 php 的网站空间 不足以 满足此要求。然后你安装典型的包,一些 Linux 操作系统,也许是 Postfix SMTP 服务器,Dovecot IMAP 服务器和他们需要的一切。然后你配置那些东西,如果你真的成功并且能够通过该设置实际接收消息,然后是时候回到这个问题了。我期待两件事:
- 你会通过那个实验学到很多东西
- 你会同意你目前的计划没有意义。