Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > Delphi > Работа с сетью в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail


Ответ
 
Опции темы
Старый 13.06.2008, 12:19   #1
SG13
Форумчанин
 
Аватар для SG13
 
Регистрация: 09.12.2007
Сообщений: 110
Сообщение Как програмно отправить письмо на E-mail ?

Как програмно отправить письмо на E-mail ?
Не забывайте что программирование это искусство!
SG13 вне форума Ответить с цитированием
Старый 13.06.2008, 12:27   #2
dimonbest
Форумчанин
 
Регистрация: 07.02.2008
Сообщений: 150
По умолчанию

http://programmersforum.ru/showthread.php?t=21638
dimonbest вне форума Ответить с цитированием
Старый 13.06.2008, 12:50   #3
Квэнди
Старожил
 
Аватар для Квэнди
 
Регистрация: 13.12.2006
Сообщений: 3,859
По умолчанию

для отправки существует множество вариантов:
самое простое выполнить комманду mailto:XXXX (абсолютно также как вы пишете в ссылках HTML) вследствие чего запустится Mail клиент, который натсроен по умолчанию на клиенсткой машине с окном создания сообщения, где в адресата уже будет вбит адрес, который вы укажете при выполнении комманды.
второй способ это использовать компонент Indy (на вкладке Indy Clients) TIdSmtp с помощью которго уже можно отправить письмо без отображения и запуска каких-либо дополнительных программ. Этотр компонент вам предоставляет реализованный интерфейс RFC 1870.
Можно отправлять письма с помощью TIdTcp (все с той же вкладки) где вы сами коннектитесь к SMTP серверу и общаетесь с ним согласно вышеуказанному RFC.
Можно также отправлять почту используя WinSocket вот пример:
Код:
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;
для примера можете посомтреть готовый почтовый клиент, реализованный Alar-ом (http://www.programmersclub.ru/alar-pochovik/)
ICQ не для вопросов, а для предложений. Для вопросов используйте форум
IRC канал клуба программистов|Мои статьи
Квэнди вне форума Ответить с цитированием
Ответ

Здесь нужно купить рекламу за 20 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru
Без учёта ботов - 20000 человек в день, 350000 в месяц.

Опции темы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Новое письмо на серваке doniyor Работа с сетью в Delphi 1 25.06.2008 21:23
Подскажите как отправить E-mail из программы... Артем Чижук Общие вопросы Delphi 1 07.06.2008 08:47
Получит письмо с нормальным телом iamur Работа с сетью в Delphi 6 11.03.2008 16:59