В моей программе я создаю электронное письмо для отправки, используя программное обеспечение почтового клиента по умолчанию, установленное на компьютере пользователя.
Я составил почтовый адрес, тему, многокомпонентное тело, и у меня есть несколько вложений, которые необходимо включить.
Я почти получил эту работу, используя mailto и ShellExecute следующим образом:
Message := 'mailto:someone@somewhere.com'
+ '?subject=This is the subjectBehold Error Report'
+ '&body=This is line 1' + '%0D%0A'
+ 'This is line 2' + '%0D%0A'
+ 'This is line 3'
+ '&Attach=c:\file1.txt';
RetVal := ShellExecute(Handle, 'open', PChar(Message), nil, nil, SW_SHOWNORMAL);
if RetVal <= 32 then
MessageDlg('Cannot find program to send e-mail.', mtWarning, [mbOK], 0);
Используя Delphi 2009 на компьютере с Windows Vista, откроется окно «Создание почты» в Microsoft Mail, в котором поля «Кому», «Тема» и «Тело» заполнены правильно. Однако файл не прикрепляется.
Когда я исследовал это, я заметил несколько комментариев о том, что этот метод работает не со всеми почтовыми клиентами. Однако большая часть комментариев довольно старая, так как я понимаю, что это очень старая техника.
Затем я обнаружил, что Зарко Гаджич сказал , что «этот подход приемлем, но вы не можете отправлять вложения таким образом».
Я видел также и Windows Simple Mail API (MAPI), но Зарко говорит, что это работает, только если у конечного пользователя есть MAPI-совместимое почтовое программное обеспечение. Существуют хорошо документированные методы использования MAPI с Delphi (например, Отправка электронной почты с помощью mapi ), но у всех них есть отказ от ответственности, что MAPI не всегда устанавливается с Windows.
Кроме того, я действительно хочу, чтобы сообщение появилось первым в почтовой программе пользователя по умолчанию, поэтому оно будет иметь его в своих записях электронной почты, и они смогут его редактировать и решать, когда и когда они захотят его отправить. Я не уверен, как работает MAPI и будет ли он это делать.
Итак, мои требования:
Для вывода электронной почты в почтовой программе пользователя.
Чтобы разрешить одно или несколько вложений.
Для работы (надеюсь) со всеми почтовыми клиентами на любом компьютере под управлением Windows начиная с XP (т. Е. XP, Vista или 7).
Есть ли такое животное? Или, может быть, кто-то знает, как получить вложения для работы с техникой mailto / ShellExecute?
Что делает большинство людей?
Редактировать:
Было несколько ответов с решениями MAPI и даже с решением Indy.
У меня проблема с ними в том, что они не обязательно используют почтовый клиент по умолчанию. Например, на моем компьютере с Vista я установил Windows Mail в качестве клиента по умолчанию. Когда я отправляю MAPI, он не вызывает Почту Windows, но вместо этого вызывает и настраивает электронную почту в Outlook. Я не хочу этого
Двое из моих пользователей моей программы пожаловались:
Ваша процедура отладки не может отправить файл, так как она пытается запустить почту Windows по какой-то известной ей причине, а не с помощью почтового клиента по умолчанию (в моем случае thunderbird)
Я пытался заполнить исключение
сообщить, но сдался, когда он попросил
этот сервер, этот сервер! Я тогда получил
действительно раздражен, потому что он запущен
прогноз
- Я никогда, никогда не использую это или не хочу использовать это.
Мне не нужен код для MAPI или Indy. Они легко доступны. Но если вы предложите MAPI или Indy, то мне действительно нужен способ найти клиента по умолчанию и убедиться, что именно ему передан адрес электронной почты для отправки.
Кроме того, мне нужно знать, универсален ли сейчас MAPI. 5 лет назад не было гарантированно работать на всех машинах, потому что он не был установлен как часть операционной системы. Это все еще правда, или MAPI теперь поставляется с Windows XP, Vista и 7 по умолчанию?
Те же вопросы относятся к Indy или любым другим предлагаемым решениям. Может ли он работать с клиентом по умолчанию и будет ли он работать практически на всех компьютерах с Windows XP и более поздними версиями?
Причина, по которой решение "mailto" так приятно, заключается в том, что все машины должны поддерживать его для обработки оператора mailto HTML, найденного на веб-страницах. Теперь, если бы я мог использовать его для добавления вложений ...
Вероятное решение найдено: mjustin указал на альтернативу, которая использует команду sendto операционной системы. Скорее всего, это путь.
mailto не было ограничено 256 символами, как HTML mailto, но я был опустошен, узнав, что оно ограничено 2048 символами. К счастью, несколько часов спустя Мюстин дал свой ответ.
Если реализация этого пойдет хорошо, его ответ сделает это за меня. Если нет, я добавлю свои комментарии здесь.
Нет. Оказывается, решение sendto не всегда открывает программу электронной почты по умолчанию. На моей машине он открывает Outlook, когда мой почтовый по умолчанию Windows Mail. Очень плохо. Мне пришлось вернуться к методу mailto, несмотря на ограничение в 2048 символов.
Я, однако, нашел в статье: SendTo получателю почты , что:
На этом этапе вы можете заменить
:: ShellExecute с хорошо продуманной
:: вызов WinExec, используя актуальный
командная строка mailto, объявленная в
зарегистрироваться и настроить адрес текущей электронной почты
клиент (например,
«% ProgramFiles% \ Outlook
Express \ msimn.exe "/ mailurl:% 1). Но
тогда ограничение составляет 32 КБ. Как
вывод, нет возможности отправить
сообщения электронной почты размером более 32 КБ, использующие
протокол mailto.
но тогда я должен был бы определить, кто является почтовым клиентом в каждом случае. Я ожидаю, что это приведет к дальнейшим осложнениям.
Еще одна вещь, которую я обнаружил, состоит в том, что mailto позволяет устанавливать «to», «cc», «bcc», «subject» и «body», но без вложений. Принимая во внимание, что sendto ТОЛЬКО разрешает вложения, а затем устанавливает электронное письмо по умолчанию с сообщением по умолчанию, и вы не можете устанавливать различные поля и текст.