Добрый день.
Подскажите, пожалуйста, как реализуется процесс отправки почты в среде С++ Builder.
Хотелось бы, чтобы при нажатии кнопки отправлялось письмо с заданной темой через почтовый клиент (например, Outlook) на уже назначенный адрес. К письму должен быть прикреплён конкретный txt-файл, сформированный программой ранее.
Заранее спасибо.
Скачай http://forum.pascal.net.ru/index.php?showtopic=6361 , и посмотри вот по этому пути: Интернет, Сети и Протоколы -> E-mail -> Как отправить Email? -> Использование COM-объекта Outlook
Код на Дельфи, но на Билдер перенести совсем не проблема...
Спасибо за совет, я ознакомился, но не смог окончательно перевести в Билдер или подключить модуль Delphi из-за отсутствия библиотеки OUTLOOK_TLB и файла outlk80.
Поэтому, если у кого-то есть ещё советы, прошу мне помочь.
С Аутлуком вполне можно работать через Ole Automation:
void __fastcall TForm1::Button1Click(TObject *Sender)Вроде нигде не ошибся, компиляцию проходит (BDS 2009), но запускать - не запускал, я MSOutlook не держу... На форме - одна кнопка и Мемо, в котором набирается сам текст сообщения. Только измени адрес на свой, когда будешь тестировать...
{
const int olMailItem = 0;
Variant MSOApp = CreateOleObject("Outlook.Application");
try
{
Variant myItem = MSOApp.OleFunction("CreateItem", (Variant)olMailItem);
myItem.OlePropertySet("Subject", "This is the Subject");
myItem.OlePropertyGet("Recipients").OleFunction("Add", WideString("xxx@xxx.com")); // Здесь будет адрес
myItem.OlePropertySet("Body", (WideString)memoBody->Text);
Variant myAttachments = myItem.OlePropertyGet("Attachments");
myAttachments.OleFunction("Add", WideString("F:\\fam.txt")); // Здесь будет имя файла
myItem.OleProcedure("Send");
MSOApp.OleFunction("Quit");
}
catch(...)
{
ShowMessage(L"Ошибка при отправке почты");
}
}
Спасибо.
Как известно, письма отправляются только при открытом Outlook, поэтому скажите, пожалуйста, можно ли как-то принудительно открыть приложение по нажатию кнопки отправки?
И ещё вопрос - можно ли как-то использовать аналогичный код для других почтовых клиентов (например, The Bat)?
Variant MSOApp = CreateOleObject("Outlook.Application"); // Пытаемся создать новый Instance АутлукаСоздать новый Instance - значит "открыть". Если это не получается - это значит, что либо у тебя что-то с системой не то, либо Аутлук не установлен... Версия MSO какая? То, что я написал точно присутствует в Outlook XP (он же - Outlook 2002), и для предотвращения этих вопросов нужно использовать Redemption: http://articles.techrepublic.com.com/5100-10878_11-1032953.html
try
{
Variant MSOApp;
bool isRunning = false;
try
{
// Сначала проверяем, а вдруг Outlook уже запущен? Тогда к нему подключаемся...
MSOApp = GetActiveOleObject("Outlook.Application");
isRunning = true;
}
catch(EOleSysError &e)
{
try
{
// Не был запущен... Значит, запускаем:
MSOApp = CreateOleObject("Outlook.Application");
isRunning = true;
}
catch(...)
{
ShowMessage(L"Неудача: Ошибка подключения к MS Outlook");
}
}
catch(...)
{
ShowMessage(L"Неудача: Ошибка подключения к MS Outlook");
}
if(isRunning)
{ // здесь весь тот код, который я приводил выше, кроме инициализации Аутлука
Версия Outlook- 2007, Билдера - 6.
Что происходит при введении проверки "isRunning": даже если Outlook не запущен, эта переменная получает значение true благодаря этому куску:
try
{
// Не был запущен... Значит, запускаем:
MSOApp = CreateOleObject("Outlook.Application");
isRunning = true;
}
tryПроверь перед запуском программы в Task Manager-е, может у тебя есть в процессах Outlook.EXE?
{
// Попытка запуска Outlook... Если запуск не удается -
// выбрасывается исключение, и следующая строка НЕ ВЫПОЛНЯЕТСЯ,
// программа сразу переходит в блок catch, то есть isRunning остается равным false...
MSOApp = CreateOleObject("Outlook.Application");
isRunning = true;
}
catch(...)
{
// Вот сюда переходим при неудаче в CreateOleObject !!!
ShowMessage(L"Неудача: Ошибка подключения к MS Outlook");
}
try
{
// Попытка запуска Outlook... Если запуск не удается -
// выбрасывается исключение, и следующая строка НЕ ВЫПОЛНЯЕТСЯ,
// программа сразу переходит в блок catch, то есть isRunning остается равным false...
MSOApp = CreateOleObject("Outlook.Application");
isRunning = true;
}
catch(...)
{
// Вот сюда переходим при неудаче в CreateOleObject !!!
ShowMessage(L"Неудача: Ошибка подключения к MS Outlook");
}
Кстати, подскажите ещё, пожалуйста, как называется параметр, отвечающий за отправку копии письма?
И где вообще можно ознакомиться с параметрами OLE-объектов и функций?
Cialis Moins Cher Paris
Generic Zentel Walsall
Why not settling on games that is fun and at the same time your earning. Well itll make suspense because of the game as well but dude just try it and it gave me hope while pandemic is real rn. https://usa-news.us/effects-of-covid-regulations-in-casinos/