Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2018.03.25;
Скачать: CL | DM;

Вниз

Подскажите как отправить письмо используя сокеты?   Найти похожие ветки 

 
Lamer666   (2008-09-07 13:11) [0]

Подскажите как отправить письмо используя сокеты?
Задача стоит так, с локального компьютера хочу отправлять письма, но не используя SMTP Сервера.


 
Сергей М. ©   (2008-09-07 18:27) [1]


> хочу отправлять письма, но не используя SMTP Сервера


И кто ж его доставлять-то будет, кроме как SMTP-сервер[ы]  ? Святой дух ?)


 
Lamer666   (2008-09-07 18:46) [2]

Простите за моё незнание!, осознаю ошибку!
Поднимая вопрос SMTP сервера (http://www.delphikingdom.com/asp/answer.asp?IDAnswer=54626) поговаривают необходимо наличие "БЕЛОГО" IP адреса, а такого не имею!
Что делать уважаемый Сергей М. ?


 
Сергей М. ©   (2008-09-07 19:14) [3]

Подумай сам - чтобы отправить обычное письмо в обычном бумажном конверте, от тебя не требуется ни создание почтового отделения связи, ни его регистрация, ни вообще чего-то специфически связанного с технологиями и механизмами доставки почтовой корреспонденции.
Все что от тебя требуется, это подписать должным образом конверт, вложить в него собствеено бамажку с сообщением, заклеить и опустить в любой подходящий почтовый ящик. При этом ведь никто не интересуется есть ли у тебя прописка ("БЕЛЫЙ" адрес) ?

Так вот почтовое отделение связи - это SMTP-сервер, и тебе нет никакого дела до того каким образом оно доставит твое письмо. Твое клиентово дело - правильно подготовить свою почтовыю корреспонденцию и передать ее тем или иным образом на обработку/доставку любому подходящему почтовому отделению.

Т.б. все что тебе нужно - выполнить функции клиента.


 
Сергей М. ©   (2008-09-07 19:37) [4]

Впрочем, насчет прописки на сей день дело обстоит посложней .

Кое-где теперь могут и вправе и поинтересоваться)..


 
Lamer666   (2008-09-07 22:45) [5]


> Кое-где теперь могут и вправе и поинтересоваться)..

: )

Тем немение взял DEMO из Indy9 SMTPServer добавил SMTP клиента и Message, отправляю на запущенный IdSMTPServer но письма не доходят!
(((


 
Сергей М. ©   (2008-09-08 08:26) [6]


> Lamer666   (07.09.08 22:45) [5]


> Тем немение взял DEMO из Indy9 SMTPServer


Ты буквы в [3] вообще-то читал ?)

Не нужен тебе никакой сервер сотворять  !
Без сервера никак не обойтись, но зачем лепить свой сервер ?
Для доставки нужен smtp-сервер того домена, который указан в адресе справа от собаки)


 
Lamer666   (2008-09-08 11:00) [7]


> Для доставки нужен smtp-сервер того домена, который указан
> в адресе справа от собаки)

Вы хотите сказать что если я отправляю письмо на blablabla@someserver.ru я могу пользовать sameserver.ru? 8)
Или вы хотите сказать что мне нужно иметь аккаунт на mymail@mymail.ru  затем коннектиться к mymail.ru IdSMTP и используя свой аккаунт отправлять письмо?


 
Сергей М. ©   (2008-09-08 11:40) [8]


> если я отправляю письмо на blablabla@someserver.ru я могу
> пользовать sameserver.ru?


Нет, не можешь.

someserver.ru - это не имя почтового сервера , а доменное имя.


> мне нужно иметь аккаунт на mymail@mymail.ru  затем коннектиться
> к mymail.ru IdSMTP и используя свой аккаунт отправлять письмо?


Это классическая схема.
Если твой почтовый провайдер предоставляет возможность доставки твоей почт.корреспонденции за пределы своих почтовых доменов, то этого достаточно.


 
Lamer666   (2008-09-08 12:28) [9]

Я вообще ставлю целью отправки писем с локальной машины сразу получателю! Я представляю картину так, запустил на локальном компьюторе SMTP SERVER и через него шлю письма сразу vase-pupkinu@delphimaster.ru, но что то мне подсказывает что это схема не должна работать впринципе... вот и встает вопрос реализации...


 
Сергей М. ©   (2008-09-08 12:38) [10]


> что то мне подсказывает что это схема не должна работать
> впринципе


Конечно не должна)


> встает вопрос реализации


Как можно реализовать то что невозможно в принципе ?


 
Сергей М. ©   (2008-09-08 12:40) [11]

Что-то мне подсказывает, что ты намерен творить темные делишки)

Ты Кулспамером что ли решил заделаться, да ?)


 
Anatoly Podgoretsky ©   (2008-09-08 13:20) [12]


> Я вообще ставлю целью отправки писем с локальной машины
> сразу получателю!

Провалилась твоя спам-схема, нету у Васи Пупкина SMTP сервера на машине.


 
Lamer666   (2008-09-08 13:27) [13]


> Ты Кулспамером что ли решил заделаться, да ?)

Нет, темные делишки могу и через SMTP аккаунт рассылать...


> Провалилась твоя спам-схема, нету у Васи Пупкина SMTP сервера
> на машине.

8)


> Как можно реализовать то что невозможно в принципе ?

А как же: http://www.delphiworld.narod.ru/base/smtp_replay_server.html


 
Сергей М. ©   (2008-09-08 13:37) [14]


> Lamer666   (08.09.08 13:27) [13]
>
>


> А как же


Да все точно так же : если У Васи Пупкина нет smtp-сервера, то - хоть из штанов выпрыгни - послать письмо непосредственно Васе никак не удастся)


 
Anatoly Podgoretsky ©   (2008-09-08 13:44) [15]

> Lamer666  (08.09.2008 13:27:13)  [13]

> А как же: http://www.delphiworld.narod.ru/base/smtp_replay_server.html

Тебя обманули, как ребенка.


 
Lamer666   (2008-09-08 15:42) [16]


> Anatoly Podgoretsky ©   (08.09.08 13:44) [15]

Я подозревал!
Всем огромное спасибо: Anatoly Podgoretsky,Сергей М.!!!


 
Slym ©   (2008-09-09 16:39) [17]

Сергей М. ©   (08.09.08 11:40) [8]
someserver.ru - это не имя почтового сервера , а доменное имя.

да, но можно запросить через DNS MX запись этого домена...
и полученную запись использовать для доставки корреспонденции...
но тут другие грабли: MX сервера как правило более менее защищены от спама - DNS проверка обратой зоны, проверка на локальность и аутентификация и прочее


 
Сергей М. ©   (2008-09-09 17:10) [18]


> Slym ©   (09.09.08 16:39) [17]


Тут до ебабушки граблей


 
имя   (2009-08-26 11:24) [19]

Удалено модератором


 
belousov ©   (2009-08-27 03:57) [20]

Хотел бы продолжить тему... ситуация схожая... использую сервер исходящей почты smtp.mail.ru со своим аккаунтом. Использую ICS, т.к. с Indy проблем больше... Все замечательно отправляется и доходит и с кодировкой проблем нет, но вот когда посылаю письмо сразу нескольким людям(около 8 человек), то письма не доходят... я так понимаю, что mail.ru блокирует их отправку, принимает за смамство или что-то в этом роде... вот код:

//если есть кому отправлять, то
if ToComboBox.Text<>"" then
begin
 CFSets := LoadCFS;
 // установка SMTP
 with CFSets.SMTP_Sets do
  begin
   SMTP.Host:= SMTP_Host;
   SMTP.SignOn := SMTP_Host;
   SMTP.Port:= inttostr(SMTP_Port);
   Smtp.AuthType:= smtpAuthLogin; // atNone
   Smtp.Username:= SMTP_Login;
   Smtp.Password:= SMTP_Password;
   domain := copy(SMTP_Host, 6, length(SMTP_Host));
   Smtp.FromName := SMTP_Login + "@" + domain;
  end;
 //коннектимся
 //SMTP.Open;
 // установка сообщения
 // тема
 Smtp.HdrSubject := SubjectEdit.Text;
 Smtp.HdrFrom := FromEdit.Text; // адрес отправителя
 Smtp.MailMessage.Text := MsgTextMemo.Text;
 //проверяем кому нужно отправить сообщение
 if AnsiUpperCase(ToComboBox.Text)=AnsiUpperCase("Всем одногрупникам") then
  begin
   //выставляем позицию
   MsgSendProgressBar.Position := 0;
   MsgSendProgressBar.Max := SResListBox.Count;
   //перебираем элементы списка
   for i := 0 to SResListBox.Count - 1 do
    begin
     //отправляем поочередно письма по всем адресам из списка одногрупников
     SendMsg(SResListBox.Items.Strings[i]);
     //визуализируем отправку
     MsgSStatusLabel.Caption := "Отправка письма " + inttostr(i+1) + " из " + inttostr(SResListBox.Count);
     MsgSendProgressBar.Position := MsgSendProgressBar.Position + 1;
    end;
   {//ждем пока компонент готовиться к работе
   repeat
   Application.ProcessMessages;
   until (smtp.State = smtpReady) or (smtp.State = smtpInternalReady);
   //закрытие почтовой сессии
   SMTP.Quit;
   //ждем пока компонент готовиться к работе
   repeat
   Application.ProcessMessages;
   until (smtp.State = smtpReady) or (smtp.State = smtpInternalReady);
   //отключение от сервера
   SMTP.Abort;}
  end else
  begin
   //выставляем позицию
   MsgSendProgressBar.Position := 0;
   MsgSendProgressBar.Max := 1;
   //если же адресат один, то отправляем письмо только ему
   SendMsg(ToComboBox.Text);
   //визуализируем отправку
   MsgSStatusLabel.Caption := "Отправка письма 1 из 1";
   MsgSendProgressBar.Position := MsgSendProgressBar.Position + 1;
   {//ждем пока компонент готовиться к работе
   repeat
   Application.ProcessMessages;
   until (smtp.State = smtpReady) or (smtp.State = smtpInternalReady);
   //закрытие почтовой сессии
   SMTP.Quit;
   //ждем пока компонент готовиться к работе
   repeat
   Application.ProcessMessages;
   until (smtp.State = smtpReady) or (smtp.State = smtpInternalReady);
   //отключение от сервера
   SMTP.Abort;}
  end;
end else
begin
 //просим выбрать адресата
 ShowMessage("Поле "кому" не может быть пустым!");
end;

Процедура SendMsg вот:

//коннектимся
SMTP.Open;
// получатель *+ копия
BuildRcptList(addressee){можно добавить получателя копии письма+","+CopyTo.Text};
Smtp.HdrTo := addressee;
//прикрепленных файлов нет
Smtp.EmailFiles := nil;
// отправка почты
try
 try
  //ждем пока компонент готовиться к работе
  repeat
  Application.ProcessMessages;
  until (smtp.State = smtpReady) or (smtp.State = smtpInternalReady);
  //отправляем письмо
  try
  SMTP.Mail;
  except on SMTPException do
   begin
    SMTP.Open;
    //ждем пока компонент готовиться к работе
    repeat
    Application.ProcessMessages;
    until (smtp.State = smtpReady) or (smtp.State = smtpInternalReady);
    SMTP.Mail;
   end;
  end;
  //добавляем адрес в список отправленных
  SendMails.Add(addressee);
 except on E:Exception do
  begin
   ShowMessage("Статус отправки: ERROR - "+E.Message);
   ShowMessage("Письмо не отправлено!");
  end;
 end;
finally
 //ждем пока компонент готовиться к работе
 repeat
 Application.ProcessMessages;
 until (smtp.State = smtpReady) or (smtp.State = smtpInternalReady);
 //закрытие почтовой сессии
 SMTP.Quit;
 //ждем пока компонент готовиться к работе
 repeat
 Application.ProcessMessages;
 until (smtp.State = smtpReady) or (smtp.State = smtpInternalReady);
 //отключение от сервера
 SMTP.Abort;
end;

По идее должно работать... ведь даже тот же outlook может сначала накопить кучку писем для отправки, а потом их все отправить кому нужно, причем там и по 50 писем за раз уходит нормально...


 
Сергей М. ©   (2009-08-27 08:34) [21]

Непонятно, зачем для отправки каждого письма из подготовленного к отправке списка писем ты всякий раз открываешь новую SMTP-сессию ...
Почему не оправить весь список в одной и той же сессии ?


 
belousov ©   (2009-08-27 12:40) [22]

Пробовал и в одной сессии, разницы нет! Все равно больше 8 писем не отправляется! Должно же быть решение...


 
Сергей М. ©   (2009-08-27 13:39) [23]


> больше 8 писем не отправляется


Что, 9-е письмо прямо так и говорит "я не отправляюсь" ?

И ты уж определись как-нибудь, то ли они у тебя не отправляются, то ли не доходят .. Разные ж две разницы)


 
belousov ©   (2009-08-27 14:31) [24]

Не доходят!


 
Сергей М. ©   (2009-08-27 14:42) [25]

А как ты обрабатываешь OnRequestDone и OnResponse ?


 
belousov ©   (2009-08-27 15:18) [26]

никак не обрабатываю... а как нужно?


 
Сергей М. ©   (2009-08-27 15:25) [27]

Да ну хотя бы в целях отладки посмотреть Msg в OnResponse и RqType,ErrorCode в OnRequestDone ..

Полученная при этом инф-ция поможет тебе пролить свет на тайну "исчезновения" 9-го письам)


 
belousov ©   (2009-08-27 15:34) [28]

Спасибо, попробую) и ещё такой вопросик... отправленные с помощью ICS письма(которые дошли) попадают на mail.ru в папку "Сомнительные", если же использовать Indy, то приходят как и положено в папку "Входящие", но в Indy сколько я не мучался так и не смог добиться чтобы тело письма приходило нормальным текстом, а не иероглифами или же вопросиками(если не пытаться что либо делать с кодировкой). Вот интересно как бы на ICS сделать так, чтобы письма приходили в папку "Входящие", а не в "Сомнительные"?


 
Сергей М. ©   (2009-08-27 15:48) [29]


> отправленные с помощью ICS письма(которые дошли) попадают
> на mail.ru в папку "Сомнительные"


Значит ICS-клиент в отправляемых заголовках писем где-то как-то отходит от каких-то требований RFC 2822, а smtp-сервер на mail.ru, напротив, ожидает их соблюдения ... Или сервер расценивает твои письма как потенциальный спам или небезопасную корреспонденцию ..


> чтобы тело письма приходило нормальным текстом


Приходило куда ?


 
Сергей М. ©   (2009-08-27 15:52) [30]


> если не пытаться что либо делать с кодировкой


А что-то мешает этим попыткам ?


 
belousov ©   (2009-08-27 15:59) [31]


> отходит от каких-то требований RFC 2822


А как можно это узнать, чтобы в дальнейшем исправить?


> посмотреть Msg в OnResponse и RqType,ErrorCode в OnRequestDone


Кстати спасибо ещё раз уже посмотрел... оказалось, что там таймаут надо 1 минуту ставить после определенного количества писем...


> Приходило куда ?


На почту... С заголовком письма я там разобрался - все по русски нормально приходит, а вот сам текст(тело) письма отображается коряво. Пробовал и исходники исправлять как пишут на форумах и кодировать по разному, но как не старался текст письма все равно отображается иероглифами.


 
Сергей М. ©   (2009-08-27 16:17) [32]


> как можно это узнать, чтобы в дальнейшем исправить?
>


Достаточно сравнить заголовок и тело одного и того же письма, отправляемого ICS и попадающего в сомнительные и отправляемого любым иным клиентом, при котором письмо туда не попадает.


> там таймаут надо 1 минуту ставить после определенного количества
> писем


А как же Аутлук ?
Он тоже "посмотрел" ?)


> На почту


Что значит "на почту" ?


> как не старался текст письма все равно отображается иероглифами


http://delphimaster.net/view/6-1233223566/
http://delphimaster.net/view/6-1233223566/


 
belousov ©   (2009-08-27 16:32) [33]


> сравнить заголовок и тело одного и того же письма


попробую


> А как же Аутлук ?
> Он тоже "посмотрел" ?)


не понял)


> Что значит "на почту" ?


e-mail(почтовый ящик)...)


 
Сергей М. ©   (2009-08-27 16:45) [34]


> не понял)
>


Вот и я не понял, где ты посмотрел про таймаут в 1 минуту)


> e-mail(почтовый ящик)...)


Пока ты не забрал почту из "ящика", рассуждать про "отображается коряво" бессмысленно .
Вот я и спрашиваю, где ты наблюдаешь "корявость", в каком почтовом клиенте ? В самодельном ?


 
belousov ©   (2009-08-28 13:20) [35]


> Пока ты не забрал почту из "ящика", рассуждать про "отображается
> коряво" бессмысленно .
> Вот я и спрашиваю, где ты наблюдаешь "корявость", в каком
> почтовом клиенте ? В самодельном ?


Нет, когда захожу в почтовый ящик через сайт mail.ru


> Вот и я не понял, где ты посмотрел про таймаут в 1 минуту)


Сделал лог отправки письма:

procedure TMainForm.SmtpRequestDone(Sender: TObject; RqType: TSmtpRequest;
 ErrorCode: Word);
var s: string;
begin
case RqType of
 smtpConnect: Log.Add("connect");
 smtpHelo: Log.Add("helo");
 smtpMailFrom: Log.Add("mailfrom");
 smtpVrfy: Log.Add("vrfy");
 smtpRcptTo: Log.Add("rcptto");
 smtpData: Log.Add("data");
 smtpQuit: Log.Add("quit");
 smtpRset: Log.Add("rset");
 smtpOpen: Log.Add("open");
 smtpMail: Log.Add("mail");
 smtpEhlo: Log.Add("ehlo");
 smtpAuth: Log.Add("auth");
 smtpCustom: Log.Add("custom");
end;
s := inttostr(ErrorCode);
Log.Add(s);
Log.SaveToFile("log.txt");
end;

и

procedure TMainForm.SmtpResponse(Sender: TObject; Msg: string);
begin
Log.Add(Msg);
Log.SaveToFile("log.txt");
end;

Вот что получилось в логе:

....
220 mail.ru ESMTP Fri, 28 Aug 2009 13:19:28 +0400
250-mx38.mail.ru Hello smtp.mail.ru [80.240.220.103]
250-SIZE 31457280
250-8BITMIME
250-AUTH PLAIN LOGIN
250 PIPELINING
334 VXNlcm5hbWU6
334 UGFzc3dvcmQ6
235 Authentication succeeded
open
0
250 OK
250 Accepted
403 You have exceeded message sending limit, and i will not accept any messages from you within 1 minute
500 unrecognized command
mail
500
500 unrecognized command
500 unrecognized command
500 Too many unrecognized commands
quit
0
....


 
Сергей М. ©   (2009-08-28 13:37) [36]


> когда захожу в почтовый ящик через сайт mail.ru


Отправляй в кодировке KOI8-R или Win1251, тогда проблем не будет.


> 403 You have exceeded message sending limit, and i will
> not accept any messages from you within 1 minute


Поятно.
mail.ru smtp-сервер справедливо подозревает тебя в распространении спама)


 
belousov ©   (2009-08-28 14:12) [37]


> Отправляй в кодировке KOI8-R или Win1251, тогда проблем
> не будет.


Да пробовал и ничего не получилось... может с опытом придет)

...и письма кстати приходят иногда в папку "Входящие", а иногда в сомнительные "Сомнительные" несмотря на то что и заголовок и тело у них одинаковые!


 
Сергей М. ©   (2009-08-28 15:40) [38]


> пробовал и ничего не получилось


Значит не то или не так пробовал, оттого и не получилось


> письма кстати приходят иногда в папку "Входящие", а иногда
> в сомнительные "Сомнительные"


Значит они заведомо не одинаковые


 
Данияр   (2010-08-21 23:48) [39]

Здраствуйте , я новичок и хотел спросить , как можно отправить копю собщении ? Я исползую компоненты smtp и id message из Indy


 
Сергей М. ©   (2010-08-23 16:53) [40]


> как можно отправить копю собщении ?


Точно так же ка и оригинал.
На то она и копия, что от оригинала ничем не отличается.



Страницы: 1 2 вся ветка

Текущий архив: 2018.03.25;
Скачать: CL | DM;

Наверх




Память: 0.59 MB
Время: 0.006 c
2-1459726395
Погроммист
2016-04-04 02:33
2018.03.25
Отправка файла post запросом, вместо параметра вопросы


2-1460013191
aka
2016-04-07 10:13
2018.03.25
Указатели


2-1459514237
Макака
2016-04-01 15:37
2018.03.25
Подсветка кода


6-1285331229
Intranull
2010-09-24 16:27
2018.03.25
Объясните принцип работы связи в TeamViewer


15-1471469402
Юрий
2016-08-18 00:30
2018.03.25
С днем рождения ! 18 августа 2016 четверг