【问题标题】:Reading mails on server with IMAP?使用 IMAP 在服务器上读取邮件?
【发布时间】:2012-08-03 13:34:36
【问题描述】:

我正在设置一个“类似代理”的电子邮件,通知电子邮件会发送给他订阅的用户,但他可以回复电子邮件notification@site.com,其中应该包含他的回复。在服务器端,我希望能够阅读他的电子邮件并将他的回复添加到数据库中 - 电子邮件存储在 notification 用户收件箱中,这很棒,现在可以使用 PHP 阅读它。

所以,我一直在寻找解决方案,很多解决方案都是 IMAP,所以我想尝试一下,但我似乎无法确定我的服务器连接以打开收件箱。我调整了不同的端口,但没有一个能够连接。

imap_open("{localhost/imap:143}", "notification", "password");

我收到这样的错误:

Warning: imap_open(): Couldn't open stream {localhost/imap:143} in /var/www/site.com/www/mail.php on line 8
bool(false)

Notice: Unknown: Connection failed to localhost,143: Connection refused (errflg=1) in Unknown on line 0

Notice: Unknown: Connection failed to localhost,143: Connection refused (errflg=1) in Unknown on line 0

Notice: Unknown: Connection failed to localhost,143: Connection refused (errflg=1) in Unknown on line 0

Notice: Unknown: Connection failed to localhost,143: Connection refused (errflg=2) in Unknown on line 0

我不明白,显然这是我第一次尝试这个,但我显然在连接上做错了什么?

编辑:我开始 courier-imap 现在我明白了:

Notice: Unknown: [CLOSED] IMAP connection broken (server response) (errflg=1) in Unknown on line 0

Notice: Unknown: [ALERT] Fatal error: No such file or directory: No such file or directory in Unknown on line 0

【问题讨论】:

  • 我想到了一些事情。其中之一与您的防火墙有关。如果 143 端口被阻塞,将会导致连接失败。
  • 那么您知道可以连接到邮件收件箱的常用端口吗?
  • 这完全取决于您的邮件服务器是如何设置的。我的建议是您必须打开端口 143 才能使其正常工作(如果它被阻止,那就是)。
  • 尝试远程登录到邮件服务器? bobpeers.com/technical/telnet_imap
  • @BurningtheCodeigniter 您是否绝对 115% 确定 a) IMAP 服务正在运行并且 b) 它正在侦听 TCP:143?我想说防火墙不太可能阻碍环回流量,似乎更有可能根本没有任何东西可以连接。

标签: php email imap


【解决方案1】:

您在这里要求进行基本调试,所以我尝试一下,也许这台机器

您是否尝试过指定邮箱?顺便说一句,您实际上应该使用正确的语法,它是 host:port/protocolimap 是默认协议,您可以将其省略:

imap_open("{localhost:143}INBOX", "notification", "password");
            ^^^^^^^^^^^^^ ^^^^^

请与imap_openDocs上的许多示例和注释进行比较。

由于这是调试,请尝试:

var_dump(imap_errors(), imap_alerts());

调试愉快。

【讨论】:

    【解决方案2】:

    我在我的 Ubuntu 11.04 系统上遇到了完全相同的问题,我通过使用以下命令在我的主目录中创建“Maildir”文件夹(如 here 所述)解决了问题:

    cd ~
    maildirmake Maildir
    maildirmake Maildir/.Drafts
    maildirmake Maildir/.Sent
    maildirmake Maildir/.Trash
    maildirmake Maildir/.Templates
    chmod -R 700 Maildir
    

    首先,您应该检查日志文件“/var/log/syslog”中的错误(例如通过执行命令sudo tail /var/log/syslog)。
    在我的日志中,我注意到以下错误:imapd: chdir Maildir: No such file or directory.
    所以我检查了配置文件“/etc/courier/imapd”,发现 MAILDIRPATH 选项设置为“Maildir”:

    #
    # MAILDIRPATH - directory name of the maildir directory.
    #
    MAILDIRPATH=Maildir
    

    然后我按照上面的描述创建了“Maildir”文件夹,“imap_open()”函数终于起作用了。

    【讨论】:

    • 当我在 root 帐户上执行 sudo tail /var/log/syslog 时,文件中出现登录错误,但用户 notification 和密码正确。
    • 可能错误出现在文件“/var/log/syslog”的最后10行之前,所以使用“tail”命令找不到“imapd”错误。试试这个命令:sudo grep imapd /var/log/syslog。但是,您是否检查了“/etc/courier/imapd”文件中的 MAILDIRPATH 设置?如果它设置为“Maildir”,您是否检查过“/home/notification/Maildir”文件夹是否存在?如果没有,您可以使用我的答案中显示的命令创建它吗?显然,您必须使用cd /home/notification 而不是cd ~
    • imapd的系统日志中没有错误,/home/notification/Maildir也存在。
    • Aug 15 16:47:34 server imapd: Connection, ip=[::ffff:xx.xx.xx.xx] Aug 15 16:47:34 server imapd: LOGIN FAILED, user=notification@mysite.com, ip=[::ffff:xx.xx.xx.xx] Aug 15 16:47:49 imapd: last message repeated 2 times Aug 15 16:47:49 server imapd: LOGOUT, ip=[::ffff:xx.xx.xx.xx], rcvd=164, sent=385
    • 我把服务器IP换成了xx.xx.xx.xx
    猜你喜欢
    • 2017-09-23
    • 1970-01-01
    • 2010-11-08
    • 1970-01-01
    • 2011-10-05
    • 1970-01-01
    • 2012-08-08
    • 1970-01-01
    • 2013-05-25
    相关资源
    最近更新 更多