Sending mail through SMTP in PHP

Some time ago, I noticed that messages sent from my server no longer reach the addressee. Rarely, end up in the spam folder, usually does not reach. It was immediately clear that the problem is in the function mail ();

There were two solutions: read many manuals, and configure the server so that the function mail () will send all correspondence or send mail via SMTP. As you know, I chose the second path.
\r\n”; $SEND .= “To: $mail_to <$mail_to>\r\n”; $SEND .= “X-Priority: 3\r\n\r\n”; } $SEND .= $message.”\r\n”; if( !$socket = fsockopen($config[‘smtp_host’], $config[‘smtp_port’], $errno, $errstr, 30) ) { if ($config[‘smtp_debug’]) echo $errno.”
“.$errstr; return false; } if (!server_parse($socket, “220”, __LINE__)) return false; fputs($socket, “HELO ” . $config[‘smtp_host’] . “\r\n”); if (!server_parse($socket, “250”, __LINE__)) { if ($config[‘smtp_debug’]) echo ‘

Не могу отправить HELO!

‘; fclose($socket); return false; } fputs($socket, “AUTH LOGIN\r\n”); if (!server_parse($socket, “334”, __LINE__)) { if ($config[‘smtp_debug’]) echo ‘

Не могу найти ответ на запрос авторизаци.

‘; fclose($socket); return false; } fputs($socket, base64_encode($config[‘smtp_username’]) . “\r\n”); if (!server_parse($socket, “334”, __LINE__)) { if ($config[‘smtp_debug’]) echo ‘

Логин авторизации не был принят сервером!

‘; fclose($socket); return false; } fputs($socket, base64_encode($config[‘smtp_password’]) . “\r\n”); if (!server_parse($socket, “235”, __LINE__)) { if ($config[‘smtp_debug’]) echo ‘

Пароль не был принят сервером как верный! Ошибка авторизации!

‘; fclose($socket); return false; } fputs($socket, “MAIL FROM: <".$config['smtp_username'].">\r\n”); if (!server_parse($socket, “250”, __LINE__)) { if ($config[‘smtp_debug’]) echo ‘

Не могу отправить комманду MAIL FROM:

‘; fclose($socket); return false; } fputs($socket, “RCPT TO: <" . $mail_to . ">\r\n”); if (!server_parse($socket, “250”, __LINE__)) { if ($config[‘smtp_debug’]) echo ‘

Не могу отправить комманду RCPT TO:

‘; fclose($socket); return false; } fputs($socket, “DATA\r\n”); if (!server_parse($socket, “354”, __LINE__)) { if ($config[‘smtp_debug’]) echo ‘

Не могу отправить комманду DATA

‘; fclose($socket); return false; } fputs($socket, $SEND.”\r\n.\r\n”); if (!server_parse($socket, “250”, __LINE__)) { if ($config[‘smtp_debug’]) echo ‘

Не смог отправить тело письма. Письмо не было отправленно!

‘; fclose($socket); return false; } fputs($socket, “QUIT\r\n”); fclose($socket); return TRUE; } function server_parse($socket, $response, $line = __LINE__) { global $config; while (@substr($server_response, 3, 1) != ‘ ‘) { if (!($server_response = fgets($socket, 256))) { if ($config[‘smtp_debug’]) echo “

Проблемы с отправкой почты!

$response
$line
“; return false; } } if (!(substr($server_response, 0, 3) == $response)) { if ($config[‘smtp_debug’]) echo “

Проблемы с отправкой почты!

$response
$line
“; return false; } return true; } ?>

\r\n”;
$SEND .= “To: $mail_to <$mail_to>\r\n”;
$SEND .= “X-Priority: 3\r\n\r\n”;
}
$SEND .= $message.”\r\n”;
if( !$socket = fsockopen($config[‘smtp_host’], $config[‘smtp_port’], $errno, $errstr, 30) ) {
if ($config[‘smtp_debug’]) echo $errno.”
“.$errstr;
return false;
}

if (!server_parse($socket, “220”, __LINE__)) return false;

fputs($socket, “HELO ” . $config[‘smtp_host’] . “\r\n”);
if (!server_parse($socket, “250”, __LINE__)) {
if ($config[‘smtp_debug’]) echo ‘

Не могу отправить HELO!

‘;
fclose($socket);
return false;
}
fputs($socket, “AUTH LOGIN\r\n”);
if (!server_parse($socket, “334”, __LINE__)) {
if ($config[‘smtp_debug’]) echo ‘

Не могу найти ответ на запрос авторизаци.

‘;
fclose($socket);
return false;
}
fputs($socket, base64_encode($config[‘smtp_username’]) . “\r\n”);
if (!server_parse($socket, “334”, __LINE__)) {
if ($config[‘smtp_debug’]) echo ‘

Логин авторизации не был принят сервером!

‘;
fclose($socket);
return false;
}
fputs($socket, base64_encode($config[‘smtp_password’]) . “\r\n”);
if (!server_parse($socket, “235”, __LINE__)) {
if ($config[‘smtp_debug’]) echo ‘

Пароль не был принят сервером как верный! Ошибка авторизации!

‘;
fclose($socket);
return false;
}
fputs($socket, “MAIL FROM: <".$config['smtp_username'].">\r\n”);
if (!server_parse($socket, “250”, __LINE__)) {
if ($config[‘smtp_debug’]) echo ‘

Не могу отправить комманду MAIL FROM:

‘;
fclose($socket);
return false;
}
fputs($socket, “RCPT TO: <" . $mail_to . ">\r\n”);

if (!server_parse($socket, “250”, __LINE__)) {
if ($config[‘smtp_debug’]) echo ‘

Не могу отправить комманду RCPT TO:

‘;
fclose($socket);
return false;
}
fputs($socket, “DATA\r\n”);

if (!server_parse($socket, “354”, __LINE__)) {
if ($config[‘smtp_debug’]) echo ‘

Не могу отправить комманду DATA

‘;
fclose($socket);
return false;
}
fputs($socket, $SEND.”\r\n.\r\n”);

if (!server_parse($socket, “250”, __LINE__)) {
if ($config[‘smtp_debug’]) echo ‘

Не смог отправить тело письма. Письмо не было отправленно!

‘;
fclose($socket);
return false;
}
fputs($socket, “QUIT\r\n”);
fclose($socket);
return TRUE;
}

function server_parse($socket, $response, $line = __LINE__) {
global $config;
while (@substr($server_response, 3, 1) != ‘ ‘) {
if (!($server_response = fgets($socket, 256))) {
if ($config[‘smtp_debug’]) echo “

Проблемы с отправкой почты!

$response
$line
“;
return false;
}
}
if (!(substr($server_response, 0, 3) == $response)) {
if ($config[‘smtp_debug’]) echo “

Проблемы с отправкой почты!

$response
$line
“;
return false;
}
return true;
}
?>

Использовать её можно так-же как и обычную функцию mail:
PHP