当使用CDO发送电子邮件时,我遇到了四个第一次机会异常,IMessage::Send()
和IMessage::GetStream()
各有两个(所有这些都是无用的" 长在内存位置这样的")。例外情况发生在我无法通过的代码中,但每个代码都已处理完毕,最终我返回HRESULT
S_OK
并且电子邮件发送成功。
在设置this issue mentions之类的配置时,我常常遇到第一次机会异常并以相同的方式解决(每个项目使用Append()
),所以我在那里思考&#39 ;一些设置信息我错过了引发Send()
/ GetStream()
问题的信息。
以下是我所拥有的要点:
IMessagePtr message(__uuidof(Message));
IConfigurationPtr config = message->Configuration;
FieldsPtr configFields = config->Fields;
configFields->Item[cdoSendUsingMethod]->Value = _variant_t(cdoSendUsingPort);
configFields->Append(cdoSMTPServerPort, DataTypeEnum::adBSTR, SysStringLen(cdoSMTPServerPort), FieldAttributeEnum::adFldUnspecified, _variant_t(m_lSMTPServerPort));
configFields->Append(cdoSMTPServer, DataTypeEnum::adBSTR, SysStringLen(cdoSMTPServer), FieldAttributeEnum::adFldUnspecified, _variant_t(m_sSMTPServer));
configFields->Append(cdoSMTPConnectionTimeout, DataTypeEnum::adBSTR, SysStringLen(cdoSMTPConnectionTimeout), FieldAttributeEnum::adFldUnspecified, _variant_t(m_lSMTPConnectionTimeout));
configFields->Append(cdoSMTPAuthenticate, DataTypeEnum::adBSTR, SysStringLen(cdoSMTPAuthenticate), FieldAttributeEnum::adFldUnspecified, _variant_t(cdoBasic));
configFields->Append(cdoSendUserName, DataTypeEnum::adBSTR, SysStringLen(cdoSendUserName), FieldAttributeEnum::adFldUnspecified, _variant_t(m_sUserName));
configFields->Append(cdoSendPassword, DataTypeEnum::adBSTR, SysStringLen(cdoSendPassword), FieldAttributeEnum::adFldUnspecified, _variant_t(m_sPassword));
configFields->Update();
message->put_To(bsRecipients);
message->put_From(bsFrom);
message->put_Subject(bsSubject);
message->put_TextBody(bsMessage);
message->Send();
_StreamPtr stream = message->GetStream();
这就是我在cdosys.tli中看到的
inline HRESULT IMessage::Send ( ) {
HRESULT _hr = raw_Send();
if (FAILED(_hr)) _com_issue_errorex(_hr, this, __uuidof(this));
return _hr;
}
inline _StreamPtr IMessage::GetStream ( ) {
struct _Stream * _result = 0;
HRESULT _hr = raw_GetStream(&_result);
if (FAILED(_hr)) _com_issue_errorex(_hr, this, __uuidof(this));
return _StreamPtr(_result, false);
}
有关我为什么会看到这些例外情况的任何线索?奇怪的是,异常用于解决问题,而不仅仅是先检查,不确定为什么微软会这样设置。
答案 0 :(得分:0)
您可能需要在Visual Studio中配置异常过滤器(如果您使用的是VS,似乎就是这种情况)。转到主菜单 - >杜布格 - > Windows - >异常设置并取消选中相应的异常类型,以便VS在抛出时不会中断。