Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion src/Typesafe.Mailgun/Http/MailgunHttpRequest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -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}")));
Expand Down
20 changes: 16 additions & 4 deletions src/Typesafe.Mailgun/MailgunClient.cs
Original file line number Diff line number Diff line change
Expand Up @@ -20,13 +20,25 @@ public MailgunClient(string domain, string apiKey, int version)
ApiKey = apiKey;
}

/// <summary>
/// Initializes a new client for the specified domain and api key with a timeout.
/// </summary>
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)
Expand All @@ -36,7 +48,7 @@ public SendMailCommandResult SendBatchMail(MailMessage mailMessage)

public SendMailCommandResult SendBatchMail(MailMessage mailMessage, IDictionary<string, IDictionary<string, object>> recipientVariables)
{
return new SendMailCommand(this, mailMessage, recipientVariables).Invoke();
return new SendMailCommand(this, mailMessage, recipientVariables).Invoke(Timeout);
}

public IEnumerable<Route> GetRoutes(int skip, int take, out int count)
Expand All @@ -46,12 +58,12 @@ public IEnumerable<Route> 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<MailgunStatEntry> GetStats(int skip, int take, MailgunEventTypes eventTypes, out int count)
Expand Down
4 changes: 2 additions & 2 deletions src/Typesafe.Mailgun/MailgunCommand`1.cs
Original file line number Diff line number Diff line change
Expand Up @@ -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());

Expand Down