diff --git a/src/Typesafe.Mailgun/Http/MailgunHttpRequest.cs b/src/Typesafe.Mailgun/Http/MailgunHttpRequest.cs
index a2080f7..ea83343 100644
--- a/src/Typesafe.Mailgun/Http/MailgunHttpRequest.cs
+++ b/src/Typesafe.Mailgun/Http/MailgunHttpRequest.cs
@@ -12,10 +12,11 @@ internal class MailgunHttpRequest
private readonly HttpWebRequest request;
- public MailgunHttpRequest(IMailgunAccountInfo accountInfo, string method, string relativePath)
+ public MailgunHttpRequest(IMailgunAccountInfo accountInfo, string method, string relativePath, int timeout = 100000)
{
request = (HttpWebRequest)WebRequest.Create(new Uri(accountInfo.DomainBaseUrl, relativePath));
request.Method = method;
+ request.Timeout = timeout;
// Note: ensure no preceding 401, request.PreAuthenticate does not work as you might expect
request.Headers.Add("Authorization", "basic " + Convert.ToBase64String(Encoding.ASCII.GetBytes($"api:{accountInfo.ApiKey}")));
diff --git a/src/Typesafe.Mailgun/MailgunClient.cs b/src/Typesafe.Mailgun/MailgunClient.cs
index 6a25fb9..a1f73c2 100644
--- a/src/Typesafe.Mailgun/MailgunClient.cs
+++ b/src/Typesafe.Mailgun/MailgunClient.cs
@@ -20,13 +20,25 @@ public MailgunClient(string domain, string apiKey, int version)
ApiKey = apiKey;
}
+ ///
+ /// Initializes a new client for the specified domain and api key with a timeout.
+ ///
+ public MailgunClient(string domain, string apiKey, int version, int timeout)
+ {
+ DomainBaseUrl = new Uri(string.Format("https://api.mailgun.net/v{0}/", version) + domain + "/");
+ ApiKey = apiKey;
+ Timeout = timeout;
+ }
+
public Uri DomainBaseUrl { get; private set; }
public string ApiKey { get; private set; }
+ public int Timeout { get; private set; } = 100000;
+
public SendMailCommandResult SendMail(MailMessage mailMessage)
{
- return new SendMailCommand(this, mailMessage).Invoke();
+ return new SendMailCommand(this, mailMessage).Invoke(Timeout);
}
public SendMailCommandResult SendBatchMail(MailMessage mailMessage)
@@ -36,7 +48,7 @@ public SendMailCommandResult SendBatchMail(MailMessage mailMessage)
public SendMailCommandResult SendBatchMail(MailMessage mailMessage, IDictionary> recipientVariables)
{
- return new SendMailCommand(this, mailMessage, recipientVariables).Invoke();
+ return new SendMailCommand(this, mailMessage, recipientVariables).Invoke(Timeout);
}
public IEnumerable GetRoutes(int skip, int take, out int count)
@@ -46,12 +58,12 @@ public IEnumerable GetRoutes(int skip, int take, out int count)
public Route CreateRoute(int priority, string description, RouteFilter expression, params RouteAction[] actions)
{
- return new CreateRouteCommand(this, priority, description, expression, actions).Invoke().Route;
+ return new CreateRouteCommand(this, priority, description, expression, actions).Invoke(Timeout).Route;
}
public CommandResult DeleteRoute(string routeId)
{
- return new DeleteCommand(this, "../routes/" + routeId).Invoke();
+ return new DeleteCommand(this, "../routes/" + routeId).Invoke(Timeout);
}
public IEnumerable GetStats(int skip, int take, MailgunEventTypes eventTypes, out int count)
diff --git a/src/Typesafe.Mailgun/MailgunCommand`1.cs b/src/Typesafe.Mailgun/MailgunCommand`1.cs
index a4c4bfe..acbdbaa 100644
--- a/src/Typesafe.Mailgun/MailgunCommand`1.cs
+++ b/src/Typesafe.Mailgun/MailgunCommand`1.cs
@@ -21,9 +21,9 @@ protected MailgunCommand(IMailgunAccountInfo accountInfo, string path, string ht
protected IMailgunAccountInfo AccountInfo { get; }
- public T Invoke()
+ public T Invoke(int timeout)
{
- var request = new MailgunHttpRequest(AccountInfo, httpVerb, path);
+ var request = new MailgunHttpRequest(AccountInfo, httpVerb, path, timeout);
request.SetFormParts(CreateFormParts());