Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 2018.03.25;
Скачать: [xml.tar.bz2];

Вниз

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

 
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]


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


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


 
Anatoly Podgoretsky ©   (2010-08-23 19:39) [41]

> Сергей М.  (23.08.2010 16:53:40)  [40]

Вообще то она даже не копия.


 
grisme ©   (2010-08-26 08:42) [42]

Хм. наличие "белого" IP-адреса вовсе и не обязательно. (:
удавалось поднять сервак на дин.IP с no-ip.доменом, письма вполне так доставлялись. yandex принимал письма с сервака. и только, по-моему, mail.ru отказал в передаче из-за динамического адреса.


 
Anatoly Podgoretsky ©   (2010-08-26 19:07) [43]

> grisme  (26.08.2010 08:42:42)  [42]

При любой отправки в Интернет есть "белый" адрес, иначе работа с Интернет
невозможна.


 
Dennis I. Komarov ©   (2010-09-02 17:07) [44]

Юзайте TCPClient и никаких претензий. Там все только от вас зависит :)


 
DiamondShark ©   (2010-09-24 11:07) [45]


> grisme ©   (26.08.10 08:42) [42]

Не путайте "белый"/"зелёный" и динамический/статический.

Строго говоря, термина "белый" нет вообще.


 
DiamondShark ©   (2010-09-24 11:10) [46]


> Dennis I. Komarov ©   (02.09.10 17:07) [44]
> Юзайте TCPClient и никаких претензий. Там все только от
> вас зависит :)

И SMTP руками реализовывать, да. Получится, вне сомнения, проще, быстрее, дешевле и надёжнее.

А ещё хорошо картошку самому сажать, и сапоги себе шить. Из шкуры собственноручно забитой свиньи.


 
Dennis I. Komarov ©   (2010-09-27 10:30) [47]


> И SMTP руками реализовывать, да. Получится, вне сомнения,
>  проще, быстрее, дешевле и надёжнее.
>
> А ещё хорошо картошку самому сажать, и сапоги себе шить.
>  Из шкуры собственноручно забитой свиньи.

Ну, как получится я не знаю, но кому что...
Да, и аналогия не очень :)



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

Форум: "Сети";
Текущий архив: 2018.03.25;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.64 MB
Время: 0.002 c
6-1285331229
Intranull
2010-09-24 16:27
2018.03.25
Объясните принцип работы связи в TeamViewer


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


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


15-1470764730
DayGaykin
2016-08-09 20:45
2018.03.25
Align: К вопросам на засыпку.


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





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский