Просмотр полной версии : Почта через socket на PHP
Народ, как отправить почту с другого сервера через сокеты и реализовать это на PHP? :молись:
отправить почту с другого сервераЧто это означает? Послать письмо через соксовый прокси или что?
Есть сервер, но на нем не стоит почтовый клиент, нужно открыть socket соединение с почтовым сервером и отправить почту, как я понимаю, только я не знаю, как это делается...:(
погоди... может, какая-то хитрая постановка задачи - но в функции мейл есть параметры "адрес мейл-сервера", "порт" и тд - что не дает указать параметры почтового сервера?
нет, нужно именно через сокет:)
Причем в mail() нет параметра "адрес мейл-сервера" и "порт"... :confused:
function send($server, $to, $from, $subject="", $headers="") {
$headers="To: $to\nFrom: $from\nSubject: $subject\nX-Mailer: The Mouse!\n$headers";
$fp = fsockopen($server, 25, &$errno, &$errstr, 30);
if (!$fp)
die("Server $server. Connection failed: $errno, $errstr");
fputs($fp,"HELO $server\n");
fputs($fp,"MAIL FROM: $from\n");
fputs($fp,"RCPT TO: $to\n");
fputs($fp,"DATA\n");
fputs($fp,$this->headers);
if (strlen($headers))
fputs($fp,"$headers\n");
fputs($fp,$this->mime);
fputs($fp,"\n.\nQUIT\n");
while(!feof($fp))
$resp.=fgets($fp,1024);
fclose($fp);
} PS: не проверял.
PEAR Mail (http://pear.php.net/package/Mail) позволяет отправлять почту напрямую через smtp
в общем, смотри тут: http://ru.php.net/mail - особенно обрати внимание на комменты ниже статьи хелпа
честно говоря, не вижу ни единого резона слать почту через сокеты вместо обычного процессинга.
А что есть "обычный процессинг"? ... те же сокеты.
я имел в виду использовать mail вместо прямой коммуникации с портом :)
Я понял. Просто есть немало причин отказаться от mail() ... например невозможность задать таймаут на отправку.
RaZEr
А если на почтовике нужна авторизация, то что нужно добавить в твой скрипт? :молись:
Если тебе так уж необходимо опуститься на столь низкий уровень - поставь сниффер, отлови сессию любого почтовика с сервером и сдублируй
дешево и сердито :)
в твой скриптСкрипт не мой. Добавить нужно отправку комманды AUTH. В зависимости от способа авторизации. Например "AUTH LOGIN". Далее нужно послать сначала логин, а потом пароль. Подробнее в RFC - http://www.faqs.org/rfcs/rfc2554.html
отлови сессию любого почтовика с сервером и сдублируйНа анализе снифа нормального интерфейса не напишешь. Нужно читать ман и знать что сервер хочет, и что может вернуть.
RaZEr:
На анализе снифа нормального интерфейса не напишешь. Нужно читать ман и знать что сервер хочет, и что может вернуть.
одно другому не помеха ;)
"Решая задачу, всегда полезно знать ответ заранее" ;)
<?
include("Mail.php");
$recipients = "mail_to@domain.mail";
$headers["From"] = "mail_from@domain.mail";
$headers["To"] = "mail_to@domain.mail";
$headers["Subject"] = "Test message";
$body = "TEST MESSAGE!!!";
$params["host"] = "smtp.server";
$params["port"] = "25";
$params["auth"] = true;
$params["username"] = "user";
$params["password"] = "password";
// Create the mail object using the Mail::factory method
$mail_object =& Mail::factory("smtp", $params);
$mail_object->send($recipients, $headers, $body);
?>
Я вот такой скрипт достал, только не понимаю, я Mail.php и pear.php положил, а он говорит
Call to undefined function: send()
что может быть не так? :idontnow:
Проверь, возвращает ли factory() ошибку или нужный объект.
if (PEAR::isError($mail_object)) {
die($mail_object->getMessage());
}
Вот незадача, узнал, что на серваке нет этого PEAR:( кто все-таки подскажет как через сокиты только с авторизацией. Можно не код, а что отсылать серверу, а именно как отсылать AUTH? :help: :молись:
Я кажется всё сказал. Посылаешь AUTH LOGIN, затем логин (в Base64) и далее пароль (тоже в base64).
А логин и пароль чем-то должны быть разделены или \n? И еще тогда вопросик, как перевести в base64 (желательно на PHP) :help:
А логин и пароль чем-то должны быть разделены или \n?Сначала посылаем логин, а потом пароль.
как перевести в base64www.php.net/base64_encode
Ура, написал скрипт, вроде даже работает, только на той машине на которой нужно пишет
fsockopen(): php_network_getaddresses: getaddrinfo failed: hostname nor servname provided, or not known ...
не знаете из-за чего может быть?
Да, действительно, по IP получается :yees:
vBulletin® v3.8.5, Copyright ©2000-2024, Jelsoft Enterprises Ltd.