gpt4 book ai didi

php - 用 socket_create 和 socket_connect 替换 fsockopen

转载 作者:行者123 更新时间:2023-12-03 11:56:09 26 4
gpt4 key购买 nike

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

不幸的是 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 创建的资源的警告。

    最佳答案

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

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

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

    关于php - 用 socket_create 和 socket_connect 替换 fsockopen,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8822420/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com