![]() |
#6 |
Участник
|
SysMailer - на пенсию.
Вот код, который использует CDO.Message напрямую и отправляет почту через сервер smtp.office365.com X++: client static void sendMailByCDO( str _Addresses, // список адресов через ';', допускается 1 адрес без ';' str _Subject, str _Body, int _MaxRetry = 5 ) { COM msg; COM cfg; COM cfgFields; COM cfgField; COM msgFields; COM msgField; int retrycnt = 0; ; new InteropPermission(InteropKind::ComInterop).assert(); cfg = new COM('CDO.Configuration'); cfgFields = cfg.Fields(); cfgField = cfgFields.item('http://schemas.microsoft.com/cdo/configuration/smtpauthenticate'); cfgField.value(1); cfgField = cfgFields.item('http://schemas.microsoft.com/cdo/configuration/sendusing'); cfgField.value(2); cfgField = cfgFields.item('http://schemas.microsoft.com/cdo/configuration/smtpserver'); cfgField.value(GM_QCSettings::eMailSMTPServer()); cfgField = cfgFields.item('http://schemas.microsoft.com/cdo/configuration/smtpserverport'); cfgField.value(GM_QCSettings::eMailSMTPPort()); cfgField = cfgFields.item('http://schemas.microsoft.com/cdo/configuration/sendusername'); cfgField.value(GM_QCSettings::eMailSMTPLoginAccount()); cfgField = cfgFields.item('http://schemas.microsoft.com/cdo/configuration/sendpassword'); cfgField.value(GM_QCSettings::eMailSMTPPassword()); cfgField = cfgFields.item('http://schemas.microsoft.com/cdo/configuration/smtpusessl'); cfgField.value(GM_QCSettings::eMailSMTPuseSSL()); cfgFields.update(); msg = new COM('CDO.Message'); msg.configuration(cfg); msgFields = msg.Fields(); msgField = msgFields.item('urn:schemas:mailheader:content-type'); msgField.value('text/html; charset="KOI8-R"'); msgFields.update(); msg.From(GM_QCSettings::eMailSMTPFromName() + '<' + GM_QCSettings::eMailSMTPFromAddress() + '>'); msg.To(_Addresses); msg.subject(_Subject); msg.htmlBody(_Body); try { msg.send(); } catch { warning('Произошла ошибка при выполнении метода send() COM-объекта CDO.Message'); retrycnt++; if(retrycnt < _MaxRetry) { sleep(1000); retry; } } if(retrycnt) warning(strfmt("Сделано повторных попыток отправки: %1", retrycnt)); if(retrycnt == _MaxRetry) error("Отправить письмо не удалось"); CodeAccessPermission::revertAssert(); msg = null; cfg = null; cfgFields = null; cfgField = null; msgFields = null; msgField = null; } 1. Статические методы на GM_QCSettings просто возвращают хранимые в базе параметры отправки почты. 2. Используемый порт - "обычный" 25-й, а не рекомендованный MS 587-й. С 587-м ничего не получилось. 3. "Обнуление" ком-объектов в конце работы - это не для красоты, а мера против непонятных глюков с ними, которые возникали при попытках вызвать метод с малыми интервалами времени между вызовами. 4. Отправка этим способом работает медленно по сравнению с Outlook'ом. Причина этого мне неизвестна. 5. eMailSMTPuseSSL() == 1 Последний раз редактировалось AR®; 30.08.2013 в 13:09. |
|
|
За это сообщение автора поблагодарили: kashperuk (5). |