Помогите с отправкой mail через СDO!!!!
От: wolverine  
Дата: 24.03.03 23:31
Оценка:
Вообщем такая проблема — есть такой исходник проблема в том, что вроде бы всё замечательно без глюков,
возвращает всё как положенно только вот вопрос НИЧЕГО не приходит на ящик, подозрения на проблему аунтетфикцию на SMTP
сервере, вопрос что за поле cdoSMTPAccountName и чем оно отличаеться от cdoSendUserName и что должно быть в полях для
динамически создаваемой конфигурации?Или может быть я ошибаюсь и глюк в другом?


CoInitialize(NULL);
_StreamPtr    Stm;
_bstr_t       filepath;
HRESULT hr = S_OK;

CComPtr<IConfiguration> pConf;
hr = pConf.CoCreateInstance(L"CDO.Configuration");

CComPtr<Fields> pFields;
hr = pConf->get_Fields(&pFields);

CComPtr<Field> pfld;
hr = pFields->get_Item(CComVariant(cdoSMTPServer),&pfld);
hr = pfld->put_Value(CComVariant("smtp.mail.ru"));

pfld = NULL;
hr = pFields->get_Item(CComVariant(cdoSendEmailAddress),&pfld);
hr = pfld->put_Value(CComVariant("""+m_name+"" "+m_email));//some e-mail & name

pfld = NULL;
hr = pFields->get_Item(CComVariant(cdoSTMPAuthenticate),&pfld);
hr = pfld->put_Value(CComVariant((long)cdoBasic));
     
pfld = NULL;
hr = pFields->get_Item(CComVariant(cdoSendUserName),&pfld);
hr = pfld->put_Value(CComVariant(m_user));//??????????

pfld = NULL;
hr = pFields->get_Item(CComVariant(cdoSendPassword),&pfld);
hr = pfld->put_Value(CComVariant(m_passw));
            
                
pfld = NULL;
hr = pFields->get_Item(CComVariant(cdoSMTPServerPort),&pfld);
hr = pfld->put_Value(CComVariant((long)m_port));

pfld = NULL;
hr = pFields->get_Item(CComVariant(cdoSMTPAccountName),&pfld);
hr = pfld->put_Value(CComVariant(m_acc));//??????????????
                
pfld = NULL;
hr = pFields->get_Item(CComVariant(cdoSendUsingMethod),&pfld);
hr = pfld->put_Value(CComVariant((long)cdoSendUsingPort));
hr = pFields->Update();

CComPtr<IMessage> pMsg;
pMsg.CoCreateInstance(L"CDO.Message");
pMsg->putref_Configuration(pConf);
                
BSTR tmpBSTR = m_to.AllocSysString();
pMsg->put_To(tmpBSTR);
::SysFreeString(tmpBSTR);
tmpBSTR = m_from.AllocSysString();
pMsg->put_From(tmpBSTR);
::SysFreeString(tmpBSTR);
tmpBSTR = m_subj.AllocSysString();
pMsg->put_Subject(tmpBSTR);
::SysFreeString(tmpBSTR);
tmpBSTR = m_letter.AllocSysString();
pMsg->put_TextBody(tmpBSTR);
::SysFreeString(tmpBSTR);

pMsg->Send();
                
CoUninitialize();
Re: Помогите с отправкой mail через СDO!!!!
От: Gena_Popov  
Дата: 25.03.03 09:01
Оценка:
Здравствуйте, wolverine, Вы писали:

W>Вообщем такая проблема — есть такой исходник проблема в том, что вроде бы всё замечательно без глюков,

W>возвращает всё как положенно только вот вопрос НИЧЕГО не приходит на ящик, подозрения на проблему аунтетфикцию на SMTP
W>сервере, вопрос что за поле cdoSMTPAccountName и чем оно отличаеться от cdoSendUserName и что должно быть в полях для
W>динамически создаваемой конфигурации?Или может быть я ошибаюсь и глюк в другом?

При отправке по SMTP как правило username и password не нужны.
Еще возможен вариантт, когда корпоративный файрволл не пропускает подобные запросы (чтобы это проверить, нужно попробовать настроить Bat на работу с внешним smtp сервером, и если все будет ок, то использовать его настройки для cdo).
Вот как я отсылал мессагу (VBS)

set iMsg = CreateObject("CDO.Message")
set iConf = CreateObject("CDO.Configuration")
Set Flds = iConf.Fields
Const cdoSendUsingPickup = 1
Const cdoSendUsingPort = 2
With Flds
.Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = cdoSendUsingPort
.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = "25"
.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "smtp.mail.ru"
.Item("http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout") = 10
.Update
End With

Set iMsg.Configuration = iConf
iMsg.To = "gena@mail.ru"
iMsg.From = "test@mail.ru"
iMsg.TextBody = "СРОЧНО"
iMsg.Subject = "test!"
iMsg.Send()
Set iMsg = Nothing
Set iConf = Nothing
Set Flds = Nothing
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.