If your code is populating the data, you could do the deletion from your code, no need to use bulk deletion job.
You could use the execute multiple to batch the deletes in your code
public static void BulkDelete(IOrganizationService service, DataCollection<EntityReference> entityReferences)
{
var multipleRequest = new ExecuteMultipleRequest()
{
Settings = new ExecuteMultipleSettings()
{
ContinueOnError = false,
ReturnResponses = true
},
// Create an empty organization request collection.
Requests = new OrganizationRequestCollection()
};
// Add a DeleteRequest for each entity to the request collection.
foreach (var entityRef in entityReferences)
{
DeleteRequest deleteRequest = new DeleteRequest { Target = entityRef };
multipleRequest.Requests.Add(deleteRequest);
}
// Execute all the requests in the request collection using a single web method call.
ExecuteMultipleResponse multipleResponse = (ExecuteMultipleResponse)service.Execute(multipleRequest);
}
https://msdynamicscrmblog.wordpress.com/2013/05/10/use-executemultiplerequest-for-bulk-createupdatedelete-using-c-in-dynamics-crm-2011-2/
If you have more than 5k records, you will have to use paging when you retrieve records
Refer to this link to see how you can do paging - pull 5k records from CRM at a time and then use the BulkDelete method mentioned above to delete those 5k and then carry on doing until the last record
https://docs.microsoft.com/en-us/dynamics365/customer-engagement/developer/org-service/sample-use-queryexpression-with-a-paging-cookie
Just wanted to add this as well : What happens if you create a workflow on Email Created/Received and check if its bulk delete completed email, then start inserting your data if you do not want to use your code to do the bulk delete, this is just an idea and its possible.
Btw, I assume is this bulk delete is related to your question on other thread about external lookup values storing in CRM