![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Подскажите как отправить письмо используя сокеты? [D7, WinXP]
Lamer666 © (2008-09-07 13:11:00)Подскажите как отправить письмо используя сокеты?
Задача стоит так, с локального компьютера хочу отправлять письма, но не используя SMTP Сервера.
Сергей М. (2009-08-27 15:25:00) [21]Да ну хотя бы в целях отладки посмотреть Msg в OnResponse и RqType,ErrorCode в OnRequestDone ..
Полученная при этом инф-ция поможет тебе пролить свет на тайну "исчезновения" 9-го письам)
belousov (2009-08-27 15:18:00) [22]никак не обрабатываю... а как нужно?
Сергей М. (2009-08-27 14:42:00) [23]А как ты обрабатываешь OnRequestDone и OnResponse ?
belousov (2009-08-27 14:31:00) [24]Не доходят!
Сергей М. (2009-08-27 13:39:00) [25]
> больше 8 писем не отправляется
Что, 9-е письмо прямо так и говорит "я не отправляюсь" ?
И ты уж определись как-нибудь, то ли они у тебя не отправляются, то ли не доходят .. Разные ж две разницы)
belousov (2009-08-27 12:40:00) [26]Пробовал и в одной сессии, разницы нет! Все равно больше 8 писем не отправляется! Должно же быть решение...
Сергей М. (2009-08-27 08:34:00) [27]Непонятно, зачем для отправки каждого письма из подготовленного к отправке списка писем ты всякий раз открываешь новую SMTP-сессию ...
Почему не оправить весь список в одной и той же сессии ?
belousov (2009-08-27 03:57:00) [28]Хотел бы продолжить тему... ситуация схожая... использую сервер исходящей почты 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-26 11:24:00) [29]Удалено модератором
Сергей М. (2008-09-09 17:10:00) [30]
> Slym © (09.09.08 16:39) [17]
Тут до ебабушки граблей
Slym (2008-09-09 16:39:00) [31]Сергей М. © (08.09.08 11:40) [8]
someserver.ru - это не имя почтового сервера , а доменное имя.
да, но можно запросить через DNS MX запись этого домена...
и полученную запись использовать для доставки корреспонденции...
но тут другие грабли: MX сервера как правило более менее защищены от спама - DNS проверка обратой зоны, проверка на локальность и аутентификация и прочее
Lamer666 (2008-09-08 15:42:00) [32]
> Anatoly Podgoretsky © (08.09.08 13:44) [15]
Я подозревал!
Всем огромное спасибо: Anatoly Podgoretsky,Сергей М.!!!
Anatoly Podgoretsky (2008-09-08 13:44:00) [33]> Lamer666 (08.09.2008 13:27:13) [13]
> А как же: http://www.delphiworld.narod.ru/base/smtp_replay_server.html
Тебя обманули, как ребенка.
Сергей М. (2008-09-08 13:37:00) [34]
> Lamer666 (08.09.08 13:27) [13]
>
>
> А как же
Да все точно так же : если У Васи Пупкина нет smtp-сервера, то - хоть из штанов выпрыгни - послать письмо непосредственно Васе никак не удастся)
Lamer666 (2008-09-08 13:27:00) [35]
> Ты Кулспамером что ли решил заделаться, да ?)
Нет, темные делишки могу и через SMTP аккаунт рассылать...
> Провалилась твоя спам-схема, нету у Васи Пупкина SMTP сервера
> на машине.
8)
> Как можно реализовать то что невозможно в принципе ?
А как же: http://www.delphiworld.narod.ru/base/smtp_replay_server.html
Anatoly Podgoretsky (2008-09-08 13:20:00) [36]
> Я вообще ставлю целью отправки писем с локальной машины
> сразу получателю!
Провалилась твоя спам-схема, нету у Васи Пупкина SMTP сервера на машине.
Сергей М. (2008-09-08 12:40:00) [37]Что-то мне подсказывает, что ты намерен творить темные делишки)
Ты Кулспамером что ли решил заделаться, да ?)
Сергей М. (2008-09-08 12:38:00) [38]
> что то мне подсказывает что это схема не должна работать
> впринципе
Конечно не должна)
> встает вопрос реализации
Как можно реализовать то что невозможно в принципе ?
Lamer666 (2008-09-08 12:28:00) [39]Я вообще ставлю целью отправки писем с локальной машины сразу получателю! Я представляю картину так, запустил на локальном компьюторе SMTP SERVER и через него шлю письма сразу vase-pupkinu@delphimaster.ru, но что то мне подсказывает что это схема не должна работать впринципе... вот и встает вопрос реализации...
Сергей М. (2008-09-08 11:40:00) [40]
> если я отправляю письмо на blablabla@someserver.ru я могу
> пользовать sameserver.ru?
Нет, не можешь.
someserver.ru - это не имя почтового сервера , а доменное имя.
> мне нужно иметь аккаунт на mymail@mymail.ru затем коннектиться
> к mymail.ru IdSMTP и используя свой аккаунт отправлять письмо?
Это классическая схема.
Если твой почтовый провайдер предоставляет возможность доставки твоей почт.корреспонденции за пределы своих почтовых доменов, то этого достаточно.