![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Отправить E-Mail [D7, XP]
Juri © (2006-09-08 21:06:00)Подскажите как можно программно самым простым способом отправить письмо на какой либо почтовый ящик?
palva (2006-09-10 22:49:00) [1]
> Juri (10.09.06 14:30) [14]
>
> > Я посмотрел, какой десятичный код такой ошибки и вставил
>
> > обработку этой ошибки с выходом на ожидание.
>
> как это посмотреть?
Общение из сокета с сервером SMTP это обмен строками, например так:
MAIL FROM: <palva@ffffff.ru>
250 ok
RCPT TO: <stepan@ggggg.msu.su>
250 ok
DATA
354 go ahead
Здесь построчно посылаю письмо, сначала заголовки,
потом пустая строка и сам текст.
В конце посылаю точку в отдельной строке.
.
250 ok 1156965557 qp 79574
Строки, начинающиеся с числа это ответы сервера. Число это код ответа, которая программа может легко анализировать. Пояснительный текст каждый сервер может давать с разными вариациями, а коды стандартизованы протоколом SMTP. Вот я и посмотрю один раз, чему равен код, когда превышен лимит, и забиваю этот код в программу, чтобы программа правильно поняла ситуацию и вышла на ожидание.
YurikGL (2006-09-10 15:30:00) [2]
> а как мне обработать ошибку можешь подсказать? то есть как
> мне узнать код ошибки, чтоб её обработать?
try
...
except
...
end;
Juri (2006-09-10 14:30:00) [3]
> Я посмотрел, какой десятичный код такой ошибки и вставил
> обработку этой ошибки с выходом на ожидание.
как это посмотреть?
Juri (2006-09-09 18:38:00) [4]а как мне обработать ошибку можешь подсказать? то есть как мне узнать код ошибки, чтоб её обработать?
palva (2006-09-09 16:13:00) [5]А может она не зависает, а просто очень долго ждет коннекта? Я этот код попробовать не могу, поскольку мой провайдер не пускает меня на чужие SMTP. Когда-то я сталкивался с таким при работе с mail.ru. Но я работал не с компонентой SMTP, а общался с сервером непосредственно через сокет. Протокол этого общения складывал в файл. Отослав несколько писем программа получала сообщение об ошибке с текстом объяснения и падала. Я посмотрел, какой десятичный код такой ошибки и вставил обработку этой ошибки с выходом на ожидание.
Juri (2006-09-09 14:44:00) [6]забыл естественно там в VAR idtTextPart: TIdText; ещё есть!
Juri (2006-09-09 14:43:00) [7]
procedure TForm1.Timer1Timer(Sender: TObject);
var S : String;
begin
//здесь сначало палучаем адресс на который слать и записываем его в переменную S
IdSMTP1.Host := Edit2.Text;
IdSMTP1.Username := Edit6.Text;
IdSMTP1.Password := Edit7.Text;
IdMessage1.Clear;
IdMessage1.ContentType := 'Multipart/Alternative';
idtTextPart := TIdText.Create(IdMessage1.MessageParts, nil);
idtTextPart.ContentType := 'text/plain';
idtTextPart:= TIdText.Create(IdMessage1.MessageParts, nil);
idtTextPart.ContentType := 'text/html';
idtTextPart.Body.Text:=Memo1.Text;
IdMessage1.CharSet := 'windows-1251';
IdMessage1.Subject := Edit5.Text;
IdMessage1.From.Address := Edit11.Text;
IdMessage1.From.Name := Edit3.Text;
with IdMessage1.Recipients.Add do begin
Address := S;
end;
IdSMTP1.Connect;
if IdSMTP1.Connected then begin
IdSMTP1.Send(idMessage1);
IdSMTP1.Disconnect;
end;
end;
вот подскажите как сделать чтоб при таком коде программа не зависала а подождав 1 минуту начинала слать снова...
palva (2006-09-09 14:24:00) [8]> как с этим боротся?
Если бороться с хозяином SMTP-сервера, который отказывается принимать от вас письма, то посмотреть условия договора о предоставлении услуг, которые между вами заключены и, если он нарушает условия договора, то подавать на него в суд.
Если бороться с программой, которая не хочет продолжать работать через минуту ожидания, то искать в ней ошибку, если она ваша. А если куплена, то прочитать документацию. Если по документации она должна работать, а на самом деле не работает, то требовать деньги назад.
Dmitrij_K (2006-09-09 14:19:00) [9]
> как с этим боротся?
подождать минуту, потом сладь дальше
Juri (2006-09-09 13:59:00) [10]ок с этим понятно... нет адреса и фиг с ним... сталкнулся с другой проблемой... мне надо отослать поздравление с Новым годом 20 адресатам. начинаю отпралять, запускаю таймер, каждые 10 сек он выбирает из поля мемо один адрес из тех что я туда написал выборка происходит правельно так как отсылается 14 писем, потом же выдаётся ошибка о том, что сообщения от меня не будут приниматся 1 минуту так как лимит исчерпан... и что я палучаю далее что програмка мая зависает и прекращает совершенно дальше отсылать сообщение по остальным адресам даже через минуту... как с этим боротся?
palva (2006-09-09 02:10:00) [11]А зачем вам это? Если адрес существует, то еще не факт, что письмо дойдет. Посмотрит сервер на обратный адрес вашего письма, подумает и вернет вам письмо обратно с припиской, что такого адреса не существует.
Juri (2006-09-09 01:55:00) [12]я имею в виду проверит существование адреса на который мы хотим отправить что то
Juri (2006-09-09 01:54:00) [13]А можно ли как то проверить существование E-Mail адреса?
UMU (2006-09-08 22:27:00) [14]
procedure SendMail;
var
EMailDestinationString, SubjectString, Line1String,
Line2String, mailstring: string;
Begin
EMailDestinationString := 'mail.ru';
SubjectString := '';
Line1String := 'Текст ';
Line2String := 'Текст';
mailstring := 'mailto:' + EMailDestinationString +
'?subject=' + SubjectString +
'&body=' + Line1String +
'%0d' + Line2String;
if (ShellExecute(0, 'open', PChar(mailstring), '', '',
SW_SHOWNORMAL)
AlexWlad (2006-09-08 22:16:00) [15]MAPISendMail + F1
YurikGL (2006-09-08 21:33:00) [16]Вкладка indiServers
TIdSMTP = class(TIdMessageClient)
Unit
IdSMTP
Description
TIdSMTP is a TIdMessageClient descendant that implements a Simple Mail Transfer Protocol or SMTP client, as described in the Internet Standards documents:
RFC 821 - Simple Mail Transfer Protocol [SMTP] ( http://www.rfc-editor.org/rfc/rfc821.txt)
RFC 1869 - SMTP Service Extensions ( http://www.rfc-editor.org/rfc/rfc1869.txt)
RFC 2554 - SMTP Service Extension for Authentication ( http://www.rfc-editor.org/rfc/rfc2554.txt)