/
home
/
obinna
/
html
/
boaz2
/
vendor
/
mailgun
/
mailgun-php
/
src
/
Api
/
Upload File
HOME
<?php declare(strict_types=1); /* * Copyright (C) 2013 Mailgun * * This software may be modified and distributed under the terms * of the MIT license. See the LICENSE file for details. */ namespace Mailgun\Api; use Exception; use Mailgun\Assert; use Mailgun\Model\Domain\ConnectionResponse; use Mailgun\Model\Domain\CreateCredentialResponse; use Mailgun\Model\Domain\CreateResponse; use Mailgun\Model\Domain\CredentialResponse; use Mailgun\Model\Domain\DeleteCredentialResponse; use Mailgun\Model\Domain\DeleteResponse; use Mailgun\Model\Domain\IndexResponse; use Mailgun\Model\Domain\ShowResponse; use Mailgun\Model\Domain\TrackingResponse; use Mailgun\Model\Domain\UpdateClickTrackingResponse; use Mailgun\Model\Domain\UpdateConnectionResponse; use Mailgun\Model\Domain\UpdateCredentialResponse; use Mailgun\Model\Domain\UpdateOpenTrackingResponse; use Mailgun\Model\Domain\UpdateUnsubscribeTrackingResponse; use Mailgun\Model\Domain\VerifyResponse; use Mailgun\Model\Domain\WebSchemeResponse; use Psr\Http\Client\ClientExceptionInterface; use Psr\Http\Message\ResponseInterface; /** * @see https://documentation.mailgun.com/api-domains.html * * @author Sean Johnson <sean@mailgun.com> */ class Domain extends HttpApi { private const DKIM_SIZES = ['1024', '2048']; /** * Returns a list of domains on the account. * @param int $limit * @param int $skip * @return IndexResponse|array * @throws ClientExceptionInterface * @throws Exception */ public function index(int $limit = 100, int $skip = 0) { Assert::range($limit, 1, 1000); $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 * @throws ClientExceptionInterface */ 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|null $smtpPass password for SMTP authentication * @param string|null $spamAction `disable` or `tag` - inbound spam filtering * @param bool $wildcard domain will accept email for subdomains * @param bool $forceDkimAuthority force DKIM authority * @param string[] $ips an array of ips to be assigned to the domain * @param ?string $pool_id pool id to assign to the domain * @param string $webScheme `http` or `https` - set your open, click and unsubscribe URLs to use http or https. The default is http * @param string $dkimKeySize Set length of your domain’s generated DKIM key * @return CreateResponse|array|ResponseInterface * @throws Exception */ public function create(string $domain, string $smtpPass = null, string $spamAction = null, bool $wildcard = null, bool $forceDkimAuthority = null, ?array $ips = null, ?string $pool_id = null, string $webScheme = 'http', string $dkimKeySize = '1024') { Assert::stringNotEmpty($domain); $params['name'] = $domain; if (!empty($smtpPass)) { Assert::stringNotEmpty($smtpPass); $params['smtp_password'] = $smtpPass; } if (!empty($spamAction)) { // TODO(sean.johnson): Extended spam filter input validation. Assert::stringNotEmpty($spamAction); $params['spam_action'] = $spamAction; } if (null !== $wildcard) { Assert::boolean($wildcard); $params['wildcard'] = $wildcard ? 'true' : 'false'; } if (null !== $forceDkimAuthority) { Assert::boolean($forceDkimAuthority); $params['force_dkim_authority'] = $forceDkimAuthority ? 'true' : 'false'; } if (null !== $ips) { Assert::isList($ips); Assert::allString($ips); $params['ips'] = join(',', $ips); } if (!empty($webScheme)) { Assert::stringNotEmpty($webScheme); Assert::oneOf($webScheme, ['https', 'http']); $params['web_scheme'] = $webScheme; } if (null !== $pool_id) { Assert::stringNotEmpty($pool_id); $params['pool_id'] = $pool_id; } if (!empty($dkimKeySize)) { Assert::oneOf( $dkimKeySize, self::DKIM_SIZES, 'Length of your domain’s generated DKIM key must be 1024 or 2048' ); $params['dkim_key_size'] = $dkimKeySize; } $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 * @throws ClientExceptionInterface */ 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 * @throws ClientExceptionInterface */ 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 * @throws Exception */ 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 * @throws ClientExceptionInterface */ 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 * @throws ClientExceptionInterface */ 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 * @throws ClientExceptionInterface */ 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 * @throws ClientExceptionInterface */ 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); } /** * Update webScheme for existing domain * 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 $webScheme `http` or `https` - set your open, click and unsubscribe URLs to use http or https. The default is http * @return WebSchemeResponse|array|ResponseInterface * @throws Exception * @throws ClientExceptionInterface */ public function updateWebScheme(string $domain, string $webScheme = 'http') { $params = []; Assert::stringNotEmpty($domain); Assert::stringNotEmpty($webScheme); Assert::oneOf($webScheme, ['https', 'http']); $params['web_scheme'] = $webScheme; $response = $this->httpPut(sprintf('/v3/domains/%s', $domain), $params); return $this->hydrateResponse($response, WebSchemeResponse::class); } /** * Returns a single domain. * * @param string $domain name of the domain * * @return VerifyResponse|array|ResponseInterface * @throws ClientExceptionInterface */ public function verify(string $domain) { Assert::stringNotEmpty($domain); $response = $this->httpPut(sprintf('/v3/domains/%s/verify', $domain)); return $this->hydrateResponse($response, VerifyResponse::class); } /** * Returns a domain tracking settings. * * @param string $domain name of the domain * * @return TrackingResponse|array|ResponseInterface * @throws ClientExceptionInterface */ public function tracking(string $domain) { Assert::stringNotEmpty($domain); $response = $this->httpGet(sprintf('/v3/domains/%s/tracking', $domain)); return $this->hydrateResponse($response, TrackingResponse::class); } /** * Updates a domain click tracking settings. * * @param string $domain The name of the domain * @param string $active The status for this tracking (one of: yes, no) * * @return UpdateClickTrackingResponse|array|ResponseInterface * * @throws Exception */ public function updateClickTracking(string $domain, string $active) { Assert::stringNotEmpty($domain); Assert::stringNotEmpty($active); Assert::oneOf($active, ['yes', 'no', 'htmlonly']); $params = [ 'active' => $active, ]; $response = $this->httpPut(sprintf('/v3/domains/%s/tracking/click', $domain), $params); return $this->hydrateResponse($response, UpdateClickTrackingResponse::class); } /** * Updates a domain open tracking settings. * * @param string $domain The name of the domain * @param string $active The status for this tracking (one of: yes, no) * * @return UpdateOpenTrackingResponse|array|ResponseInterface * @throws ClientExceptionInterface */ public function updateOpenTracking(string $domain, string $active) { Assert::stringNotEmpty($domain); Assert::stringNotEmpty($active); Assert::oneOf($active, ['yes', 'no']); $params = [ 'active' => $active, ]; $response = $this->httpPut(sprintf('/v3/domains/%s/tracking/open', $domain), $params); return $this->hydrateResponse($response, UpdateOpenTrackingResponse::class); } /** * Updates a domain unsubscribe tracking settings. * * @param string $domain The name of the domain * @param string $active The status for this tracking (one of: yes, no) * @param string $htmlFooter The footer for HTML emails * @param string $textFooter The footer for plain text emails * * @return UpdateUnsubscribeTrackingResponse|array|ResponseInterface * * @throws Exception */ public function updateUnsubscribeTracking(string $domain, string $active, string $htmlFooter, string $textFooter) { Assert::stringNotEmpty($domain); Assert::stringNotEmpty($active); Assert::oneOf($active, ['yes', 'no', 'true', 'false']); Assert::stringNotEmpty($htmlFooter); Assert::nullOrString($textFooter); $params = [ 'active' => (in_array($active, ['yes', 'true'], true)) ? 'true' : 'false', 'html_footer' => $htmlFooter, 'text_footer' => $textFooter, ]; $response = $this->httpPut(sprintf('/v3/domains/%s/tracking/unsubscribe', $domain), $params); return $this->hydrateResponse($response, UpdateUnsubscribeTrackingResponse::class); } }