Текущий архив: 2006.07.23;
Скачать: CL | DM;
Вниз
Посоветуйте библиотеку для работы с почтой Найти похожие ветки
← →
ANB © (2006-06-19 09:52) [0]Посоветуйте толковую библиотеку для работы с почтой.
Попробовал Indy.
1) Выявил проблему с передачей кодировки windows-1251. Проблема решилась только правкой модуля Indy.
2) Вложения в письмо можно запихать только в виде файлов (а они у меня в блобиках лежат). Хотелось бы грузить прямо из строки или потока.
Качнул Synaps.
1) Очень хорошо сделаны вложения (хоть и не очень понятно все расписано в хелпе).
2) Опять проблема с кодировкой.
Без указания кодировки оутлук читает письмо крякозябрами.
← →
wicked © (2006-06-19 10:26) [1]ICS - http://www.overbyte.be
← →
palva © (2006-06-19 10:33) [2]Indy - толковая библиотека.
Проблемы желательно решать не правкой модулей, а заданием правильных параметров.
> Без указания кодировки оутлук читает письмо крякозябрами.
Ага, от Indi вы готовы отказаться, а от аутлука - нет. А ведь это уже проблемы почтового клиента, точнее его настройки.
А еще лучше отказаться от русского языка. А уж если вы хотите его использовать, то должны уметь решать проблемы, связанные с кодировкой.
← →
Игорь Шевченко © (2006-06-19 10:54) [3]mail2000 ?
← →
ANB © (2006-06-19 11:30) [4]
> Проблемы желательно решать не правкой модулей, а заданием
> правильных параметров.
Задавал я параметры. Прошел отладчиком - Инди их проигнорил.
> Ага, от Indi вы готовы отказаться, а от аутлука - нет. А
> ведь это уже проблемы почтового клиента, точнее его настройки.
>
Ну не могу я заставлять всех клиентов подкручивать свой оутлук, чтобы он мои письма читал.
Плюс это сообщение должно быть видно при ошибочном получении его почтовым клиентом. По нормальному - его должна выгребать моя программа.
> Игорь Шевченко © (19.06.06 10:54) [3]
> mail2000 ?
Это где взять и с чем есть ?
← →
Игорь Шевченко © (2006-06-19 11:33) [5]ANB © (19.06.06 11:30) [4]
> Это где взять и с чем есть ?
Это набор компонент(ов) для работы с почтой. Взять вроде на torry
← →
[email protected] © (2006-06-19 11:57) [6]>Попробовал Indy.
Какой версии?
← →
ANB © (2006-06-19 12:10) [7]
> [email protected] © (19.06.06 11:57) [6]
Какой был по умолчанию в делфи 7.
Даже если в более поздней версии граблю с кодировкой исправили исправили, то вряд ли добавили возможность класть бинарник из строки или потока.
> Игорь Шевченко © (19.06.06 11:33) [5]
Качнул - обалденная и довольно простая вещь. Код отправки написан за 3 минуты. Но одна неувязка - TSMTP2000 не умеет передавать логин и пароль.
← →
Игорь Шевченко © (2006-06-19 12:20) [8]
> Но одна неувязка - TSMTP2000 не умеет передавать логин и
> пароль.
В соответствии со стандартом SMTP
← →
ANB © (2006-06-19 12:28) [9]
> В соответствии со стандартом SMTP
Вот млин. Совсем лох я в этом деле. Где почитать можно толково про стандарты SMTP и POP3 ?
← →
wal © (2006-06-19 12:30) [10]
> [9] ANB © (19.06.06 12:28)
http://www.rfc-editor.org/rfcsearch.html
← →
ANB © (2006-06-19 12:37) [11]
> Игорь Шевченко © (19.06.06 12:20) [8]
И вторая неувязка - обработка ошибок :
if not Assigned(FMailMessage) then
begin
Exception.Create(Self.Name+": MailMessage unassigned");
Result := False;
Exit;
end;
Этот код довольно бестолков и плюс - вызовет утечку памяти.
← →
Slym © (2006-06-19 12:37) [12]минимум переделки, и вложения хранятся в памяти как MemoryStream :)
← →
Игорь Шевченко © (2006-06-19 12:41) [13]ANB © (19.06.06 12:37) [11]
Исходники есть, руки есть. За то время, пока живет ветка, можно 10 раз поправить исходники в желаемую сторону, а не смотреть в зубы дареному коню :)
← →
Slym © (2006-06-19 13:06) [14]в IdAttachment.pas
TIdAttachment = class(TIdMessagePart)
private
FData:TMemoryStream;
FFileName: TFileName;
//
public
//
property Data:TMemoryStream read FData write SetData;
property FileName: TFileName read FFileName write FFileName;
в idmessageclient.pas меняешь код
LDestStream := TIdTCPStream.Create(Self);
try
with LEncoder do
try
Filename := TIdAttachment(AMsg.MessageParts[i]).Filename;
LSrcStream := TIdStreamVCL.Create(TIdAttachment(AMsg.MessageParts[i]).OpenLoadStream);
try
Encode(LSrcStream, LDestStream);
finally
TIdAttachment(AMsg.MessageParts[i]).CloseLoadStream;
LSrcStream.Free;
end;
finally
Free;
end;
finally
FreeAndNil(LDestStream);
end;
на
LDestStream := TIdTCPStream.Create(Self);
try
with LEncoder do
try
Filename := TIdAttachment(AMsg.MessageParts[i]).Filename;
LSrcStream := TIdStreamVCL.Create(TIdAttachment(AMsg.MessageParts[i]).Data);
try
Encode(LSrcStream, LDestStream);
finally
LSrcStream.Free;
end;
finally
Free;
end;
finally
FreeAndNil(LDestStream);
end;
← →
Slym © (2006-06-19 13:09) [15]и переделать function ProcessAttachment(ADecoder: TIdMessageDecoder): TIdMessageDecoder; из idmessageclient.pas
← →
palva © (2006-06-19 13:28) [16]> пока живет ветка, можно 10 раз поправить исходники в желаемую сторону
Только зачем? Работа компонент управляется параметрами, а не правкой исходников. Если это делается в учебных целях или по заданию препода, тогда другое дело. А в общем случае лучше придерживаться стандартных протоколов, иначе при неумелой правке ваше письмо будет читаться по-разному в разных почтовых клиентах.
← →
Slym © (2006-06-19 13:33) [17]palva © (19.06.06 13:28) [16]
Только зачем? Работа компонент управляется параметрами
Работа НОРМАЛЬНЫХ компонент - да
INDY - НЕТ (огромное множество багов и очепяток)
← →
palva © (2006-06-19 13:51) [18]> Slym © (19.06.06 13:33) [17]
> огромное множество багов и очепяток
А причем здесь баги?
Проблемы, возникшие у автора решаются правильным заданием параметров. Баги и очепятки, которые (возможно) существуют в Indi, в данном случае ему не помешают. А править исходники - самое последнее дело. В том смысле, что первым делом является ознакомление с протоколом SMTP, с которым, судя по вопросам, автор не знаком.
← →
Val © (2006-06-19 13:58) [19]угу. а по поводу кодировки в письмах в инди есть топики на королевстве, я по ним проблему решил без правки исходников.
← →
ANB © (2006-06-19 14:39) [20]
> Val © (19.06.06 13:58) [19]
В этих же топиках советовали править Indy
> Баги и очепятки, которые (возможно) существуют в Indi, в
> данном случае
В данном случае именно они и помешали.
> Slym © (19.06.06 13:06) [14]
Править штатные делфовые компоненты весьма некузяво.
> Игорь Шевченко © (19.06.06 12:41) [13]
Ща бугор решит - править или нет. А так - библиотека очень компактная (1 модуль), код очень понятный, правки - немного.
Кстати, коннект по логину придется прикрутить.
← →
Eraser © (2006-06-19 15:06) [21]> ANB ©
и кстати все таки советую установить Indy 10, иначе потом кучу кода переписывать прийдется при переходе с 9 на 10.
← →
ANB © (2006-06-19 15:33) [22]
> и кстати все таки советую установить Indy 10
Да мне проще вообще инди не трогать. Ща я выброшу его из проекта и все.
А зачем переходить с 9 на 10 ? И где взять инди 10 ?
← →
Eraser © (2006-06-19 15:39) [23]> [22] ANB © (19.06.06 15:33)
> Да мне проще вообще инди не трогать. Ща я выброшу его из
> проекта и все.
ну тогда все равно чем-то заменить надо будет...
> А зачем переходить с 9 на 10 ?
в 10 намного расширена функционльность, но и значительно переработан код, осюда - слабая обратная соместимость.
> И где взять инди 10 ?
http://www.indyproject.org/
← →
ANB © (2006-06-21 14:46) [24]Вот млин. Подкрутил Mail2000 (убрал явные косяки с неосвобождением памяти и добавил авторизацию на SMTP), теперь выяснил, что прикрепленный файл ни хрена не расшифровывается в исходное состояние.
← →
atruhin © (2006-06-21 15:13) [25]> что прикрепленный файл ни хрена не расшифровывается в исходное
> состояние.
А об этом на delphikingdom писали, косяк там с прикрепленными файлами.
← →
ANB © (2006-06-21 16:42) [26]
> atruhin © (21.06.06 15:13) [25]
Млин. А отправляет все хорошо - без ошибок.
А кто знает - как в Indy 10 файл к сообщению приклеить ? Код работавший в старой Indy сломался и не компиляется.
← →
tesseract © (2006-06-21 16:50) [27]
> А кто знает - как в Indy 10 файл к сообщению приклеить ?
> Код работавший в старой Indy сломался и не компиляется.
>
Верни 9 мой совет с этой 10 одни №;%№?№;:?%:?:(*?*(
← →
ANB © (2006-06-21 17:20) [28]
> tesseract © (21.06.06 16:50) [27]
Вот е..... Я как раз нашел способ работать с вложениями без сохранения их в файл.
А как вернуть ? И чего с ней делать ? Начальник не разрешает править код Indy, а неправленная не работает, как надо.
← →
Eraser © (2006-06-21 18:21) [29]> [28] ANB © (21.06.06 17:20)
как вариант - скопировать файл который нужно править в каталог с проектом и править уже его, мож прокатит.
← →
ANB © (2006-06-22 10:43) [30]
> Eraser © (21.06.06 18:21) [29]
Я так уже сделал. Начальник сказал - что для пилота покатит, а для промышленного приложения - не очень.
А начальника я слушаюсь - сенсей !.
← →
tesseract © (2006-06-22 11:00) [31]
> А как вернуть ? И чего с ней делать ? Начальник не разрешает
> править код Indy, а неправленная не работает, как надо.
скачай последнюю версию с невроны.
Я её не правил, так она намоного стабильнее.
Вернуть просто - снеси 10 верни 9.
← →
unknown © (2006-06-22 11:10) [32]
> tesseract © (21.06.06 16:50) [27]
А, собственно, что в десятке вызывает столько эмоций?
У меня, например TCP сервер написан - работает.
Сейчас доделываю POP/SMTP - проблем не наблюдается...
Хотя, если имели ввиду переход с 9 на 10 - то да, непривычно :)
← →
tesseract © (2006-06-22 11:22) [33]
> У меня, например TCP сервер написан - работает.Сейчас доделываю
> POP/SMTP - проблем не наблюдается...Хотя, если имели ввиду
> переход с 9 на 10 - то да, непривычно :)
Я через неё с udp/tcp устройствами работаю. Что-то там не так.
Возможно и я косячу, но навряд-ли, через Socket-ы/indy 9 всё ок. Через 10 то соединение не-то, то данные не-те уходят.
← →
ANB © (2006-06-22 11:37) [34]
> Хотя, если имели ввиду переход с 9 на 10 - то да, непривычно
> :)
Да не, там не много поменяли.
← →
tesseract © (2006-06-22 12:03) [35]
> Да не, там не много поменяли.
процентов 30-40.
← →
ANB © (2006-06-22 14:21) [36]
> tesseract © (22.06.06 12:03) [35]
Ну я свой код для работы с почтой то быстро переделал.
Но один хрен вылезла первая проблема - эта скотина Indy 10 игнорит установку CharSet !!!
← →
tesseract © (2006-06-22 14:22) [37]
> Ну я свой код для работы с почтой то быстро переделал.
У меня ~ 5-7 проектов, UDPClient/server-ы
Запарился.
← →
ANB © (2006-06-22 14:56) [38]Йо. А еще кто нибудь знает толковую библиотеку ?
← →
ANB © (2006-06-22 16:13) [39]Фух. Нашел. В Indy 10 в модуле IdText есть класс TIdText. Приклеиваешь его как атачч, устанавливаешь CharSet и все работает, как задумано.
← →
palva © (2006-06-22 16:30) [40]ANB © (22.06.06 16:13) [39]
> устанавливаешь CharSet и все работает, как задумано.
Так писал же, что
> Indy 10 игнорит установку CharSet
Оказывается все работает.
← →
ANB © (2006-06-22 17:15) [41]
> palva © (22.06.06 16:30) [40]
Он игнорит установку CharSet письму, если письмо с вложениями.
← →
Val © (2006-06-22 17:25) [42]Charset можно выставить в обработчике OnInitializeISO.
← →
Сатир (2006-06-22 19:01) [43]на счёт кодировки вложения есть
TIdMessage.AttachmentEncoding , который
Identifies the default encoding mechanism used for message parts.
property AttachmentEncoding: string;
Description
AttachmentEncoding is a String property that identifies the encoding mechanism used for attachment message parts in the message. Changing the value of AttachmentEncoding for the message also updates the default encoding used for all message parts in the message.
кстати, а как называется в Indy кодировка для виндовой кирилицы, которую можно указать в CharSet?
В хелпе она не упомянута...
CharSet is a String property that indicates the character set used for the message. Some common CharSet values include:
US-ASCII
ISO-8859-1
ISO-8859-2
ISO-8859-3
ISO-8859-4
ISO-8859-5
ISO-8859-6
ISO-8859-7
ISO-8859-8
ISO-8859-9
ISO-8859-10
← →
ANB © (2006-06-23 09:13) [44]
> Сатир (22.06.06 19:01) [43]
windows-1251
← →
Slym © (2006-06-23 11:37) [45]ANB © (22.06.06 10:43) [30]
Я так уже сделал. Начальник сказал - что для пилота покатит,
Исправь и скажи что скачал новую, исправленную версию
Страницы: 1 2 вся ветка
Текущий архив: 2006.07.23;
Скачать: CL | DM;
Память: 0.59 MB
Время: 0.029 c