从一周开始,我在互联网上搜索并尝试了许多解决方案,但没有任何效果。 我的问题:我必须在C ++项目中使用组件CDO来发送邮件。为此,我从互联网上发现的许多样本中获取灵感。但是对于配置,只有一个参数工作,所有其他参数在使用时发送给我一个第一次机会异常,但没有它们,Send()方法抓住我另一个异常,说我缺少一些配置。注意:像pMsg属性这样的所有其他代码都在测试并且运行良好。
首先我使用下面的导入/包含:
#import "..\lib\msado15.dll" rename("ADODB","CDO") rename("EOF", "cdoEOF")
#import "..\lib\cdosys.dll"
#include "cdosysstr.h"
#include "cdosyserr.h"
#include <atlbase.h>
#include <atlimpl.cpp>
在我的方法中,我使用此代码:
CDO::IMessagePtr pMsg(__uuidof(CDO::Message));
CDO::IConfigurationPtr pConf (__uuidof(CDO::Configuration));
CDO::FieldsPtr pflds;
CDO::FieldPtr pfld;
pflds = pConf->GetFields();
// this first code do same thing.
//pfld = pflds->GetItem(CComVariant(cdoSMTPServer));
//pfld->PutValue(CComVariant((const char*)nomServeurSMTP));
pflds->Item[_variant_t("http://schemas.microsoft.com/cdo/configuration/smtpserver")]->Value = _variant_t((const char*)nomServeurSMTP) ;
//pfld = pflds->GetItem(CComVariant(cdoSendUsingMethod));
//pfld->PutValue(CComVariant((int)CDO::cdoSendUsingPort));
pflds->Item[_variant_t("http://schemas.microsoft.com/cdo/configuration/sendusing")]->Value = _variant_t((int)CDO::cdoSendUsingPort) ;
hr = pflds->Update();
pMsg->PutConfiguration(pConf);
pMsg->PutFrom(emet.AllocSysString());
pMsg->PutTo(dest.AllocSysString());
pMsg->PutSender(emet.AllocSysString());
pMsg->PutSubject(sujetMessage.AllocSysString());
hr = pMsg->Send();
sendusing配置是唯一没有向我发送第一次机会的例外。
我是否错误使用此代码或使用CDO,我是否需要一些技术先决条件?
非常感谢帮助我。如果您需要更多信息来帮我解决这个问题,我会回复。
修改
我发现我的FildsPtr只有这5个配置:(前四个以&#34开头; http://schemas.microsoft.com/cdo/configuration/&#34;)
我在工作中发现sendusing参数但我没有需要的smtpserver参数。如果可能,我该如何添加它?
编辑2
我在设置值之前添加此代码。效果是我先前的异常消失。但是,Send()方法还没有工作,并且在没有输入_com_error catch的情况下使用hresult -1给我一个第一次机会异常。
pflds->Append(cdoSMTPServer, CDO::adBSTR, sizeof(BSTR), CDO::adFldUnspecified);