You are sending Bulk Emails to Contacts, then you are tracking the Email sent flag in Opportunity record. I assume you are having a way to find out the right opportunity to update from the contact in Email recipient. (Just curious - What are you setting as regarding of those Emails?)
My recommendation: Register a plugin on Email create, then retrieve the contact's opportunity, set the flag IsMailSent
to true & do a Service.Update(Oppty)
I guess SendBulkMailRequest
message is just like broadcaster, as I noticed the below comments inside code sample.
// When the bulk email operation has completed, all sent emails will
// have a status of "Pending Send" and will be picked up by your email
// router. Alternatively, you can then use BackgroundSendEmail to download
// all the emails created with the SendBulkEmail message.
// See the BackgroundSendEmail sample for an example.