Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/241.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 将fsockopen替换为socket_create和socket_connect_Php_Email_Sockets_Phpmailer - Fatal编程技术网

Php 将fsockopen替换为socket_create和socket_connect

Php 将fsockopen替换为socket_create和socket_connect,php,email,sockets,phpmailer,Php,Email,Sockets,Phpmailer,我正在使用phpmailer发送电子邮件,当我需要连接到远程邮件服务器时,在主机上发送邮件时遇到一些问题。 我从技术支持处得到信息,我需要将我的服务器ip与远程服务器绑定。 这是我第一次玩插座 不幸的是,phpmailer使用fsocketopen,所以我就是这样更改它的: //my replacement code $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP); $conn = socket_connect($socket, $h

我正在使用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():提供的资源不是有效的流资源

  • 警告:套接字获取状态():提供的资源不是有效流 资源

如何创建与从fsockopen返回的资源兼容的资源?
使用var_dump,它表示这两个变量都是套接字。但我仍然收到使用Sign socket\u create创建的资源的警告。

您需要返回的是流资源,而不是套接字资源。正在尝试使用函数流\u socket\u client()


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

您需要返回的是流资源,而不是套接字资源。正在尝试使用函数流\u socket\u client()

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

请参阅

你也可以要求我为PHPMailer实现smtp类插件,它可以在一台计算机上从不同的IP发送电子邮件。请参阅我的帐户中的联系人

顺便说一句,我的英语很抱歉

你也可以要求我为PHPMailer实现smtp类插件,它可以在一台计算机上从不同的IP发送电子邮件。请参阅我的帐户中的联系人


另外,很抱歉我的英语

谢谢你的回答,但关于技术支持的直播,我应该将我的ip与远程邮件服务器绑定。使用stream\u socket\u客户端,我已经创建了连接。或者连接后我不能绑定吗?很抱歉问了这么多问题,我不是网络问题的高手。当你连接到客户端时,你不会在IP上“绑定”。绑定用于创建侦听连接,然后将其“bind()”绑定到本地接口/地址以侦听其上的传入连接。在出站客户端连接上,您提供目标主机(IP)和端口,它将连接到远端服务。您是否有任何显示更多信息的错误或日志?因此我是否需要此“绑定”来发送SMTP邮件?这有意义吗?或者我的主机技术支持是错误的?来自telnet连接的更多信息:450客户端主机被拒绝:找不到您的主机名,[213.134.162.98]421 server.na.me错误:超时我的邮件服务器上是否存在反向dns问题?看起来您在该IP上没有PTR,因此反向查找肯定会损害您发送电子邮件的能力。在这种情况下,请查看您的技术支持是否提供出站中继邮件,并且应该能够配置邮件程序以将邮件中继到差异服务器。否则,您应该将ptr放在与Web服务器的正向查找相匹配的位置上。感谢您的回答,但在关于技术支持的直播中,我应该将我的ip与远程邮件服务器绑定。使用stream\u socket\u客户端,我已经创建了连接。或者连接后我不能绑定吗?很抱歉问了这么多问题,我不是网络问题的高手。当你连接到客户端时,你不会在IP上“绑定”。绑定用于创建侦听连接,然后将其“bind()”绑定到本地接口/地址以侦听其上的传入连接。在出站客户端连接上,您提供目标主机(IP)和端口,它将连接到远端服务。您是否有任何显示更多信息的错误或日志?因此我是否需要此“绑定”来发送SMTP邮件?这有意义吗?或者我的主机技术支持是错误的?来自telnet连接的更多信息:450客户端主机被拒绝:找不到您的主机名,[213.134.162.98]421 server.na.me错误:超时我的邮件服务器上是否存在反向dns问题?看起来您在该IP上没有PTR,因此反向查找肯定会损害您发送电子邮件的能力。在这种情况下,请查看您的技术支持是否提供出站中继邮件,并且应该能够配置邮件程序以将邮件中继到差异服务器。否则,您应该在与Web服务器的正向查找相匹配的内容上放置一个ptr。
$this->smtp_conn = stream_socket_client("tcp://".$host.":".$port,
$errno,
$errstr,
$tval);