Vladsvn
Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Добрый день! Для отправки почты используется скрипт, код которого приведен ниже, отправляющий письма через сокеты. И при этом обнаружилось странное свойство: если в тексте самого письма встречается двоеточие, то письмо приходит пустым. Как удалось выяснить, так происходит по той причине, что в этом случае текст воспринимается как почтовая директива и виден в заголовках сообщения (скриншот https://i.postimg.cc/fyZp1jLM/1.jpg). Если же двоеточие убрать, то текст попадает в тело письма, где он и должен быть (скриншот https://i.postimg.cc/SNMRqcmc/image.jpg). Не пойму, как обеспечить попадание в тело письма любого произвольного текста, в том числе и с двоеточием? function smtpmail($mail_to, $subject, $message, $from_name){ // Атрибуты соединения с сервером $smtp_server = "smtp.beget.ru"; // smtp.server.ru реальные данные $login = "subscribe@site.ru"; // login соответствующего $password = "B8jBu7o?"; // password реального ящика $domen = "site.ru"; $port = 2525; // порт для отправки писем $from_mail = $login; $encoding = "utf-8"; $socket = @fsockopen($smtp_server, $port, $errno, $errstr, 30); if(substr(@fgets($socket,256),0,3) != 220) die("Сервер $smtp_server не найден"); usleep(1000); fputs($socket, "EHLO $smtp_server\r\n"); if(substr(@fgets($socket,256),0,3) != 250) die("Сервер не принял команду идентификации EHLO"); usleep(1000); fputs($socket, "AUTH LOGIN\r\n"); if(substr(@fgets($socket,256),0,3) != 250) die("Сервер отклонил аутентификацию AUTH LOGIN"); fgets($socket,256); usleep(1000); fputs($socket, base64_encode($login)."\r\n"); if(substr(@fgets($socket,256),0,3) != 250) die("Не принят логин"); fgets($socket,256); usleep(1000); fputs($socket, base64_encode($password)."\r\n"); if(substr(@fgets($socket,256),0,3) != 250) die("Пароль неверен"); fgets($socket,256); usleep(1000); $SEND = "Date: ".date("r")."\r\n"; $SEND .= "From: =?$encoding?B?".base64_encode($from_name)."?= <$from_mail>\r\n"; $SEND .= "X-Priority: 3 (Normal)\r\n"; $SEND .= "Message-ID: <" . mt_rand(123456789, 987654321) . "575496646." . date("YmjHis") . "@$domen>\r\n"; $SEND .= "List-Subscribe: <http://site.ru/subscribe>\r\n"; $SEND .= "List-Unsubscribe: <http://site.ru/unsubscribe/?adr=$mail_to>\r\n"; $SEND .= "To: $mail_to\r\n"; $SEND .= "Subject: =?$encoding?B?".base64_encode($subject)."?=\r\n"; $SEND .= "MIME-Version: 1.0\r\n"; $SEND .= "Content-Type: text/html; charset=$encoding\r\n"; $SEND .= "Content-Transfer-Encoding: quoted-printable\r\n"; $SEND .= quoted_printable_encode($message) ."\r\n"; unset($flag); fputs($socket, "MAIL FROM: <$from_mail>\r\n"); if(substr(fgets($socket,256),0,3) != 250) $flag = "Ошибка адреса отправителя MAIL FROM"; fgets($socket,256); usleep(1000); fputs($socket, "RCPT TO: <$mail_to>\r\n"); if(substr(fgets($socket,256),0,3) != 250) $flag = "Ошибка адреса получаетеля mail_to"; fgets($socket,256); usleep(1000); fputs($socket, "DATA\r\n"); if(substr(fgets($socket,256),0,3) != 250) $flag = "Ошибка инициации почтовых данных DATA"; fgets($socket,256); usleep(1000); fputs($socket, $SEND."\r\n.\r\n"); if(substr(fgets($socket,256),0,3) != 334) $flag = "Ошибка передачи письма"; fgets($socket,256); usleep(1000); fputs($socket, "QUIT\r\n"); if(substr(fgets($socket,256),0,3) != 334) $flag = "Ошибка звершения сеанса"; fgets($socket,256); usleep(1000); fclose($socket); } $email = "mem@1xxxx7.ru"; smtpmail($email, "Тема smtpmail.php", "Parol: 1SWt", "ВБК"); |