在PHP中是否有POP3/IMAP服务器的可用实现?
我正在使用sendrid处理我的电子邮件服务。我将使用文件/db/任何文件在我的服务器上存储消息,现在我想为我的用户提供完整的POP3或IMAP(优选)访问他们的邮箱。PHP中是否有这样的实现?或者还有其他可能在Windows Azure的分布式环境中运行POP3/IMAP(假设我将邮箱存储在共享Blob/table/db中)?
好的,只是为了说明用PHP编写POP3服务器实际上是可能的,这里就是。服务器不进行身份验证——或者几乎不做任何其他事情。它只是一次又一次地发送同样的信息。但它是有效的。雷鸟能够从中检索信息。完全没用,但有点酷。
我的设置是Windows上的Apache 2和PHP 5.2。
<?php
// echo something so fopen() would return
header("Content-type: text/plain");
echo "OK\n";
flush();
// listen for incoming connection
$listen_socket = socket_create_listen(110, 1);
$r = $w = $e = array($listen_socket);
$n = socket_select($r, $w, $e, 120);
$client_socket = ($n == 1) ? socket_accept($listen_socket) : null;
socket_close($listen_socket);
// spawn copy of myself
$internal_url = "http://{$_SERVER['HTTP_HOST']}:{$_SERVER['SERVER_PORT']}{$_SERVER['SCRIPT_NAME']}";
$stream_context_options = array (
'http' => array (
'method' => 'GET',
'timeout' => 1
)
);
$context = stream_context_create($stream_context_options);
if($f = fopen($internal_url, "rb", 0, $context)) {
fclose($f);
}
if(!$client_socket) {
// timed out
exit;
}
// start handling the session
$read_buffer = "";
$write_buffer = "+OK POP3 server ready\r\n";
$active = true;
$messages = array(
"From: webmaster@example.com\r\nSubject: This is a test\r\n\r\nHello world!\r\n"
);
$idle_start = time();
while(true) {
$r = $w = $e = array($client_socket);
$n = socket_select($r, $w, $e, 60);
if($n) {
if($r) {
// read from the socket
$read_buffer .= socket_read($client_socket, 128);
$idle_start = time();
}
if($w) {
if($write_buffer) {
// write to the socket
$written = socket_write($client_socket, $write_buffer);
$write_buffer = substr($write_buffer, $written);
$idle_start = time();
} else if($active) {
$now = time();
$idle_time = $now - $idle_start;
if($idle_time > 10) {
// exit if nothing happened for 10 seconds
break;
} else if($idle_time > 2) {
// start napping when the client is too slow
sleep(1);
}
} else {
break;
}
}
if($e) {
break;
}
if($read_buffer) {
if(preg_match('/(.*?)(?:\s+(.*?))?[\r\n]+/', $read_buffer, $matches)) {
$read_buffer = substr($read_buffer, strlen($matches[0]));
$command = $matches[1];
$argument = $matches[2];
switch($command) {
case 'USER':
$username = $argument;
$write_buffer .= "+OK $username is welcome here\r\n";
break;
case 'PASS':
$message_count = count($messages);
$write_buffer .= "+OK mailbox has $message_count message(s)\r\n";
break;
case 'QUIT':
$write_buffer .= "+OK POP3 server signing off\r\n";
$active = false;
break;
case 'STAT':
$message_count = count($messages);
$mailbox_size = 0;
foreach($messages as $message) {
$mailbox_size += strlen($message);
}
$write_buffer .= "+OK $message_count $mailbox_size\r\n";
break;
case 'LIST':
$start_index = (int) $argument;
$message_count = count($messages) - $start_index;
$total_size = 0;
for($i = $start_index; $i < count($messages); $i++) {
$total_size += strlen($messages[$i]);
}
$write_buffer .= "+OK $message_count messages ($total_size octets)\r\n";
for($i = $start_index; $i < count($messages); $i++) {
$message_id = $i + 1;
$message_size = strlen($messages[$i]);
$write_buffer .= "$message_id $message_size\r\n";
}
$write_buffer .= ".\r\n";
break;
case 'RETR':
$message_id = (int) $argument;
$message = $messages[$message_id - 1];
$message_size = strlen($message);
$write_buffer .= "+OK $message_size octets\r\n";
$write_buffer .= "$message\r\n";
$write_buffer .= ".\r\n";
break;
case 'DELE':
$write_buffer .= "+OK\r\n";
break;
case 'NOOP':
$write_buffer .= "+OK\r\n";
break;
case 'LAST':
$message_count = count($messages) - $start_index;
$write_buffer .= "+OK $message_count\r\n";
break;
case 'RSET':
$write_buffer .= "+OK\r\n";
break;
default:
$write_buffer .= "-ERR Unknown command '$command'\r\n";
}
}
}
} else {
break;
}
}
?>
邮局协议(POP)是本地电子邮件客户端用于通过TCP/IP连接从远程服务器检索电子邮件的应用程序层Internet标准协议。 POP支持访问远程邮箱的简单下载和删除要求。 POP3服务器侦听已知端口110。 软件包com.sun.mail.pop3是JavaMail API的POP3协议提供程序,提供对POP3消息存储的访问。 下表列出了此包中的类: 名称 描述 POP3Folder POP3文件
IMAP是Internet Message Access Protocol缩写。 它是一种应用层Internet协议,允许电子邮件客户端访问远程邮件服务器上的电子邮件。 IMAP服务器通常侦听众所周知的端口143.基于SSL的IMAP(IMAPS)被分配给端口号993。 IMAP支持在线和离线操作模式。 使用IMAP的电子邮件客户端通常会在服务器上保留消息,直到用户明确删除它们为止。 软件包com
问题内容: 我正在尝试从POP3获取邮件(我正在使用POP3邮件服务器,并且正在尝试获取邮件内容并将其存储到我的项目的数据库表中。),但是我找不到所有的PHP脚本仅适用于IMAP。 您知道如何从POP3服务器中提取邮件吗? 谢谢。 问题答案: 令人惊讶的是,PHP的imap库也可以用于处理POP3邮箱。当然,大多数高级IMAP功能都无法使用(例如,文件夹或获取邮件部分),但是已实现了基本的POP3
问题内容: 如果存在一个以上的实现,哪个/更好的维护? 专门用于OAuth 2.0草案12。 问题答案: 来自OAuth Wiki ,似乎有一个名为oauth2-php的 PHP实现,它支持IETF v9草案。由于OAuth2仍是草案,因此可能很难找到更多实现。
在之前的几篇教程中,我们讲的是如何查询和Mutation操作,这些都是在客户端那边所进行的,那么服务器这边是如何处理这些请求的呢?这就是这篇教程所要说的东西了. 准备工作 克隆库: git clone https://github.com/zhouyuexie/learn-graphql 安装依赖: cd learn-graphql && npm install cd learn-graphql
创建实现服务的类,继承刚才创建的服务接口并实现接口即可: public class HelloService : IHelloService { public async Task<ResultModel> SayHello(string name) { ...具体的业务代码 return await