2012-12-19 265 views
1

我想使用扩展MAPI发送消息,但不断收到E_ACCESSDENIED错误。我正在使用调用cpp dll的C#类。我能够检查邮件和删除邮件,但不能发送。下面是我用它来创建消息的C#:无法发送MAPI消息

using (MAPIMessage message = new MAPIMessage()) 
{ 
    if (message.Create(this)) 
    { 
     message.SetSender(send.SenderName, send.SenderAddress); 
     message.SetSubject(send.Subject); 
     message.SetBody(send.Message); 
     message.AddRecipient(send.RecipientAddress); 
     // High: Add attachments 

     #if DEBUG 
     ConfirmMessageCreation(send, message); 
     #endif 

     Logger.Log("Message created...\nSending message...", Verbose.LogEverything); 
     result = message.Send(); 
    } 

     else 
      Logger.Log("There was a problem creating the email.", Verbose.LogImportant); 
} 

发送邮件的实际CPP如下:

BOOL MessageSend(CMAPIMessage* pMessage) 
{ 
    return pMessage->Send(); 
} 

...

BOOL CMAPIMessage::Send() 
{ 
    HRESULT result = Message()->SubmitMessage(0); 

    if(Message() && result==S_OK) 
    { 
     Close(); 
     return TRUE; 
    } 
    return FALSE; 
} 

即使我正确记录并且可以检查或删除邮件,当调用Send()时,我会收到E_ACCESSDENIED错误。任何对这个问题的深入了解将不胜感激。

+0

你是否设置了与发件人相关的属性? –

+0

刚才是什么。我设置了发件人姓名和电子邮件地址。 – Tim

+1

如果您不添加任何与发件人相关的属性,它会工作吗?尝试保存该消息(调用SaveChanges而不是SubmitMessage),然后在OUtlookSpy中查看它(单击IMEssage)并单击SubmitMessage以单击它。如果这样做不起作用,请尝试删除与发件人相关的属性。是否所有收件人都解决(有PR_ENTRYID)? –

回答

2

需要删除与发件人相关的属性。