Добавьте встроенное изображение в электронное письмо с TIdAttachmentFile [duplicate]

unsigned GetLowestBitPos(unsigned value) { if (value & 1) return 1; if (value & 2) return 2; if (value & 4) return 3; if (value & 8) return 4; if (value & 16) return 5; if (value & 32) return 6; if (value & 64) return 7; if (value & 128) return 8; if (value & 256) return 9; if (value & 512) return 10; if (value & 1024) return 11; if (value & 2048) return 12; if (value & 4096) return 13; if (value & 8192) return 14; if (value & 16384) return 15; if (value & 32768) return 16; if (value & 65536) return 17; if (value & 131072) return 18; if (value & 262144) return 19; if (value & 524288) return 20; if (value & 1048576) return 21; if (value & 2097152) return 22; if (value & 4194304) return 23; if (value & 8388608) return 24; if (value & 16777216) return 25; if (value & 33554432) return 26; if (value & 67108864) return 27; if (value & 134217728) return 28; if (value & 268435456) return 29; if (value & 536870912) return 30; return 31; }

50% всех чисел вернутся в первую строку кода.

75% всех чисел вернутся к первым двум строкам кода.

87 % всех чисел вернется в первых трех строках кода.

94% всех чисел вернутся в первых 4 строках кода.

97% всех чисел вернутся в первых 5 строках кода.

и т. д.

Я думаю, что люди, жалующиеся на то, как неэффективный худший сценарий для этого кода не понимают, насколько редко это условие произойдет .

5
задан David Taylor 14 October 2009 в 23:05
поделиться

5 ответов

Прочитайте следующие статьи на веб-сайте Indy, они объясняют правильный способ заполнения TIdMesaage для HTML:

HTML-сообщения

Новый класс HTML Message Builder

10
ответ дан Remy Lebeau 15 August 2018 в 15:15
поделиться
  • 1
    Кажется, что путь Indy MesssageBuilder - путь. Единственная потенциальная проблема кодирования, которую я вижу на примерах, заключается в том, что файлы читаются с диска. Мне нужно использовать потоки, так как данные и изображения живут в базе данных. Я проверю источник, чтобы узнать, поддерживаются ли другие методы добавления изображений и внесут необходимые корректировки, если нет. – David Taylor 15 October 2009 в 06:35
  • 2
  • 3
    TIdMessageBuilderHtml поддерживает использование TStream для данных вложений, связанных с HTML, например изображений. Свойство TIdMessageBuilderHtml.HtmlFiles имеет перегруженные версии Add () для имен файлов и данных TStream. Однако привязка несвязанных данных пока не поддерживает TStream. – Remy Lebeau 16 October 2009 в 01:28
  • 4
    Я обновил свойство TIdCustomMessageBuilder.Attachments для поддержки данных TStream. – Remy Lebeau 16 October 2009 в 01:47
  • 5
    @Remy - Спасибо, это делает трюк. Думаю, мне нужно будет использовать последний код из SVN :) – David Taylor 22 October 2009 в 04:26

Все зависит от того, сколько разных удаленных почтовых клиентов вы сможете поддерживать. Я считаю, что известные библиотеки Delphi, поддерживающие SMTP / Mime, будут выполнять разумную работу, но они могут оставить вам проблемы с поддержкой, когда один из ваших почтовых пользователей обнаруживает, что их получатель не может видеть правильно отформатированное электронное письмо.

Я рекомендую посетить сайт Jacob Palme , который даст вам представление о некоторых проблемах, с которыми вы можете столкнуться. Возможно, это немного устарело, но в целом, однако вы создаете и отправляете сложную электронную почту MIME, вы столкнетесь с одним или несколькими почтовыми клиентами, которые не могут правильно обработать синтаксис. На сайте также есть ссылки на некоторые полезные примеры конструкций, которые вы можете проверить и проверить.

Я не хочу подразумевать, что вам нужно сворачивать свою собственную логику так же, как и мы: хорошее упакованное решение, вероятно, будет успех в подавляющем большинстве случаев. Мы писали наш собственный код Delphi, чтобы справиться с этим несколько лет назад, поэтому я оставлю его другим, чтобы предоставить вам самую последнюю информацию о том, что сейчас находится на полке.

0
ответ дан frogb 15 August 2018 в 15:15
поделиться

В эти дни я использую почтовый клиент Clever Component, хотя и не бесплатный.

Элементы управления TurboPower Internet (OpenSource) отлично работали для меня в прошлом.

1
ответ дан Hein du Plessis 15 August 2018 в 15:15
поделиться
  • 1
    Спасибо, я не смотрел их компоненты через несколько лет. Умный компонент, безусловно, стал очень многофункциональным, но цена немного крутая, если вам действительно не нужна какая-то передовая функциональность. – David Taylor 22 October 2009 в 04:37

Мы пробовали этот год назад с Indy и встроенным cid: изображения вроде этого: https://forums.codegear.com/thread.jspa?threadID=17473

Мы никогда не получал его стабильным, каждый раз, когда был еще один почтовый читатель, который был заблокирован (если мы его работаем в Outlook, то Thunderbird не принимал его, или Outlook Express, или, и т. д. и т. д.).

В в конце мы сделали это с .NET, используя AspNetEmail , и он работал как шарм.

- jeroen

0
ответ дан Jeroen Wiert Pluimers 15 August 2018 в 15:15
поделиться
  • 1
    Вы когда-нибудь сравнивали электронные письма, созданные Indy, с электронными письмами, созданными AspNetEmail, чтобы узнать, что между ними? – Remy Lebeau 27 June 2013 в 08:52
  • 2
    Много лет назад мы это сделали. Но мы не писали из-за давления проекта. Проект прожил пару лет, но теперь мертв. Так что сегодня это может быть так же хорошо работать с Инди. – Jeroen Wiert Pluimers 27 June 2013 в 08:57
  • 3
    Достаточно справедливо, спасибо. – Remy Lebeau 27 June 2013 в 09:01
  function data64 (const filename: string): ansistring;  // использует классы, IdGlobalProtocols, EncdDecd;  const crlf = # 13 # 10;  begin result: = '';  с TIdMimeTable.Create попытаться получить результат: = 'data:' + GetFileMIMEType (filename) + ';';  наконец, свободным;  конец;  с TMemoryStream.Create, попробуйте LoadFromFile (имя файла);  result: = result + 'base64,' + crlf + EncodeBase64 (память, размер);  наконец, свободным;  конец;  конец;   
0
ответ дан Srba 15 August 2018 в 15:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: