В моей программе я составляю электронное письмо для отправки с использованием клиентского программного обеспечения по умолчанию, установленного на пользовательском компьютере.
Я написал адрес mailto, тему, многострочное тело, и у меня есть несколько вложений для включения.
Я почти получил эту работу, используя mailto и ShellExecute следующим образом:
Message := 'mailto:[email protected]'
+ '?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, откроется окно "Почта Mail" Microsoft Mail с правильной настройкой "Кому", "Тема" и "Тело". Однако файл не привязан.
Как я исследовал это, я заметил некоторые комментарии, в которых говорится, что этот метод не работает со всеми почтовыми клиентами. Однако большая часть комментариев довольно старая, поскольку я понимаю, что это очень старая техника.
Затем я обнаружил, что Zarko Gajic сказал, что "этот подход в порядке, но вы не можете отправлять вложения таким образом".
Я видел, что это также простой прокси-сервер Windows (MAPI), но Zarko говорит, что он работает только в том случае, если у конечного пользователя есть программное обеспечение электронной почты, совместимое с MAPI. Существуют хорошо документированные методы использования MAPI с Delphi (например, Отправка электронной почты с использованием mapi), но все они имеют отказ в том, что MAPI не всегда установленный с Windows.
Кроме того, я действительно хочу, чтобы сообщение появилось первым в электронной почте по умолчанию, поэтому они будут иметь его как часть своих записей электронной почты, и они смогут отредактировать его и решить, когда и когда они захотят его отправить. Я не уверен, как работает MAPI, и если он это сделает.
Итак, мои требования:
-
Чтобы отправить электронное письмо в почтовую программу пользователя.
-
Чтобы разрешить одно или несколько вложений.
-
Чтобы работать с (надеюсь) всеми почтовыми клиентами на любом компьютере Windows с XP (например, XP, Vista или 7).
Есть ли такое животное? Или, может быть, кто-то знает, как получить приложения для работы с методом mailto/ShellExecute?
Что делают большинство людей?
Изменить:
Было несколько ответов с решениями MAPI и даже с решением Indy.
Проблема с ними заключается в том, что они не обязательно используют почтовый клиент по умолчанию. Например, на моей машине Vista я установил Windows Mail как мой клиент по умолчанию. Когда я делаю отправку MAPI, она не вызывает Windows Mail, но она вызывает и настраивает электронную почту в Outlook вместо этого. Я не хочу этого.
Два моих пользователя моей программы жаловались:
Ваша процедура отладки не может отправить файл, поскольку он пытается запустить почтовую почту по какой-либо причине, известную себе, а не использовать почтовый клиент по умолчанию (в моем случае thunderbird)
Я попытался заполнить исключение но отказался, когда он попросил этот сервер, этот сервер! Я тогда получил действительно раздражен, потому что он запущен прогноз - Я никогда не использую его или не хочу его использовать.
Мне не нужен код для MAPI или Indy. Они легко доступны. Но если вы предлагаете MAPI или Indy, то, что мне действительно нужно, это способ найти клиента по умолчанию и убедиться, что это тот, который передал отправленное письмо.
Кроме того, мне нужно знать, является ли MAPI универсальным. 5 лет назад на всех машинах не гарантировалось, что он не был установлен как часть операционной системы. Это правда, или MAPI теперь поставляется с Windows XP, Vista и 7 по умолчанию?
Те же вопросы касаются Indy или любых других предлагаемых решений. Может ли он работать с клиентом по умолчанию и будет ли он работать почти на всех Windows XP и более поздних машинах?
Причина, по которой решение "mailto" настолько приятное, заключается в том, что все машины должны поддерживать его с целью обработки инструкции HTML mailto, найденной на веб-страницах. Теперь, если бы я мог использовать его для добавления вложений...
Вероятное решение найдено: mjustin указал альтернативу, которая использует команду sendto операционной системы. Скорее всего, это путь.
Mailto не ограничивался 256 символами, такими как HTML mailto, но я был опустошен, чтобы узнать, что он ограничивается 2048 символами. К счастью, несколько часов спустя, mjustin дал свой ответ.
Если реализация этого идет хорошо, его ответ сделает это для меня. Если нет, я добавлю свои комментарии здесь.
Нет. Как оказалось, решение sendto не всегда откроет почтовую программу по умолчанию. На моей машине он открывает Outlook, когда моя почтовая программа по умолчанию - это Почта Windows. Очень жаль. Мне пришлось вернуться к методу mailto, несмотря на ограничение символов 2048.
Однако я нашел в статье: SendTo mail recipient, который:
На этом этапе вы можете заменить:: ShellExecute с хорошо продуманным:: WinExec call, используя фактический mailto, объявленная в реестра и настроить текущий адрес электронной почты клиент (например, "% ProgramFiles%\Outlook Express\msimn.exe" /mailurl:% 1). то ограничение составляет 32 КБ. Как заключение, нет способа отправить электронная почта размером более 32 КБ с использованием mailto протокол.
но тогда мне нужно будет определить, кто почтовый клиент в каждом случае. Я ожидаю, что это приведет к дальнейшим осложнениям.
Еще одна вещь, о которой я узнал, заключается в том, что mailto позволяет устанавливать "to", "cc", "bcc", "subject" и "body", но без вложений. Если sendto ONLY разрешает вложения, а затем настраивает электронную почту по умолчанию с сообщением по умолчанию, и вам не удастся установить различные поля и тело.