【问题标题】:PHP imap via proxyPHP imap 通过代理
【发布时间】:2017-12-19 10:56:34
【问题描述】:

有什么解决方案可以通过 php 上的代理工作 imap 吗?如果我可以使用 fsockopen 并通过代理使用 imap,那就太好了。如何通过代理连接到 imap?如何登录,发送命令?我查看了所有网络并没有找到任何解决方案。这个主题确实缺乏足够的信息。非常感谢任何可以提供帮助的人!

【问题讨论】:

  • 内置的 IMAP 库中的 PHP 似乎不支持代理,但您可以随时使用自己的代理。 IMAP 的描述是 RFC 3501。
  • 我怎样才能自己滚动?用什么? Fsockopen 到代理和使用命令到 imap 服务器?
  • 都是socket编程。 IMAP 协议已记录在案,我确信有大量资源可用于如何通过套接字发送数据。但是,所有 IMAP、MIME 和电子邮件解析都是一项非常庞大的工作,需要大量知识。

标签: php proxy imap


【解决方案1】:
$ch = curl_init("imaps://imap.server.com:993/INBOX;UID=1");

curl_setopt_array($ch,[
    CURLOPT_HEADER => false,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_FOLLOWLOCATION => true,
    CURLOPT_SSL_VERIFYPEER => false,
    CURLOPT_SSL_VERIFYHOST => false,
    CURLOPT_USERNAME => 'postbox@server.com',
    CURLOPT_PASSWORD => 'password',
    CURLOPT_PROXYTYPE => CURLPROXY_SOCKS5,
    CURLOPT_PROXY => "proxy-ip-addr:proxy-port"
]);

$content = curl_exec( $ch );
curl_close($ch);
echo $content;

这是如何从收件箱中获取消息 #1 的示例。 可以使用 CURLOPT_CUSTOMREQUEST 选项发送非 GET IMAP 命令。 例如删除消息:

$ch = curl_init("imaps://imap.server.com:993/INBOX;UID=1");

curl_setopt_array($ch,[
    CURLOPT_CUSTOMREQUEST => 'DELETE',
    CURLOPT_HEADER => false,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_FOLLOWLOCATION => true,
    CURLOPT_SSL_VERIFYPEER => false,
    CURLOPT_SSL_VERIFYHOST => false,
    CURLOPT_USERNAME => 'postbox@server.com',
    CURLOPT_PASSWORD => 'password',
    CURLOPT_PROXYTYPE => CURLPROXY_SOCKS5,
    CURLOPT_PROXY => "proxy-ip-addr:proxy-port"
]);

$content = curl_exec( $ch );
curl_close($ch);

【讨论】:

  • 你能解释一下这段代码吗?
  • 对不起,我无法想象这段代码需要澄清什么。都是php基础知识的水平。每个特定任务的 IMAP 命令都可以在 IMAP 规范中找到。这里描述了一种使用 IMAP 服务器的简单但显然不明显的方法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多