public override void Execute()
        {
            base.Execute();
            log.Debug("Begin Execute");
            try
            {
                var api   = new ApiClient();
                var count = 0;

                foreach (var item in (List <tblAttachmentsTemp>)State.Data)
                {
                    log.Debug($"Uploading {item.FileName}");
                    count++;
                    if (count == Config.Instance.VirusScanTaskPostCountLimit)
                    {
                        log.Debug("Post Count Limit reached.");
                        return;
                    }

                    var boundary = "-----" + Guid.NewGuid().ToString().Replace("-", "");
                    var request  = new ApiClient.Request
                    {
                        Url     = Config.Instance.VirusScanTaskPostUrl,
                        Method  = "POST",
                        Headers = new NameValueCollection
                        {
                            { "content-type", $"multipart/form-data; boundary={boundary}" },
                            { "protocol-version", "1.0" }
                        },
                        Body = ApiClient.BuildMultipartForm(
                            boundary,
                            new List <KeyValuePair <string, string> >
                        {
                            new KeyValuePair <string, string>("apikey", Config.Instance.VirusScanTaskApiKey)
                        },
                            new List <ApiClient.File>
                        {
                            new ApiClient.File
                            {
                                Name        = "file",
                                FileName    = item.FileName,
                                ContentType = item.ContentType,
                                Base64Data  = item.Base64Data
                            }
                        }
                            ),
                        ResponseAsString = true
                    };
                    var response = api.ClientRequest(request);
                    var json     = JsonConvert.DeserializeObject <VirusTotalPostResult>(response.ToString());
                    if (json.ResponseCode == 1)
                    {
                        log.Info($"Uploaded {item.FileName}, ScanId: {json.ScanId}");
                        item.ScanId        = json.ScanId;
                        item.Sha256        = json.Sha256;
                        item.DateScanStart = State.RunDate;
                        UpdateAttachmentTemp(item);
                        Results.Add(new Result(item.ScanId, response.StatusCode.ToString(), response.StatusDescription,
                                               null));
                    }
                    else
                    {
                        var warning = $"Upload failed, JSON returned: {json}";
                        log.Error(warning);
                        Results.Add(new Result(null, response.StatusCode.ToString(), response.StatusDescription, warning));
                    }
                }
            }
            catch (Exception e)
            {
                log.Error(e);
                Results.Add(new Result(null, null, null, e.Message));
            }
            finally
            {
                log.Debug("End Execute");
            }
        }
        public override void Execute()
        {
            base.Execute();
            log.Debug("Begin Execute");
            try
            {
                var api   = new ApiClient();
                var count = 0;

                foreach (var item in (List <tblAttachmentsTemp>)State.Data)
                {
                    log.Debug($"Checking reports for {item.FileName}");
                    count++;
                    if (count == Config.Instance.VirusScanTaskScanReportCountLimit)
                    {
                        log.Debug("Scan Report Count Limit reached.");
                        return;
                    }

                    var boundary = "-----" + Guid.NewGuid().ToString().Replace("-", "");
                    var request  = new ApiClient.Request
                    {
                        Url     = Config.Instance.VirusScanTaskScanReportUrl,
                        Method  = "POST",
                        Headers = new NameValueCollection
                        {
                            { "content-type", $"multipart/form-data; boundary={boundary}" },
                        },
                        Body = ApiClient.BuildMultipartForm(
                            boundary,
                            new List <KeyValuePair <string, string> >
                        {
                            new KeyValuePair <string, string>("apikey", Config.Instance.VirusScanTaskApiKey),
                            new KeyValuePair <string, string>("resource", item.ScanId)
                        },
                            null
                            ),
                        ResponseAsString = true
                    };
                    var response = api.ClientRequest(request);
                    var json     = JsonConvert.DeserializeObject <VirusTotalScanReportResult>(response.ToString());
                    if (json.ResponseCode == 1)
                    {
                        var isOk   = json.Positives == 0 ? "returned OK, " : "";
                        var result = $"Report {isOk} found  {json.Positives} positives out of {json.Total} scans";
                        log.Info(result);
                        item.ScanResult = json.Positives == 0 ? "OK" : result + "\n" + response;
                        if (item.ScanResult != "OK")
                        {
                            UpdateAttachmentTemp(item);
                            Results.Add(new Result(item.ScanId, response.StatusCode.ToString(), response.StatusDescription, null));
                            var email = new EmailError();
                            email.GenerateErrorMessageEmail($"{result}<br/> Filename: {item.FileName}<br/> ScanId: {item.ScanId}<br/> Returned JSON:<br/>{response.ToString()}");
                        }
                        else
                        {
                            var isSaved = AllowAttachment(item);
                            if (isSaved)
                            {
                                CloseAttachmentTemp(item);
                                Results.Add(new Result(item.ScanId, response.StatusCode.ToString(), response.StatusDescription, null));
                            }
                            else
                            {
                                throw new Exception($"Could not save create attachment for Id: {item.Id}");
                            }
                        }
                    }
                    else
                    {
                        var warning = $"Report not completed, JSON returned: {response}";
                        log.Error(warning);
                        Results.Add(new Result(null, response.StatusCode.ToString(), response.StatusDescription, warning));
                    }
                }
            }
            catch (Exception e)
            {
                log.Error(e);
                Results.Add(new Result(null, null, null, e.Message));
            }
            finally
            {
                log.Debug("End Execute");
            }
        }