-
Подскажите как отправить письмо используя сокеты?
Задача стоит так, с локального компьютера хочу отправлять письма, но не используя SMTP Сервера.
-
> хочу отправлять письма, но не используя SMTP Сервера
И кто ж его доставлять-то будет, кроме как SMTP-сервер[ы] ? Святой дух ?)
-
-
Подумай сам - чтобы отправить обычное письмо в обычном бумажном конверте, от тебя не требуется ни создание почтового отделения связи, ни его регистрация, ни вообще чего-то специфически связанного с технологиями и механизмами доставки почтовой корреспонденции.
Все что от тебя требуется, это подписать должным образом конверт, вложить в него собствеено бамажку с сообщением, заклеить и опустить в любой подходящий почтовый ящик. При этом ведь никто не интересуется есть ли у тебя прописка ("БЕЛЫЙ" адрес) ?
Так вот почтовое отделение связи - это SMTP-сервер, и тебе нет никакого дела до того каким образом оно доставит твое письмо. Твое клиентово дело - правильно подготовить свою почтовыю корреспонденцию и передать ее тем или иным образом на обработку/доставку любому подходящему почтовому отделению.
Т.б. все что тебе нужно - выполнить функции клиента.
-
Впрочем, насчет прописки на сей день дело обстоит посложней .
Кое-где теперь могут и вправе и поинтересоваться)..
-
> Кое-где теперь могут и вправе и поинтересоваться)..
: )
Тем немение взял DEMO из Indy9 SMTPServer добавил SMTP клиента и Message, отправляю на запущенный IdSMTPServer но письма не доходят!
(((
-
> Lamer666 (07.09.08 22:45) [5]
> Тем немение взял DEMO из Indy9 SMTPServer
Ты буквы в [3] вообще-то читал ?)
Не нужен тебе никакой сервер сотворять !
Без сервера никак не обойтись, но зачем лепить свой сервер ?
Для доставки нужен smtp-сервер того домена, который указан в адресе справа от собаки)
-
> Для доставки нужен smtp-сервер того домена, который указан
> в адресе справа от собаки)
Вы хотите сказать что если я отправляю письмо на blablabla@someserver.ru я могу пользовать sameserver.ru? 8)
Или вы хотите сказать что мне нужно иметь аккаунт на mymail@mymail.ru затем коннектиться к mymail.ru IdSMTP и используя свой аккаунт отправлять письмо?
-
> если я отправляю письмо на blablabla@someserver.ru я могу
> пользовать sameserver.ru?
Нет, не можешь.
someserver.ru - это не имя почтового сервера , а доменное имя.
> мне нужно иметь аккаунт на mymail@mymail.ru затем коннектиться
> к mymail.ru IdSMTP и используя свой аккаунт отправлять письмо?
Это классическая схема.
Если твой почтовый провайдер предоставляет возможность доставки твоей почт.корреспонденции за пределы своих почтовых доменов, то этого достаточно.
-
Я вообще ставлю целью отправки писем с локальной машины сразу получателю! Я представляю картину так, запустил на локальном компьюторе SMTP SERVER и через него шлю письма сразу vase-pupkinu@delphimaster.ru, но что то мне подсказывает что это схема не должна работать впринципе... вот и встает вопрос реализации...
-
> что то мне подсказывает что это схема не должна работать
> впринципе
Конечно не должна)
> встает вопрос реализации
Как можно реализовать то что невозможно в принципе ?
-
Что-то мне подсказывает, что ты намерен творить темные делишки)
Ты Кулспамером что ли решил заделаться, да ?)
-
> Я вообще ставлю целью отправки писем с локальной машины
> сразу получателю!
Провалилась твоя спам-схема, нету у Васи Пупкина SMTP сервера на машине.
-
> Ты Кулспамером что ли решил заделаться, да ?)
Нет, темные делишки могу и через SMTP аккаунт рассылать...
> Провалилась твоя спам-схема, нету у Васи Пупкина SMTP сервера
> на машине.
8)
> Как можно реализовать то что невозможно в принципе ?
А как же:
http://www.delphiworld.narod.ru/base/smtp_replay_server.html
-
> Lamer666 (08.09.08 13:27) [13]
>
>
> А как же
Да все точно так же : если У Васи Пупкина нет smtp-сервера, то - хоть из штанов выпрыгни - послать письмо непосредственно Васе никак не удастся)
-
-
> Anatoly Podgoretsky © (08.09.08 13:44) [15]
Я подозревал!
Всем огромное спасибо: Anatoly Podgoretsky,Сергей М.!!!
-
Сергей М. © (08.09.08 11:40) [8]
someserver.ru - это не имя почтового сервера , а доменное имя.
да, но можно запросить через DNS MX запись этого домена...
и полученную запись использовать для доставки корреспонденции...
но тут другие грабли: MX сервера как правило более менее защищены от спама - DNS проверка обратой зоны, проверка на локальность и аутентификация и прочее
-
> Slym © (09.09.08 16:39) [17]
Тут до ебабушки граблей
-
Соберем для Вас по сети интернет
базу данных потенциальных клиентов для Вашего Бизнеса
(Название телефон факс email www имена адреса итд)
Более подробную информацию Вы сможете получить по
телефону +79133913837
icq: 62-888-62
skype: prodawez
email: prodawez@mixmail.com
-
Хотел бы продолжить тему... ситуация схожая... использую сервер исходящей почты 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 писем за раз уходит нормально...
-
Непонятно, зачем для отправки каждого письма из подготовленного к отправке списка писем ты всякий раз открываешь новую SMTP-сессию ...
Почему не оправить весь список в одной и той же сессии ?
-
Пробовал и в одной сессии, разницы нет! Все равно больше 8 писем не отправляется! Должно же быть решение...
-
> больше 8 писем не отправляется
Что, 9-е письмо прямо так и говорит "я не отправляюсь" ?
И ты уж определись как-нибудь, то ли они у тебя не отправляются, то ли не доходят .. Разные ж две разницы)
-
Не доходят!
-
А как ты обрабатываешь OnRequestDone и OnResponse ?
-
никак не обрабатываю... а как нужно?
-
Да ну хотя бы в целях отладки посмотреть Msg в OnResponse и RqType,ErrorCode в OnRequestDone ..
Полученная при этом инф-ция поможет тебе пролить свет на тайну "исчезновения" 9-го письам)
-
Спасибо, попробую) и ещё такой вопросик... отправленные с помощью ICS письма(которые дошли) попадают на mail.ru в папку "Сомнительные", если же использовать Indy, то приходят как и положено в папку "Входящие", но в Indy сколько я не мучался так и не смог добиться чтобы тело письма приходило нормальным текстом, а не иероглифами или же вопросиками(если не пытаться что либо делать с кодировкой). Вот интересно как бы на ICS сделать так, чтобы письма приходили в папку "Входящие", а не в "Сомнительные"?
-
> отправленные с помощью ICS письма(которые дошли) попадают
> на mail.ru в папку "Сомнительные"
Значит ICS-клиент в отправляемых заголовках писем где-то как-то отходит от каких-то требований RFC 2822, а smtp-сервер на mail.ru, напротив, ожидает их соблюдения ... Или сервер расценивает твои письма как потенциальный спам или небезопасную корреспонденцию ..
> чтобы тело письма приходило нормальным текстом
Приходило куда ?
-
> если не пытаться что либо делать с кодировкой
А что-то мешает этим попыткам ?
-
> отходит от каких-то требований RFC 2822
А как можно это узнать, чтобы в дальнейшем исправить?
> посмотреть Msg в OnResponse и RqType,ErrorCode в OnRequestDone
Кстати спасибо ещё раз уже посмотрел... оказалось, что там таймаут надо 1 минуту ставить после определенного количества писем...
> Приходило куда ?
На почту... С заголовком письма я там разобрался - все по русски нормально приходит, а вот сам текст(тело) письма отображается коряво. Пробовал и исходники исправлять как пишут на форумах и кодировать по разному, но как не старался текст письма все равно отображается иероглифами.
-
> как можно это узнать, чтобы в дальнейшем исправить?
>
Достаточно сравнить заголовок и тело одного и того же письма, отправляемого ICS и попадающего в сомнительные и отправляемого любым иным клиентом, при котором письмо туда не попадает.
> там таймаут надо 1 минуту ставить после определенного количества
> писем
А как же Аутлук ?
Он тоже "посмотрел" ?)
> На почту
Что значит "на почту" ?
> как не старался текст письма все равно отображается иероглифами
http://pda.delphimaster.net/?id=1233223566&n=4http://pda.delphimaster.net/?id=1239719308&n=4
-
> сравнить заголовок и тело одного и того же письма
попробую
> А как же Аутлук ?
> Он тоже "посмотрел" ?)
не понял)
> Что значит "на почту" ?
e-mail(почтовый ящик)...)
-
> не понял)
>
Вот и я не понял, где ты посмотрел про таймаут в 1 минуту)
> e-mail(почтовый ящик)...)
Пока ты не забрал почту из "ящика", рассуждать про "отображается коряво" бессмысленно .
Вот я и спрашиваю, где ты наблюдаешь "корявость", в каком почтовом клиенте ? В самодельном ?
-
> Пока ты не забрал почту из "ящика", рассуждать про "отображается
> коряво" бессмысленно .
> Вот я и спрашиваю, где ты наблюдаешь "корявость", в каком
> почтовом клиенте ? В самодельном ?
Нет, когда захожу в почтовый ящик через сайт 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
....
-
> когда захожу в почтовый ящик через сайт 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-сервер справедливо подозревает тебя в распространении спама)
-
> Отправляй в кодировке KOI8-R или Win1251, тогда проблем
> не будет.
Да пробовал и ничего не получилось... может с опытом придет)
...и письма кстати приходят иногда в папку "Входящие", а иногда в сомнительные "Сомнительные" несмотря на то что и заголовок и тело у них одинаковые!
-
> пробовал и ничего не получилось
Значит не то или не так пробовал, оттого и не получилось
> письма кстати приходят иногда в папку "Входящие", а иногда
> в сомнительные "Сомнительные"
Значит они заведомо не одинаковые
-
Здраствуйте , я новичок и хотел спросить , как можно отправить копю собщении ? Я исползую компоненты smtp и id message из Indy
-
> как можно отправить копю собщении ?
Точно так же ка и оригинал.
На то она и копия, что от оригинала ничем не отличается.
-
> Сергей М. (23.08.2010 16:53:40) [40]
Вообще то она даже не копия.
-
Хм. наличие "белого" IP-адреса вовсе и не обязательно. (:
удавалось поднять сервак на дин.IP с no-ip.доменом, письма вполне так доставлялись. yandex принимал письма с сервака. и только, по-моему, mail.ru отказал в передаче из-за динамического адреса.
-
> grisme (26.08.2010 08:42:42) [42]
При любой отправки в Интернет есть "белый" адрес, иначе работа с Интернет
невозможна.
-
Юзайте TCPClient и никаких претензий. Там все только от вас зависит :)
-
> grisme © (26.08.10 08:42) [42]
Не путайте "белый"/"зелёный" и динамический/статический.
Строго говоря, термина "белый" нет вообще.
-
> Dennis I. Komarov © (02.09.10 17:07) [44]
> Юзайте TCPClient и никаких претензий. Там все только от
> вас зависит :)
И SMTP руками реализовывать, да. Получится, вне сомнения, проще, быстрее, дешевле и надёжнее.
А ещё хорошо картошку самому сажать, и сапоги себе шить. Из шкуры собственноручно забитой свиньи.
-
> И SMTP руками реализовывать, да. Получится, вне сомнения,
> проще, быстрее, дешевле и надёжнее.
>
> А ещё хорошо картошку самому сажать, и сапоги себе шить.
> Из шкуры собственноручно забитой свиньи.
Ну, как получится я не знаю, но кому что...
Да, и аналогия не очень :)