Redefine HTTP adapter like this:

Class Production.Adapter.HTTPOutboundAdapter Extends EnsLib.HTTP.OutboundAdapter
{

Method PostURL(pURL As %String, Output pHttpResponse As %Net.HttpResponse, pFormVarNames As %String, pData...) As %Status [ CodeMode = expression ]
{
..SendFormDataArray(.pHttpResponse, "POST", ..GetRequest(), .pFormVarNames, .pData, pURL)
}

ClassMethod GetRequest() As %Net.HttpRequest
{
    set request = ##class(%Net.HttpRequest).%New()
    set request.Timeout = 300 // Wait 300 seconds for response
    quit request
}

}

And use it instead of default adapter.

JVM is probably out of memory. Try this.

1. Define Excel server at SMP > System > Configuration > Zen Report Excel Servers > Zen Report Excel Server, let's say at port 44444

2. Start it. Copy OS command. Should be something like:

C:\InterSystems\Ensemble\lib\ExcelExporter\runserver.bat -port 44444 -numthreads 5 -loglevel 3 -maxlogfilesize 32000 -logrotationcount 100 -numpingthreads 5 -pingport 44445 2>&1

3. Stop Excel server

4. Execute the command from 2 in OS terminal, but set JVM heap size. See how.

5. In your ZEN report add:

Parameter EXCELSERVER = 44444;

to use your excel server.

6. Recompile report and try to run it again.

Both Service and Operation presented in the article use EnsLib.PubSub.PubSubOperation to get subscribers.

Here's getting a list of emails by domain and topic:

/// Get email addresses by domain and topic.
Method determineEmails(domain As %String, topic As %String) As %List
{
    set subRequest = ##class(EnsLib.PubSub.Request).%New()
    set subRequest.Topic = topic
    set subRequest.DomainName = domain    
    
    do ..SendRequestSync(..SubscriptionBO, subRequest, .subResponse,, "Get subscribers for domain: " _ domain _ ", topic: " _ topic)
    
    set mails = ""
    for i=1:1:subResponse.TargetList.Count() {
        #dim target As EnsLib.PubSub.Target
        set target = subResponse.TargetList.GetAt(i)
        set mails = mails _ $lb(target.Address)    
    }
    return mails
}