【问题标题】:Replace fsockopen with socket_create and socket_connect用 socket_create 和 socket_connect 替换 fsockopen
【发布时间】:2012-01-11 16:01:12
【问题描述】:

我正在使用 phpmailer 发送电子邮件,当我需要连接到远程邮件服务器时,在我的主机上发送时遇到了一些问题。 我从技术支持那里得到信息,我需要将我的服务器 ip 与远程服务器绑定。 这是我第一次搞乱套接字。

不幸的是 phpmailer 使用 fsocketopen,所以我是这样更改的:

//my replacement code
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
$conn = socket_connect($socket, $host, $port);
if($conn) {
    $this->smtp_conn = $socket;
} else {
    throw new Exception("Failed to connect to server: ".socket_last_error($socket));
}

//original phpmailer code
/**
$this->smtp_conn = @fsockopen($host,    // the host of the server
                             $port,    // the port to use
                             $errno,   // error number if any
                             $errstr,  // error message if any
                             $tval);   // give up after ? secs
 */

但在更改之后我收到警告:

  • 警告:fputs():提供的资源不是有效的流资源

  • 警告:socket_get_status():提供的资源不是有效的流 资源

如何创建与从 fsockopen 返回的资源兼容的资源? 使用 var_dump 它说这两个变量都是套接字。但我仍然收到有关使用 socket_create 创建的资源的警告。

【问题讨论】:

    标签: php email sockets phpmailer


    【解决方案1】:

    您需要返回流资源,而不是套接字资源。尝试使用函数 stream_socket_client()。

    $this->smtp_conn = stream_socket_client("tcp://".$host.":".$port,
    $errno,
    $errstr,
    $tval);
    

    另外,您确定您的托管服务提供商允许您直接从您的服务器向外发送电子邮件吗?有时他们会提供一个中继邮件服务器供您用于出站电子邮件。

    【讨论】:

    • 感谢您的回答,但在现场技术支持方面,我应该将我的 ip 与远程邮件服务器套接字绑定。使用 stream_socket_client 我已经创建了连接。还是连接后绑定不了?抱歉问了这么多问题,我不是网络问题的高手。
    • 当您连接到客户端时,您不会“绑定”IP。绑定用于创建侦听连接,然后您“绑定()”到本地接口/地址以侦听传入连接。在出站客户端连接上,您提供目标主机(IP)和端口,它将连接到远端服务。您是否有任何显示更多信息的错误或日志?
    • 那么我需要这个“绑定”来发送 SMTP 消息吗?这是否有意义或我的主机技术支持有误?来自 telnet 连接的更多信息:450 客户端主机被拒绝:找不到您的主机名,[213.134.162.98] 421 server.na.me 错误:超时
    • 我的邮件服务器是否存在反向 dns 问题?
    • 看起来您在该 IP 上没有 PTR,因此反向查找肯定会损害您发送电子邮件的能力。在这种情况下,请查看您的技术支持是否提供出站中继邮件,并且应该能够配置邮件程序以将邮件中继到差异服务器。否则,您应该在与网络服务器的正向查找匹配的位置上放置一个 ptr。
    【解决方案2】:

    this answer

    您也可以向我索要我自己的 PHPMailer 实现 smtp-class 插件,它可以在一台计算机上从不同的 IP 发送电子邮件。在我的帐户中查看联系人。

    附:对不起我的英语

    【讨论】:

      猜你喜欢
      • 2010-10-08
      • 2011-05-24
      • 2014-11-25
      • 2019-06-29
      • 2013-05-17
      • 1970-01-01
      • 2011-12-09
      • 2016-04-29
      相关资源
      最近更新 更多