NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
Packagist · #929 most downloaded on Packagist
The Mailgun SDK provides methods for all API functions.
Last release 1 months ago
02 Sep 2026
Release timing varies
gaps range from 4 weeks to 10 months
Most releases are documented
notes for 50 of the last 60 stable releases
Nothing withdrawn
no release was ever pulled
13 years old
67 releases · first in 2013
support webmozart/assert ^2.0 ( #948 ) by @SunMar in #960
Full Changelog: v4.5.1...v4.5.2
preserve previous exception when rethrowing by @SunMar in #957
Mailgun::webhooks() no longer requires an explicit $signingKey … by @oleksandr-mykhailenko in #958Full Changelog: v4.5.0...v4.5.1
One column per quarter.
Mailgun::webhooks() no longer requires an explicit $signingKey argument.
When omitted, it falls back to the API key stored on the Mailgun instance,
restoring compatibility with pre-v4.3.7 usage patterns (issue #947).Added updated list of dimensions by @oleksandr-mykhailenko in #952
Full Changelog: v4.4.0...v4.5.0
Mailgun\Api\Ip:
listIpPools() — GET /v3/ip_poolscreateIpPool(name, description) — POST /v3/ip_poolsupdateIpPool(poolId, data) — PATCH /v3/ip_pools/{pool_id} (add/remove IPs, rename, link/unlink domains)getIpPoolDomains(poolId, limit, page) — GET /v3/ip_pools/{pool_id}/domainsaddIpToPool(poolId, ip) — PUT /v3/ip_pools/{pool_id}/ips/{ip}removeIpFromPool(poolId, ip) — DELETE /v3/ip_pools/{pool_id}/ips/{ip}addIpsToPool(poolId, ips[]) — POST /v3/ip_pools/{pool_id}/ips.jsondelegateIpPool(poolId, subaccountId) — PUT /v3/ip_pools/{pool_id}/delegaterevokeDelegatedIpPool(poolId, subaccountId) — DELETE /v3/ip_pools/{pool_id}/delegateassignIpToAllDomains(ip) — POST /v3/ips/{ip}/domainsremoveIpFromAllDomains(ip, alternative) — DELETE /v3/ips/{ip}/domainslistIpsDetailed(params) — GET /v3/ips/details/allMailgun\Model\Ip\IpPoolsResponse — pool list with pool_id, name, description, ips[], is_inherited, is_linkedMailgun\Model\Ip\IpPoolResponse — single pool details (replaces incorrect UpdateResponse usage)Mailgun\Model\Ip\IpPoolDomainsResponse — paginated domain list with nextPage cursorMailgun\Model\Ip\IpReferenceResponse — async-operation responses carrying message + reference_idMailgun\Model\Ip\IpDetailsResponse — detailed IP list for /v3/ips/details/allIp API methods, including request URI/body assertions and response model property checksloadDIPPInformation() was hydrating into UpdateResponse (message-only); now correctly returns IpPoolResponsedeleteDIPP() replacement parameters ($ip, $repPoolId) were wrongly required; both are now optional (?string = null)deleteDIPP() URL was built via unsafe string concatenation; replaced with proper http_build_query constructionaddNewDIPPIntoAccount() used unsafe direct array key access ($data['description']); replaced with null-coalescing guardplaceAccountIpToBand() had a redundant Assert::stringNotEmpty() call alongside Assert::ip() on the same valueaddNewDIPPIntoAccount() marked @deprecated in favour of the explicit createIpPool(string $name, string $description) methodBackward compatible fixes for previous release. by @oleksandr-mykhailenko in #951
Full Changelog: v4.3.7...v4.4.0
Temp fix for CI by @oleksandr-mykhailenko in #942
Full Changelog: v4.3.6...v4.3.7
Use ubuntu-latest for all CI runs by @svenluijten in #935
Full Changelog: v4.3.5...v4.3.6
api secure tracking endpoint by @oleksandr-mykhailenko in #932
Full Changelog: v4.3.4...v4.3.5
AccountManagement API endpoints:
updateAccountSettings for PUT /v5/accountsgetHttpSigningKey for GET /v5/accounts/http_signing_keycreateHttpSigningKey for POST /v5/accounts/http_signing_keygetSandboxAuthRecipients for GET /v5/sandbox/auth_recipientsAccountManagement API responses:
AccountResponseHttpSigningKeyResponseSandboxAuthRecipientsResponseMailgun class to include AccountManagement API.Add useAutomaticSenderSecurity support in DomainV4 by @matteotrubini in #928
Full Changelog: v4.3.3...v4.3.4
Fixed PHP 8.4 deprecations by @toooni in #926
Full Changelog: v4.3.2...v4.3.3
Added new API endpoint for getting metrics by @oleksandr-mykhailenko in #923
Full Changelog: v4.3.1...v4.3.2
Add method for retrieving stored messages by @oleksandr-mykhailenko in #920
create method for DomainV4.php by @oleksandr-mykhailenko in #921Full Changelog: v4.3.0...v4.3.1
Updated properties and added types to the classes properties
Added basic templates functionality
Nothing published for this version
Fixed response in case of 404 http error. Respect server error message
Nothing published for this version
Bugfix: TypeError caused by improper use of new self() instead of new static() in base class method
Improvement: SDK version headers v2 vs v3
Nothing published for this version
Fixed: bug when params to and reply-to have the same address
to and reply-to have the same addressNothing published for this version
Nothing published for this version
Changed: support bool value for method createMultiple
createMultipleCast integer values to string for sending multipart data
Added ability to make own API request to needed endpoint
Ability to update web_scheme for domain
http or https - set your open, click and unsubscribe URLs to use http or https. The default is httpNothing published for this version
Error with empty array for param recipient-variables. Fix was suggested by @deviarte
Support for new webhook endpoints (#609 by @svenbw & #749 by @Nyholm)
Fix double urlencoding (#747 by @uavn)
Email Validation (#726 by @uavn)
Support for PHP 8 (#727 by @DavidGarciaCat)
opened, clicked, unsubscribed and stored to the TotalResponseItem (#739 by @Arkitecht)Domain tracking implementation (#711 by @uavn)
Remove deprecated Laravel package due to it is archived (#695 by @tomschlick)
^1.0 and ^2.0 for php-http/guzzle6-adapter (#680 by @boboldehampsink)reply_preference parameter (#684 by @twoonesixdigital)Force DKIM Authority when creating a Domain (#686 by @Tiboonn)log-level property for Events (#704 by @uavn)null (#639 by @indapublic)ShowResponse::getContentIdMap() (#664 by @lvdhoorn)Ip::index() now returns all IPs instead of the shared IPs (#707 by @josephshanak)All classes Mailgun\Model are final or abstract.
Mailgun\Model are final or abstract.RequestBuilder and HttpClientConfigurator to Mailgun\HttpClient namespaceMailgun::__construct()php-http/message.Nothing published for this version
Nothing published for this version
Added missing method to use all Mailing List and Ip features.
Add complaints to Stats / Total Response
complaints to Stats / Total ResponseAllow to set the Mailgun server when instantiating the Mailgun's client: $mailgun = Mailgun::create('key', 'server');
$mailgun = Mailgun::create('key', 'server');Mailgun\Api\AttachmentMessageBuilder and BatchMessageMailgun\Message\MessageBuilder::addBccRecipient() is now optional.Ported MessageBuilder and BatchMessage #472
Support for 413 HTTP status codes, when we send too large payloads to the API
Add new Suppressions::getTotalCount() method
Suppressions::getTotalCount() methodREADME.md fileTags on UnsubscribeMailgun\Exception\HttpServerExceptionAdd cached property for DNS record
HttpClientException::getResponseCode()AbstractDomainResponse that VerifyResponse and CreateResponse extends.WebhookIndexResponse.TotalResponse that caused the content to be empty.Domain::create to be optional.Typo in DnsRecord::isValid. This make sure the correct result of the function is returned.
Using stable version of php-http/multipart-stream-builder
php-http/multipart-stream-builderWhen parsing an address in MessageBuilder we surround the recipient name with double quotes instead of single quotes.
MessageBuilder we surround the recipient name with double quotes instead of single quotes.Make sure to reset the MultipartStreamBuilder after a stream is built.
MultipartStreamBuilder after a stream is built.Support for sending messages with Mime. $mailgun->messages()->sendMime()
$mailgun->messages()->sendMime()This version contains a new way of using the API. Each endpoint return a domain object and the endpoints are grouped like the API documentation.
This version contains a new way of using the API. Each endpoint return a domain object and the endpoints are grouped like the API documentation.
Mailgun\Exception.Mailgun\Exception namespace.HttpClientConfigurator to configure the HTTP client.History and ReplaceUriPluginMailgun\Mailgun::getLastResponse()Mailgun\Connection\RestClient::getAttachment($url)The following classes will be removed in version 3.0.
Mailgun\Connection\Exceptions\GenericHTTPErrorMailgun\Connection\Exceptions\InvalidCredentialsMailgun\Connection\Exceptions\MissingEndpointMailgun\Connection\Exceptions\MissingRequiredParametersMailgun\Connection\Exceptions\NoDomainsConfiguredMailgun\Connection\RestClientMailgun\Constants\ApiMailgun\Constants\ExceptionMessagesMailgun\Mailgun::$resetClientMailgun\Mailgun::sendMessage()Mailgun\Mailgun::verifyWebhookSignature()Mailgun\Mailgun::post()Mailgun\Mailgun::get()Mailgun\Mailgun::delete()Mailgun\Mailgun::put()Mailgun\Mailgun::setApiVersion()Mailgun\Mailgun::setSslEnabled()Mailgun\Mailgun::MessageBuilder()Mailgun\Mailgun::OptInHandler()Mailgun\Mailgun::BatchMessage()Bug fixes with multiple recipients, inline images and attachments.
Declare BatchMessage::endpointUrl
- Strict comparison of hash (#117) - No dependency on Guzzle/PSR7 (#139) - Build URL string form an array (#138) - Docblock update (#134) - Minor fixe
Added webhook signature verification -
Improved security of OptInHandler -
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
adjust file attachment/inline name (#21 @travelton)
Enhancement:
Bugfixes:
Your coding agent can read these notes before it upgrades. Set up the MCP server →