Как предоставить вложенные файлы электронной почты cid во встроенный браузер
Я использую встроенный веб-браузер от Bsalsa для написания почтового клиента в Delphi.
У меня проблема с вложенными в cid вложениями, такими как:
<IMG src="cid:5D4219C71EAE43B1864AE9CB27C224A8@somehost">
Я храню вложения в базе данных, но не могу понять, как предоставить их браузеру. Кажется, может потребоваться реализовать пользовательское прозвище, но документации недостаточно.
Любая помощь будет оценена.
2 ответа
Я реализовал это с помощью обработчика "pluggable protocol", и это проще, чем выглядит. Начните здесь: http://msdn.microsoft.com/en-us/library/aa767916(VS.85).aspx и здесь: http://www.bsalsa.com/protocols.html
Мне жаль, что я не могу поделиться кодом, который я написал, но он написан для компании, в которой я работаю, и у меня есть ограничения по этому поводу. По сути, вам нужен com-объект, который реализует надлежащий интерфейс для получения данных и позволяет элементу управления веб-браузера читать их.
Это ИМХО правильный способ сделать это - изменение почты и хранение временных данных может привести к проблемам в долгосрочной перспективе.
Самое простое решение - извлечь ваши "вложения" в соответствии с запросом во временную папку, а затем изменить ссылку в источнике, чтобы они указывали на эти временные файлы, до их отображения. В прошлом я использовал diHTMLParser для этого с большим успехом.
Если я правильно помню, сообщение содержит эти MIME-вложения вместе с необязательным именем файла, которое не всегда существует, но будет иметь MIME-тип, поэтому вам может понадобиться таблица перевода, чтобы получить расширение файла по умолчанию для вложения. Кроме того, следите за файлами, которые вы помещаете в вашу временную директорию, и убирайте их после закрытия окна сообщений. Если вы разрешаете открывать несколько сообщений одновременно, разрешать конфликты имен и создавать уникальные файлы... подписи имеют одинаковое имя, но принадлежат разным людям... это может сбить с толку, если ваше сообщение от Джона подписано Мэри.:)