Я использую phpmailer для отправки электронной почты и возникли проблемы с отправкой на мой хостинг, когда мне нужно подключиться к удаленному почтовому серверу. Я получил информацию от технической поддержки, что мне нужно связать свой сервер ip с удаленным сервером. Это первый раз, когда я возился с сокетами.Замените fsockopen на socket_create и socket_connect
К сожалению 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 говорит, что эти два vars являются сокетами. Но я все еще получаю предупреждения для созданного ресурса usign socket_create.
Спасибо за ответ, но в прямом эфире относительно технической поддержки я должен сокет_bind мой ip с удаленным почтовым сервером. Используя stream_socket_client, я уже создаю соединение. Или, может быть, я свяжусь после подключения? Извините за столько вопросов, я не мастер по сетевым проблемам. –
Вы не привязываетесь к IP при подключении к клиенту. Связывание предназначено для создания прослушивающего соединения, а затем «bind()» на локальный интерфейс/адрес для прослушивания входящих подключений. На исходящем клиентском соединении вы предоставляете хост (IP) и порт назначения, и он будет подключаться к службе дальнего конца. У вас есть какие-либо ошибки или журналы, которые показывают больше информации? – ddubs
Так мне нужна эта «привязка» для отправки SMTP-сообщения? Имеет ли смысл какой-либо смысл или техническая поддержка моего хоста? Дополнительная информация из telnet-соединения: 450 Клиентский хост отклонен: не удается найти ваше имя хоста, [213.134.162.98] 421 server.na.me Ошибка: превышен тайм-аут –