Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Как отправить письмо скрытно от пользователя по протоколу SMTP

Delphi , Интернет и Сети , E-mail

Как отправить письмо скрытно от пользователя по протоколу SMTP

Автор: BadBoy

{
smtp - ip адрес smtp сервера
port - порт smtp сервера, по умолчанию 25
from - адрес отправителя
dest - адрес получателя
subject - тема письма
body - текст писма
Возвращает True если письмо было успешно отправленно...
}

function mail(smtp: string; port: integer; from, dest, subject,
  body: string): bool;
const
  cl = #13#10;
var
WSAData: TWSAData;
  Host: TSockAddrIn;
  Sock: TSocket;
  res: Integer;
  buff: array[1..255] of Char;

  { отправляем данные через сокет }
  procedure senddata(str: string);
  var
    i: integer;
  begin
    for i := 1 to Length(str) do
      if send(Sock, str[i], 1, 0) = SOCKET_ERROR then
        exit;
  end;

  { получаем ответ от команды }
  function recvdata(accept: string): bool;
  var
    buff: array[1..255] of Char;
  begin
    res := recv(Sock, buff, SizeOf(buff), 0);
    Result := (Res = SOCKET_ERROR) or (Copy(buff, 1, 3) = accept);
  end;

begin
  try
    result := false;
    { инициализация сокета }
    WSAStartUp(257, WSAData);
    Sock := socket(AF_INET, SOCK_STREAM, IPPROTO_IP);
    if Sock = INVALID_SOCKET then
      Exit;

    { устанавливаем хост и порт сервера }
    res := inet_addr(PChar(smtp));
    if res <= 0 then
      exit;

    Host.sin_family := AF_INET;
    Host.sin_port := htons(port);
    Host.sin_addr.S_addr := res;

    { подключаемся к серверу }
    if connect(Sock, Host, SizeOf(Host)) > 0 then
      Exit;

    { приветствие сервера }
    if not recvdata('220') then
      Exit;

    { EHLO }
    senddata('EHLO' + cl);
    if not recvdata('250') then
      Exit;

    { MAIL FROM: }
    senddata('MAIL FROM:' + from + cl);
    if not recvdata('250') then
      Exit;

    { RCPT TO: }
    senddata('RCPT TO:' + dest + cl);
    if not recvdata('250') then
      Exit;

    { DATA }
    senddata('DATA' + cl);
    if not recvdata('354') then
      Exit;

    { отправляем текст сообщения }
    senddata('Subject:' + subject + cl + cl + body + cl + '.');
    if not recvdata('250') then
      Exit;

    { отключаемся от сервера }
    senddata('QUIT' + cl);

    result := true;
  finally
    { убиваем сокет }
    closesocket(sock);
    WSACleanup;
  end;
end;

{
mail('127.0.0.1',25,'bboy-ne@yandex.ru' ,'admin@company.mail', 'subj', 'body text');

p.s.: Тестировалась на e-mail сервере Alt-N Daemond Pro for Windows v6.5.1...
Функция делалась на основе статьи "Простой протокол передачи почты (SMTP)"
}

Программный код на языке Delphi для отправки электронной почты с использованием протокола SMTP. Он написан на Паскале и использует Windows Sockets API (Winsock) для установления соединения с сервером SMTP.

Вот разбивка кода:

  1. Функция mail принимает шесть параметров: smtp, port, from, dest, subject и body. Они представляют собой IP-адрес сервера SMTP, номер порта, адрес отправителя электронной почты, адрес получателя электронной почты, тему письма и текст письма.
  2. Функция инициализирует структуру WSAData для управления операциями Winsock.
  3. Она создает сокет с помощью функции socket и настраивает сокет для потоковой передачи данных (TCP).
  4. Код устанавливает соединение с сервером SMTP, вызывая функцию inet_addr, чтобы преобразовать IP-адрес в двоичный формат, а затем использует функцию connect, чтобы установить соединение.
  5. После подключения код отправляет команду "EHLO", чтобы инициировать транзакцию электронной почты.
  6. Он отправляет команду "MAIL FROM" с адресом отправителя электронной почты, а затем команду "RCPT TO" с адресом получателя электронной почты.
  7. Код отправляет команду "DATA", чтобы указать, что тело письма будет следовать.
  8. Он отправляет фактическое тело письма, включая тему и текст.
  9. Наконец, код отправляет команду "QUIT", чтобы прекратить сеанс SMTP.

Процедура senddata используется для отправки данных через сокет, а функция recvdata - для приема данных от сервера.

Чтобы использовать этот код, просто вызовите функцию mail с необходимыми параметрами, например:

mail('127.0.0.1', 25, 'bboy-ne@yandex.ru', 'admin@company.mail', 'subj', 'body text');

Обратите внимание, что этот код предназначен только для демонстрационных целей и может не работать с любым сервером SMTP или провайдером электронной почты. Вам может потребоваться модификация кода для адаптации к конкретным требованиям сервера или ошибкам.

Также помните, что отправка электронных писем программно может быть сложным процессом,涉ывающим вопросы аутентификации, шифрования и фильтрации спама. Этот код не обрабатывает эти аспекты, поэтому используйте его ответственно и с осторожностью.

Автор BadBoy описывает функцию для отправки электронного письма по протоколу SMTP скрытно от пользователя.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: E-mail ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-19 13:29:56
2024-10-24 19:57:19/0.0037801265716553/0