*/ class Domain extends HttpApi { /** * Returns a list of domains on the account. * * @param int $limit * @param int $skip * * @return IndexResponse */ public function index(int $limit = 100, int $skip = 0) { $params = [ 'limit' => $limit, 'skip' => $skip, ]; $response = $this->httpGet('/v3/domains', $params); return $this->hydrateResponse($response, IndexResponse::class); } /** * Returns a single domain. * * @param string $domain name of the domain * * @return ShowResponse|array|ResponseInterface */ public function show(string $domain) { Assert::stringNotEmpty($domain); $response = $this->httpGet(sprintf('/v3/domains/%s', $domain)); return $this->hydrateResponse($response, ShowResponse::class); } /** * Creates a new domain for the account. * See below for spam filtering parameter information. * {@link https://documentation.mailgun.com/user_manual.html#um-spam-filter}. * * @see https://documentation.mailgun.com/en/latest/api-domains.html#domains * * @param string $domain name of the domain * @param string $smtpPass password for SMTP authentication * @param string $spamAction `disable` or `tag` - inbound spam filtering * @param bool $wildcard domain will accept email for subdomains * * @return CreateResponse|array|ResponseInterface */ public function create(string $domain, string $smtpPass = null, string $spamAction = null, bool $wildcard = null) { Assert::stringNotEmpty($domain); $params['name'] = $domain; // If at least smtpPass available, check for the fields spamAction wildcard if (!empty($smtpPass)) { // TODO(sean.johnson): Extended spam filter input validation. Assert::stringNotEmpty($spamAction); Assert::boolean($wildcard); $params['smtp_password'] = $smtpPass; $params['spam_action'] = $spamAction; } $response = $this->httpPost('/v3/domains', $params); return $this->hydrateResponse($response, CreateResponse::class); } /** * Removes a domain from the account. * WARNING: This action is irreversible! Be cautious! * * @param string $domain name of the domain * * @return DeleteResponse|array|ResponseInterface */ public function delete(string $domain) { Assert::stringNotEmpty($domain); $response = $this->httpDelete(sprintf('/v3/domains/%s', $domain)); return $this->hydrateResponse($response, DeleteResponse::class); } /** * Returns a list of SMTP credentials for the specified domain. * * @param string $domain name of the domain * @param int $limit Number of credentials to return * @param int $skip Number of credentials to omit from the list * * @return CredentialResponse */ public function credentials(string $domain, int $limit = 100, int $skip = 0) { Assert::stringNotEmpty($domain); $params = [ 'limit' => $limit, 'skip' => $skip, ]; $response = $this->httpGet(sprintf('/v3/domains/%s/credentials', $domain), $params); return $this->hydrateResponse($response, CredentialResponse::class); } /** * Create a new SMTP credential pair for the specified domain. * * @param string $domain name of the domain * @param string $login SMTP Username * @param string $password SMTP Password. Length min 5, max 32. * * @return CreateCredentialResponse|array|ResponseInterface */ public function createCredential(string $domain, string $login, string $password) { Assert::stringNotEmpty($domain); Assert::stringNotEmpty($login); Assert::stringNotEmpty($password); Assert::lengthBetween($password, 5, 32, 'SMTP password must be between 5 and 32 characters.'); $params = [ 'login' => $login, 'password' => $password, ]; $response = $this->httpPost(sprintf('/v3/domains/%s/credentials', $domain), $params); return $this->hydrateResponse($response, CreateCredentialResponse::class); } /** * Update a set of SMTP credentials for the specified domain. * * @param string $domain name of the domain * @param string $login SMTP Username * @param string $pass New SMTP Password. Length min 5, max 32. * * @return UpdateCredentialResponse|array|ResponseInterface */ public function updateCredential(string $domain, string $login, string $pass) { Assert::stringNotEmpty($domain); Assert::stringNotEmpty($login); Assert::stringNotEmpty($pass); Assert::lengthBetween($pass, 5, 32, 'SMTP password must be between 5 and 32 characters.'); $params = [ 'password' => $pass, ]; $response = $this->httpPut(sprintf('/v3/domains/%s/credentials/%s', $domain, $login), $params); return $this->hydrateResponse($response, UpdateCredentialResponse::class); } /** * Remove a set of SMTP credentials from the specified domain. * * @param string $domain name of the domain * @param string $login SMTP Username * * @return DeleteCredentialResponse|array|ResponseInterface */ public function deleteCredential(string $domain, string $login) { Assert::stringNotEmpty($domain); Assert::stringNotEmpty($login); $response = $this->httpDelete( sprintf( '/v3/domains/%s/credentials/%s', $domain, $login ) ); return $this->hydrateResponse($response, DeleteCredentialResponse::class); } /** * Returns delivery connection settings for the specified domain. * * @param string $domain name of the domain * * @return ConnectionResponse|ResponseInterface */ public function connection(string $domain) { Assert::stringNotEmpty($domain); $response = $this->httpGet(sprintf('/v3/domains/%s/connection', $domain)); return $this->hydrateResponse($response, ConnectionResponse::class); } /** * Updates the specified delivery connection settings for the specified domain. * If a parameter is passed in as null, it will not be updated. * * @param string $domain name of the domain * @param bool|null $requireTLS enforces that messages are sent only over a TLS connection * @param bool|null $noVerify disables TLS certificate and hostname verification * * @return UpdateConnectionResponse|array|ResponseInterface */ public function updateConnection(string $domain, ?bool $requireTLS, ?bool $noVerify) { Assert::stringNotEmpty($domain); $params = []; if (null !== $requireTLS) { $params['require_tls'] = $requireTLS ? 'true' : 'false'; } if (null !== $noVerify) { $params['skip_verification'] = $noVerify ? 'true' : 'false'; } $response = $this->httpPut(sprintf('/v3/domains/%s/connection', $domain), $params); return $this->hydrateResponse($response, UpdateConnectionResponse::class); } /** * Returns a single domain. * * @param string $domain name of the domain * * @return VerifyResponse|array|ResponseInterface */ public function verify(string $domain) { Assert::stringNotEmpty($domain); $response = $this->httpPut(sprintf('/v3/domains/%s/verify', $domain)); return $this->hydrateResponse($response, VerifyResponse::class); } }