smtserver配置上的C ++ CDO错误

时间:2016-09-23 09:43:59

标签: visual-c++ smtp

从一周开始,我在互联网上搜索并尝试了许多解决方案,但没有任何效果。 我的问题:我必须在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;)

  • 语言代码
  • postusing
  • sendusing
  • usemessageresponsetext
  • &#34;瓮:模式:日历:timezoneid&#34;

我在工作中发现sendusing参数但我没有需要的smtpserver参数。如果可能,我该如何添加它?

编辑2

我在设置值之前添加此代码。效果是我先前的异常消失。但是,Send()方法还没有工作,并且在没有输入_com_error catch的情况下使用hresult -1给我一个第一次机会异常。

pflds->Append(cdoSMTPServer, CDO::adBSTR, sizeof(BSTR), CDO::adFldUnspecified);

0 个答案:

没有答案