Отправка почты, С++ |
1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным.
В описании темы указываем язык!!!
Отправка почты, С++ |
taran |
30.01.2010 14:57
Сообщение
#1
|
Новичок Группа: Пользователи Сообщений: 11 Пол: Мужской Реальное имя: Дмитрий Репутация: 0 |
Добрый день.
Подскажите, пожалуйста, как реализуется процесс отправки почты в среде С++ Builder. Хотелось бы, чтобы при нажатии кнопки отправлялось письмо с заданной темой через почтовый клиент (например, Outlook) на уже назначенный адрес. К письму должен быть прикреплён конкретный txt-файл, сформированный программой ранее. Заранее спасибо. |
volvo |
30.01.2010 15:09
Сообщение
#2
|
Гость |
Скачай Drkb , и посмотри вот по этому пути: Интернет, Сети и Протоколы -> E-mail -> Как отправить Email? -> Использование COM-объекта Outlook
Код на Дельфи, но на Билдер перенести совсем не проблема... |
taran |
31.01.2010 1:09
Сообщение
#3
|
Новичок Группа: Пользователи Сообщений: 11 Пол: Мужской Реальное имя: Дмитрий Репутация: 0 |
Спасибо за совет, я ознакомился, но не смог окончательно перевести в Билдер или подключить модуль Delphi из-за отсутствия библиотеки OUTLOOK_TLB и файла outlk80.
Поэтому, если у кого-то есть ещё советы, прошу мне помочь. |
volvo |
31.01.2010 1:51
Сообщение
#4
|
Гость |
С Аутлуком вполне можно работать через Ole Automation:
void __fastcall TForm1::Button1Click(TObject *Sender)Вроде нигде не ошибся, компиляцию проходит (BDS 2009), но запускать - не запускал, я MSOutlook не держу... На форме - одна кнопка и Мемо, в котором набирается сам текст сообщения. Только измени адрес на свой, когда будешь тестировать... При запуске тебя MSO может спросить, хочешь ли ты дать доступ программе к Аутлуку, и на какое время (я просто помню, раньше с таким сталкивался. А вот как решал проблему - не помню. Да и на Дельфи дело было, а не на Билдере). Дай доступ, и посмотри, отсылается ли вообще письмо, для начала... |
taran |
31.01.2010 12:05
Сообщение
#5
|
Новичок Группа: Пользователи Сообщений: 11 Пол: Мужской Реальное имя: Дмитрий Репутация: 0 |
Спасибо.
|
taran |
31.01.2010 15:00
Сообщение
#6
|
Новичок Группа: Пользователи Сообщений: 11 Пол: Мужской Реальное имя: Дмитрий Репутация: 0 |
Как известно, письма отправляются только при открытом Outlook, поэтому скажите, пожалуйста, можно ли как-то принудительно открыть приложение по нажатию кнопки отправки?
И ещё вопрос - можно ли как-то использовать аналогичный код для других почтовых клиентов (например, The Bat)? |
volvo |
31.01.2010 22:14
Сообщение
#7
|
Гость |
Цитата можно ли как-то принудительно открыть приложение по нажатию кнопки отправки? Это не нужно, при попытке отправки письма Аутлук и так откроется. Я, кстати, код проверил. Если давать доступ программе к Аутлуку, то все прекрасно отсылается. А чтоб не давать доступ - так не получится, ибо: http://support.microsoft.com/kb/821679 |
taran |
1.02.2010 0:47
Сообщение
#8
|
Новичок Группа: Пользователи Сообщений: 11 Пол: Мужской Реальное имя: Дмитрий Репутация: 0 |
Это не нужно, при попытке отправки письма Аутлук и так откроется. Я спросил как раз по той причине, что он автоматически не открывается. Если давать доступ программе к Аутлуку, то все прекрасно отсылается. Про доступ у меня вообще ничего не спрашивает, при открытом Outlook сразу отправляет. |
volvo |
1.02.2010 1:55
Сообщение
#9
|
Гость |
Цитата Я спросил как раз по той причине, что он автоматически не открывается. Хорошо, зайдем с другой стороны. Что происходит у тебя если Аутлук не открыт? Я сейчас за компьютером с MSO, поэтому могу сделать скрины. Итак, MSO не запущен, жму кнопку в моем приложении, получаю:Ставлю галку, оставляю 1 минуту, и жму "Yes". В лучших традициях MS получаю второе предупреждение: , с бегущим ProgressBar-ом... Дождался, пока станет активной кнопка "Yes", нажал - почта отправилась... Можно теперь узнать, что происходит у тебя? |
taran |
1.02.2010 13:05
Сообщение
#10
|
Новичок Группа: Пользователи Сообщений: 11 Пол: Мужской Реальное имя: Дмитрий Репутация: 0 |
Можно теперь узнать, что происходит у тебя? При открытом Outlook: при нажатии "Отправить" в программе письмо автоматически отправляется, без всяких разрешений добавляясь сначала в "Исходящие", а затем - в "Отправленные". При закрытом Outlook: согласно коду, появляется сообщение ShowMessage(L"Ошибка при отправке почты"). Если запускать в Билдере, появляется сообщение об ошибке: exception class EOleSysError with message "Операция прервана" |
volvo |
1.02.2010 13:38
Сообщение
#11
|
Гость |
Цитата При закрытом Outlook: согласно коду, появляется сообщение ShowMessage(L"Ошибка при отправке почты"). Неправда... Согласно коду - должно быть так:Variant MSOApp = CreateOleObject("Outlook.Application"); // Пытаемся создать новый Instance АутлукаСоздать новый Instance - значит "открыть". Если это не получается - это значит, что либо у тебя что-то с системой не то, либо Аутлук не установлен... Версия MSO какая? То, что я написал точно присутствует в Outlook XP (он же - Outlook 2002), и для предотвращения этих вопросов нужно использовать Redemption: Сайт Цитата Если запускать в Билдере, появляется сообщение об ошибке: exception class EOleSysError with message "Операция прервана" Чтобы IDE Билдера правильно обрабатывала исключения, надо это настроить... Билдер у тебя какой? В BDS 2009 это делается в Tools -> Options -> Debugger Options -> CodeGear Debuggers, там ставятся галки где нужно: в Language Exceptions снимается "Notify...", а в Native OS Exceptions переключатель Handled By переводится на User Program, а не на Debugger...Вообще, если делать программу совсем правильно, то это делается вот так: Variant MSOApp; |
taran |
1.02.2010 14:25
Сообщение
#12
|
Новичок Группа: Пользователи Сообщений: 11 Пол: Мужской Реальное имя: Дмитрий Репутация: 0 |
Версия Outlook- 2007, Билдера - 6.
Что происходит при введении проверки "isRunning": даже если Outlook не запущен, эта переменная получает значение true благодаря этому куску: try Это я точно проверил. Выводится сообщение "Ошибка при отправке почты", значит, идёт ошибка на этапе формирования письма, а не открытия Outlook (хотя реально Аутлук не открывается, несмотря на то, что isRunning = true). |
volvo |
1.02.2010 14:35
Сообщение
#13
|
Гость |
Цитата даже если Outlook не запущен, эта переменная получает значение true благодаря этому куску: Хм... У тебя что, Билдер глючит? Смотри:tryПроверь перед запуском программы в Task Manager-е, может у тебя есть в процессах Outlook.EXE? Добавлено через 7 мин. Кстати, а ты пробовал запускать EXE-шник отдельно, а не из Билдера? Попробуй... |
taran |
1.02.2010 14:48
Сообщение
#14
|
Новичок Группа: Пользователи Сообщений: 11 Пол: Мужской Реальное имя: Дмитрий Репутация: 0 |
Смотри: try Я понимаю, что если Outlook не запустился, то получим сообщение "Ошибка подключения к MS Outlook", поэтому и написал, что по мнению Билдера он запустился, а реально - нет. Процесса OUTLOOK.EXE перед запуском программы нет. При нажатии на кнопку "Отправить" этот процесс появляется, как и должен, но сразу вслед за этим появляется сообщение "Ошибка при отправке почты". Последний абзац как раз относится к запуску exe-файла. Сообщение отредактировано: taran - 1.02.2010 14:49 |
taran |
1.02.2010 15:27
Сообщение
#15
|
Новичок Группа: Пользователи Сообщений: 11 Пол: Мужской Реальное имя: Дмитрий Репутация: 0 |
Кстати, подскажите ещё, пожалуйста, как называется параметр, отвечающий за отправку копии письма?
И где вообще можно ознакомиться с параметрами OLE-объектов и функций? |
volvo |
1.02.2010 15:35
Сообщение
#16
|
Гость |
Цитата И где вообще можно ознакомиться с параметрами OLE-объектов и функций? В MSDN, где же еще? Вот объектная модель Outlook 2007 |
Текстовая версия | 20.09.2024 8:49 |