【问题标题】:Trying to connect to email server from php script using imap_open尝试使用 imap_open 从 php 脚本连接到电子邮件服务器
【发布时间】:2021-04-24 13:01:31
【问题描述】:

我不是程序员,所以请多多包涵。对不起,如果这是愚蠢的。

我可以在我的网站上创建和使用php scripts 没问题。在过去的几天里,我一直在想办法以编程方式检查我的电子邮件。最常见的解决方案似乎涉及使用 imap_open 进行连接。这是一行代码的示例:

$mail = imap_open("{mymailserver:110}INBOX", "myname@mydomain.com", "mypassword");

很明显,我的邮件服务器、用户名和密码位于引号之间。就在第一行,页面挂起并最终给出 504 Gateway Time-out 错误。

Thunderbird 可以使用相同的邮件服务器、端口、名称和密码连接到我的电子邮件。如果我从 gmail 帐户插入信息,它仍然会挂起并超时。当我运行 phpinfo 时,它会显示有关启用 imap 的信息(抱歉,如果这不相关,我不确定)。

托管我的网站的 Network Solutions 告诉我,我不应该使用脚本连接到电子邮件,但如果我付费,他们会调查的。任何帮助将不胜感激,因为我已经尝试了 20 小时。谢谢。

【问题讨论】:

  • 可能您无法访问邮件服务器,因为主机不允许连接端口 504?如果可能:您是否输入了正确的邮件服务器地址?请仅发布您正在使用的主机名。您是否阅读了您正在使用的功能的手册和所有 cmets:php.net/manual/de/function.imap-open.php
  • 嗨,亚历山大。是的,我正在使用正确的信息。无论如何,我认为是这样,因为我将其保存在文本文件中,然后从文本文件中复制并粘贴到引号之间的变量中。这是我用来在 Thunderbird 中成功设置相同电子邮件帐户的相同信息。我绝对没有阅读有关使用该功能的所有内容,但我认为它不适用于 Network Solutions 托管的网站。我看到另一个帖子有人抱怨他的“附加组件”停止工作,因为网络解决方案不再允许 imap_open()。
  • “我看到另一个帖子,有人抱怨他的“附加组件”停止工作,因为网络解决方案不再允许 imap_open()。– JohnF 10 小时前“那么我们无法帮助你 ;-)但是你可以使用例如cloudmailin.com - 他们的免费计划每月提供 10.000 封电子邮件 - 付费计划也相当实惠。他们提供各种服务,例如将每封传入的电子邮件发布到您的服务器 - 这应该会有所帮助。您是否就该问题与 Network Solutions 联系过?在继续此处之前,您应该这样做!
  • 谢谢亚历山大。在发帖之前,我联系了 Network Solutions。我不确定我是否得到了知识渊博的回应。我被告知不要尝试使用脚本连接邮件,它不受支持,但如果我向工程师支付费用,他们会为我调查。至于使用其他电子邮件服务,这仍然行不通,因为我运行的任何脚本都无法使用 imap_open 进行连接。
  • 没有。我没有告诉你使用 imap_open。我告诉您使用替代解决方案,该服务向您发送带有 POST 的电子邮件,例如 cloudmailin。 POST 就像在 HTML 表单中一样。这会奏效。

标签: php email imap imap-open


【解决方案1】:

端口 110 用于 POP3。我建议您尝试通过端口 143 (IMAP) 连接

请尝试使用以下代码进行测试(将 imap.example.com 替换为您的邮件服务器,例如 mail.test.com):

注意:对于用户名,在您的情况下,它可能是您的电子邮件地址 (xxxx@xxxx.com)

<?php

ini_set('max_execution_time', 300); //300 seconds = 5 minutes 


$mbox = imap_open("{imap.example.com:143}", "username", "password");

echo "<h1>Mailboxes</h1>\n";
$folders = imap_listmailbox($mbox, "{imap.example.com: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);
?>

【讨论】:

  • 感谢您的示例脚本,Ken。不幸的是,当在其中输入我的凭据、上传并运行它时,页面恰好挂起 60 秒,然后给我一个网关超时错误。感谢您提供帮助。
  • 你的邮箱很可能有两封很多邮件,这种情况请加上say ini_set('max_execution_time', 300); //300 秒 = 脚本顶部的 5 分钟,然后重试(我也为此更新了答案)
  • Ken,那个帐户只有 3 封电子邮件。我只是在发布前几天设置了它。所有 3 封电子邮件都只有几个字,作为测试发送。我会尝试您关于将时间设置为 300 秒的建议,如果可行,请反馈。
  • 我刚刚尝试添加该行。没有改变。它仍然挂起,然后在 1 分钟后超时。不过我很欣赏这个建议。
  • 肯,这是截图。正如您在图像中看到的,如果我在登录前单击“显示”pop/imap 设置的链接,它会显示传入:pop3 服务器。旁边的屏幕截图是我登录后得到的,它显示了传入的服务器类型 imap。我也不知道那个 email-out-priv-myregisteredwebsite 是什么。我的 Thunderbird 电子邮件程序使用 pop3 端口 110 连接得很好。无论如何,无论我尝试过什么,它总是挂起,然后超时。这是我的设置的链接。我已经屏蔽了网站名称:flickr.com/photos/52623957@N02/50863952083/in/dateposted
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-09
  • 1970-01-01
  • 2019-09-08
  • 2020-05-13
  • 1970-01-01
  • 2019-12-06
相关资源
最近更新 更多