mailodds / mailodds-php
Official PHP SDK for the MailOdds email validation API
Requires
- php: ^8.1
- ext-curl: *
- ext-json: *
- ext-mbstring: *
- guzzlehttp/guzzle: ^7.3
- guzzlehttp/psr7: ^1.7 || ^2.0
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.5
- phpunit/phpunit: ^8.0 || ^9.0
README
The official PHP client for the MailOdds email deliverability platform. Validate emails, send transactional messages, and monitor deliverability from any PHP application, with first-class support for Laravel and WordPress.
Installation
composer require mailodds/mailodds-php
Requires PHP 8.1 or later.
Quick Start
<?php require_once __DIR__ . '/vendor/autoload.php'; $config = MailOdds\Configuration::getDefaultConfiguration() ->setAccessToken(getenv('MAILODDS_API_KEY')); $api = new MailOdds\Api\EmailValidationApi(new GuzzleHttp\Client(), $config); $request = new MailOdds\Model\ValidateRequest(['email' => 'user@example.com']); $result = $api->validateEmail($request); echo "Status: " . $result->getResult()->getStatus() . "\n"; echo "Action: " . $result->getResult()->getAction() . "\n";
MailOdds Platform
MailOdds provides a full-stack email deliverability platform. Explore the capabilities that this SDK connects you to:
- Email Validation API - Real-time email verification with 25+ checks
- Email Sending API - Transactional email delivery with DKIM dual signing
- Transactional Email - Reliable SMTP delivery for application email
- Email Webhooks - Real-time delivery, bounce, and engagement notifications
- Ecommerce Email - Email tools built for online stores
- DMARC Monitoring - Aggregate report parsing and policy recommendations
- Sender Reputation - Domain and IP reputation scoring
- Email Suppression List - Centralized suppression management
- Email Validation Policies - Rule-based validation with preset templates
- Ecommerce Email Integration - WooCommerce, Shopify, and PrestaShop connectors
- Free Email Validator - Try single-email validation on the homepage
Features
- PSR-18 compatible - Works with any HTTP client that implements the PSR-18 standard, with Guzzle included as the default transport
- Fully typed models - Every API request and response is represented by a strongly-typed PHP class, providing IDE autocompletion and static analysis support
- Laravel and WordPress ready - Drop into Laravel service providers or use alongside the MailOdds WordPress plugin with no additional configuration
- Bulk validation support - Submit lists of up to 500,000 emails per job via JSON, file upload, or S3 presigned URL, with webhook callbacks on completion
- Sending and deliverability - Send transactional email, monitor DMARC reports, track blacklist status, and score sender reputation from one SDK
- Comprehensive error handling - Structured error responses with machine-readable codes and request IDs for debugging
Why MailOdds
MailOdds is a complete email deliverability platform built for developers. Every email validated or sent through MailOdds passes through 25+ real-time checks including syntax verification, DNS and MX validation, SMTP mailbox probing, disposable domain detection, and role account identification.
The platform maintains sub-200ms median response times for single validations, 99.9% API uptime, and processes bulk lists of up to 500,000 emails per job. MailOdds supports 11 language SDKs, an MCP server for AI agent integration, a CLI for local development, and a WordPress plugin for no-code deployments.
All email sending uses DKIM dual signing with automated key rotation, and the deliverability monitoring stack covers DMARC aggregate reports, blacklist surveillance across 80+ DNSBLs, and real-time sender health scoring.
API Reference
Full documentation is available at https://mailodds.com/docs.
All URIs are relative to https://api.mailodds.com/v1.
All Endpoints
| Class | Method | HTTP request | Description |
|---|---|---|---|
| AgentControlPlaneApi | getMcpCapabilities | GET /v1/mcp/capabilities | Get MCP capabilities |
| BlacklistMonitoringApi | addBlacklistMonitor | POST /v1/blacklist-monitors | Add blacklist monitor |
| BlacklistMonitoringApi | deleteBlacklistMonitor | DELETE /v1/blacklist-monitors/{monitor_id} | Delete a blacklist monitor |
| BlacklistMonitoringApi | getBlacklistHistory | GET /v1/blacklist-monitors/{monitor_id}/history | Get blacklist check history |
| BlacklistMonitoringApi | listBlacklistMonitors | GET /v1/blacklist-monitors | List blacklist monitors |
| BlacklistMonitoringApi | runBlacklistCheck | POST /v1/blacklist-monitors/{monitor_id}/check | Run blacklist check |
| BounceAnalysisApi | createBounceAnalysis | POST /v1/bounce-analyses | Analyze bounce logs |
| BounceAnalysisApi | crossReferenceBounces | GET /v1/bounce-analyses/{analysis_id}/cross-reference | Cross-reference bounces with validation logs |
| BounceAnalysisApi | getBounceAnalysis | GET /v1/bounce-analyses/{analysis_id} | Get bounce analysis |
| BounceAnalysisApi | getBounceRecords | GET /v1/bounce-analyses/{analysis_id}/records | Get bounce records |
| BulkValidationApi | cancelJob | POST /v1/jobs/{job_id}/cancel | Cancel a job |
| BulkValidationApi | createJob | POST /v1/jobs | Create bulk validation job (JSON) |
| BulkValidationApi | createJobFromS3 | POST /v1/jobs/upload/s3 | Create job from S3 upload |
| BulkValidationApi | createJobUpload | POST /v1/jobs/upload | Create bulk validation job (file upload) |
| BulkValidationApi | deleteJob | DELETE /v1/jobs/{job_id} | Delete a job |
| BulkValidationApi | getJob | GET /v1/jobs/{job_id} | Get job status |
| BulkValidationApi | getJobResults | GET /v1/jobs/{job_id}/results | Get job results |
| BulkValidationApi | getPresignedUpload | POST /v1/jobs/upload/presigned | Get S3 presigned upload URL |
| BulkValidationApi | listJobs | GET /v1/jobs | List validation jobs |
| CampaignAnalyticsApi | getCampaignABResults | GET /v1/campaigns/{campaign_id}/ab-results | Get A/B test results |
| CampaignAnalyticsApi | getCampaignAttribution | GET /v1/campaigns/{campaign_id}/conversions/attribution | Get campaign attribution |
| CampaignAnalyticsApi | getCampaignDeliveryConfidence | GET /v1/campaigns/{campaign_id}/delivery-confidence | Get pre-send delivery confidence |
| CampaignAnalyticsApi | getCampaignFunnel | GET /v1/campaigns/{campaign_id}/funnel | Get campaign funnel |
| CampaignAnalyticsApi | getCampaignProviderIntelligence | GET /v1/campaigns/{campaign_id}/provider-intelligence | Get provider intelligence |
| CampaignsApi | cancelCampaign | POST /v1/campaigns/{campaign_id}/cancel | Cancel a campaign |
| CampaignsApi | createCampaign | POST /v1/campaigns | Create a campaign |
| CampaignsApi | createCampaignVariant | POST /v1/campaigns/{campaign_id}/variants | Create A/B variant |
| CampaignsApi | getCampaign | GET /v1/campaigns/{campaign_id} | Get campaign with stats |
| CampaignsApi | listCampaigns | GET /v1/campaigns | List campaigns |
| CampaignsApi | scheduleCampaign | POST /v1/campaigns/{campaign_id}/schedule | Schedule a campaign |
| CampaignsApi | sendCampaign | POST /v1/campaigns/{campaign_id}/send | Send a campaign |
| ContactListsApi | appendToContactList | POST /v1/contact-lists/{list_id}/append | Append to contact list |
| ContactListsApi | createContactList | POST /v1/contact-lists | Create contact list |
| ContactListsApi | deleteContactList | DELETE /v1/contact-lists/{list_id} | Delete a contact list |
| ContactListsApi | getInactiveContactsReport | GET /v1/contacts/inactive-report | Get inactive contacts report |
| ContactListsApi | listContactLists | GET /v1/contact-lists | List contact lists |
| ContactListsApi | queryContactList | POST /v1/contact-lists/{list_id}/query | Query contact list |
| ContentClassificationApi | classifyContent | POST /v1/content-check | Classify email content |
| DMARCMonitoringApi | addDmarcDomain | POST /v1/dmarc-domains | Add DMARC domain |
| DMARCMonitoringApi | deleteDmarcDomain | DELETE /v1/dmarc-domains/{domain_id} | Delete a DMARC domain |
| DMARCMonitoringApi | getDmarcDomain | GET /v1/dmarc-domains/{domain_id} | Get DMARC domain |
| DMARCMonitoringApi | getDmarcRecommendation | GET /v1/dmarc-domains/{domain_id}/recommendation | Get DMARC policy recommendation |
| DMARCMonitoringApi | getDmarcSources | GET /v1/dmarc-domains/{domain_id}/sources | Get DMARC sending sources |
| DMARCMonitoringApi | getDmarcTrend | GET /v1/dmarc-domains/{domain_id}/trend | Get DMARC trend |
| DMARCMonitoringApi | listDmarcDomains | GET /v1/dmarc-domains | List DMARC domains |
| DMARCMonitoringApi | verifyDmarcDomain | POST /v1/dmarc-domains/{domain_id}/verify | Verify DMARC DNS records |
| EmailSendingApi | deliverBatch | POST /v1/deliver/batch | Send to multiple recipients (max 100) |
| EmailSendingApi | deliverEmail | POST /v1/deliver | Send a single email |
| EmailValidationApi | validateBatch | POST /v1/validate/batch | Validate multiple emails (sync) |
| EmailValidationApi | validateEmail | POST /v1/validate | Validate single email |
| EventsApi | trackEvent | POST /v1/events/track | Track a commerce event |
| MessageEventsApi | getMessageEvents | GET /v1/message-events | Get message events |
| OAuth20Api | createToken | POST /oauth/token | Create token |
| OAuth20Api | getJwks | GET /.well-known/jwks.json | Get JSON Web Key Set |
| OAuth20Api | introspectToken | POST /oauth/introspect | Introspect token |
| OAuth20Api | oauthServerMetadata | GET /.well-known/oauth-authorization-server | OAuth server metadata |
| OAuth20Api | revokeToken | POST /oauth/revoke | Revoke token |
| ProductsApi | batchProducts | POST /v1/stores/{store_id}/products/batch | Batch push products |
| ProductsApi | getProduct | GET /v1/store-products/{product_id} | Get a product |
| ProductsApi | queryProducts | GET /v1/store-products | Query products |
| SenderHealthApi | getSenderHealth | GET /v1/sender-health | Get sender health score |
| SenderHealthApi | getSenderHealthTrend | GET /v1/sender-health/trend | Get sender health trend |
| SendingDomainsApi | createSendingDomain | POST /v1/sending-domains | Add a sending domain |
| SendingDomainsApi | deleteSendingDomain | DELETE /v1/sending-domains/{domain_id} | Delete a sending domain |
| SendingDomainsApi | getSendingDomain | GET /v1/sending-domains/{domain_id} | Get a sending domain |
| SendingDomainsApi | getSendingDomainIdentityScore | GET /v1/sending-domains/{domain_id}/identity-score | Get domain identity score |
| SendingDomainsApi | getSendingStats | GET /v1/sending-stats | Get sending statistics |
| SendingDomainsApi | listSendingDomains | GET /v1/sending-domains | List sending domains |
| SendingDomainsApi | verifySendingDomain | POST /v1/sending-domains/{domain_id}/verify | Verify domain DNS records |
| ServerTestsApi | getServerTest | GET /v1/server-tests/{test_id} | Get server test |
| ServerTestsApi | listServerTests | GET /v1/server-tests | List server tests |
| ServerTestsApi | runServerTest | POST /v1/server-tests | Run server test |
| SpamChecksApi | getSpamCheck | GET /v1/spam-checks/{check_id} | Get spam check |
| SpamChecksApi | listSpamChecks | GET /v1/spam-checks | List spam checks |
| SpamChecksApi | runSpamCheck | POST /v1/spam-checks | Run spam check |
| StoreConnectionsApi | createStore | POST /v1/stores | Create a store connection |
| StoreConnectionsApi | disconnectStore | DELETE /v1/stores/{store_id} | Disconnect a store |
| StoreConnectionsApi | getStore | GET /v1/stores/{store_id} | Get a store connection |
| StoreConnectionsApi | listStores | GET /v1/stores | List store connections |
| StoreConnectionsApi | triggerSync | POST /v1/stores/{store_id}/sync | Trigger product sync |
| SubscriberListsApi | confirmSubscription | GET /v1/confirm/{token} | Confirm subscription |
| SubscriberListsApi | createList | POST /v1/lists | Create a subscriber list |
| SubscriberListsApi | deleteList | DELETE /v1/lists/{list_id} | Delete a subscriber list |
| SubscriberListsApi | getList | GET /v1/lists/{list_id} | Get a subscriber list |
| SubscriberListsApi | getLists | GET /v1/lists | List subscriber lists |
| SubscriberListsApi | getSubscribers | GET /v1/lists/{list_id}/subscribers | List subscribers |
| SubscriberListsApi | subscribe | POST /v1/subscribe/{list_id} | Subscribe to a list |
| SubscriberListsApi | unsubscribeSubscriber | DELETE /v1/lists/{list_id}/subscribers/{subscriber_id} | Unsubscribe a subscriber |
| SuppressionListsApi | addSuppression | POST /v1/suppression | Add suppression entries |
| SuppressionListsApi | checkSuppression | POST /v1/suppression/check | Check suppression status |
| SuppressionListsApi | getSuppressionAuditLog | GET /v1/suppression/audit | Get suppression audit log |
| SuppressionListsApi | getSuppressionStats | GET /v1/suppression/stats | Get suppression statistics |
| SuppressionListsApi | listSuppression | GET /v1/suppression | List suppression entries |
| SuppressionListsApi | removeSuppression | DELETE /v1/suppression | Remove suppression entries |
| SystemApi | getTelemetrySummary | GET /v1/telemetry/summary | Get validation telemetry |
| SystemApi | healthCheck | GET /health | Health check |
| ValidationPoliciesApi | addPolicyRule | POST /v1/policies/{policy_id}/rules | Add rule to policy |
| ValidationPoliciesApi | createPolicy | POST /v1/policies | Create policy |
| ValidationPoliciesApi | createPolicyFromPreset | POST /v1/policies/from-preset | Create policy from preset |
| ValidationPoliciesApi | deletePolicy | DELETE /v1/policies/{policy_id} | Delete policy |
| ValidationPoliciesApi | deletePolicyRule | DELETE /v1/policies/{policy_id}/rules/{rule_id} | Delete rule |
| ValidationPoliciesApi | getPolicy | GET /v1/policies/{policy_id} | Get policy |
| ValidationPoliciesApi | getPolicyPresets | GET /v1/policies/presets | Get policy presets |
| ValidationPoliciesApi | listPolicies | GET /v1/policies | List policies |
| ValidationPoliciesApi | testPolicy | POST /v1/policies/test | Test policy evaluation |
| ValidationPoliciesApi | updatePolicy | PUT /v1/policies/{policy_id} | Update policy |
All Models
- AddBlacklistMonitor201Response
- AddBlacklistMonitorRequest
- AddDmarcDomain201Response
- AddDmarcDomainRequest
- AddPolicyRule201Response
- AddSuppressionRequest
- AddSuppressionRequestEntriesInner
- AddSuppressionResponse
- AppendToContactList200Response
- AppendToContactListRequest
- BatchDeliverRequest
- BatchDeliverRequestStructuredData
- BatchDeliverResponse
- BatchDeliverResponseDelivery
- BatchDeliverResponseRejectedInner
- BatchProductsRequest
- BatchProductsRequestProductsInner
- BatchProductsResponse
- BatchProductsResponseErrorsInner
- BlacklistMonitor
- BlacklistMonitorLatestCheck
- BounceAnalysisResponse
- BounceAnalysisResponseAnalysis
- BounceAnalysisResponseAnalysisCategories
- BounceAnalysisResponseAnalysisTopDomainsInner
- Campaign
- CampaignResponse
- CampaignStats
- CampaignVariant
- CheckSuppressionRequest
- ClassifyContent200Response
- ClassifyContent200ResponseContentCheck
- ClassifyContentRequest
- ConfirmSubscription200Response
- ContactList
- CreateBounceAnalysisRequest
- CreateCampaignRequest
- CreateCampaignVariant201Response
- CreateContactList201Response
- CreateContactListRequest
- CreateJobFromS3Request
- CreateJobRequest
- CreateList201Response
- CreateListRequest
- CreatePolicyFromPresetRequest
- CreatePolicyRequest
- CreateSendingDomain201Response
- CreateSendingDomainRequest
- CreateStore201Response
- CreateStoreRequest
- CreateToken200Response
- CreateVariantRequest
- CrossReferenceBounces200Response
- CrossReferenceBounces200ResponseCrossReference
- CrossReferenceBounces200ResponseCrossReferenceEntriesInner
- DeleteJob200Response
- DeletePolicy200Response
- DeletePolicyRule200Response
- DeliverRequest
- DeliverRequestOptions
- DeliverRequestStructuredData
- DeliverRequestToInner
- DeliverResponse
- DeliverResponseDelivery
- DisconnectStore200Response
- DmarcDomain
- ErrorResponse
- GetBlacklistHistory200Response
- GetBlacklistHistory200ResponseChecksInner
- GetBounceRecords200Response
- GetBounceRecords200ResponseRecordsInner
- GetCampaignABResults200Response
- GetCampaignABResults200ResponseVariantsInner
- GetCampaignABResults200ResponseWinner
- GetCampaignAttribution200Response
- GetCampaignAttribution200ResponseAttribution
- GetCampaignAttribution200ResponseAttributionFirstTouch
- GetCampaignDeliveryConfidence200Response
- GetCampaignDeliveryConfidence200ResponseFactors
- GetCampaignDeliveryConfidence200ResponseFactorsDomainAuth
- GetCampaignDeliveryConfidence200ResponseFactorsListQuality
- GetCampaignDeliveryConfidence200ResponseFactorsSenderReputation
- GetCampaignFunnel200Response
- GetCampaignFunnel200ResponseFunnel
- GetCampaignFunnel200ResponseRates
- GetCampaignProviderIntelligence200Response
- GetCampaignProviderIntelligence200ResponseProvidersInner
- GetDmarcDomain200Response
- GetDmarcDomain200ResponseDomain
- GetDmarcDomain200ResponseDomainAllOfSummary
- GetDmarcRecommendation200Response
- GetDmarcRecommendation200ResponseRecommendation
- GetDmarcSources200Response
- GetDmarcSources200ResponseSourcesInner
- GetDmarcTrend200Response
- GetDmarcTrend200ResponseTrendInner
- GetInactiveContactsReport200Response
- GetInactiveContactsReport200ResponseByListInner
- GetLists200Response
- GetMessageEvents200Response
- GetMessageEvents200ResponseClicksInner
- GetMessageEvents200ResponseEventsInner
- GetMessageEvents200ResponseSummary
- GetPresignedUploadRequest
- GetProduct200Response
- GetSenderHealth200Response
- GetSenderHealth200ResponseComponents
- GetSenderHealth200ResponseComponentsDeliveryRate
- GetSenderHealth200ResponseVolume
- GetSenderHealthTrend200Response
- GetSenderHealthTrend200ResponseDataPointsInner
- GetSendingDomainIdentityScore200Response
- GetSendingStats200Response
- GetSendingStats200ResponseStats
- GetSubscribers200Response
- HealthCheck200Response
- IdentityScoreCheck
- IntrospectToken200Response
- Job
- JobArtifacts
- JobListResponse
- JobResponse
- JobSummary
- JwksResponse
- JwksResponseKeysInner
- ListBlacklistMonitors200Response
- ListCampaigns200Response
- ListContactLists200Response
- ListDmarcDomains200Response
- ListSendingDomains200Response
- ListServerTests200Response
- ListSpamChecks200Response
- ListStores200Response
- McpCapabilities
- McpCapabilitiesPillarsInner
- McpCapabilitiesPillarsInnerToolsInner
- OAuthServerMetadata
- Pagination
- Policy
- PolicyListResponse
- PolicyListResponseLimits
- PolicyPresetsResponse
- PolicyPresetsResponsePresetsInner
- PolicyResponse
- PolicyRule
- PolicyRuleAction
- PolicyTestResponse
- PresignedUploadResponse
- PresignedUploadResponseUpload
- ProductFacets
- ProductFacetsCategoriesInner
- ProductFacetsPriceRangesInner
- ProductFacetsStoresInner
- QueryContactList200Response
- QueryContactList200ResponseEmailsInner
- QueryContactListRequest
- QueryContactListRequestFiltersInner
- QueryProducts200Response
- RemoveSuppression200Response
- RemoveSuppressionRequest
- ResultsResponse
- RunBlacklistCheck200Response
- RunBlacklistCheck200ResponseCheck
- RunServerTest201Response
- RunServerTestRequest
- RunSpamCheck201Response
- RunSpamCheckRequest
- ScheduleCampaignRequest
- SendingDomain
- SendingDomainDnsRecords
- SendingDomainDnsRecordsNs
- SendingDomainIdentityScore
- SendingDomainIdentityScoreBreakdown
- ServerTest
- ServerTestDnsChecks
- ServerTestMxRecordsInner
- ServerTestSmtpCheck
- SpamCheck
- SpamCheckChecks
- StoreConnection
- StoreProduct
- SubscribeRequest
- Subscriber
- SubscriberList
- SuppressionAuditResponse
- SuppressionAuditResponseEntriesInner
- SuppressionCheckResponse
- SuppressionEntry
- SuppressionListResponse
- SuppressionStatsResponse
- SuppressionStatsResponseByType
- SyncResponse
- TelemetrySummary
- TelemetrySummaryRates
- TelemetrySummaryTopDomainsInner
- TelemetrySummaryTopReasonsInner
- TelemetrySummaryTotals
- TestPolicyRequest
- TestPolicyRequestTestResult
- TrackEventRequest
- TrackEventResponse
- UnsubscribeSubscriber200Response
- UpdatePolicyRequest
- ValidateBatch200Response
- ValidateBatch200ResponseSummary
- ValidateBatchRequest
- ValidateRequest
- ValidationResponse
- ValidationResponsePolicyApplied
- ValidationResponseSuppressionMatch
- ValidationResult
- ValidationResultSuppression
- WebhookEvent
Other SDKs
| Language | Package | Source |
|---|---|---|
| Python | PyPI | GitHub |
| TypeScript | npm | GitHub |
| PHP | Packagist | GitHub |
| Java | GitHub | GitHub |
| Go | pkg.go.dev | GitHub |
| C# / .NET | GitHub | GitHub |
| Ruby | RubyGems | GitHub |
| Kotlin | GitHub | GitHub |
| Rust | crates.io | GitHub |
| Swift | GitHub | GitHub |
| Dart / Flutter | pub.dev | GitHub |
Resources
License
MIT