{"id":463,"date":"2026-10-06T01:30:24","date_gmt":"2026-10-06T07:00:24","guid":{"rendered":"https:\/\/photonconsole.com\/blog\/?p=463"},"modified":"2026-10-06T11:05:33","modified_gmt":"2026-10-06T16:35:33","slug":"sending-email-from-a-digitalocean-or-vps-server","status":"publish","type":"post","link":"https:\/\/photonconsole.com\/blog\/sending-email-from-a-digitalocean-or-vps-server\/","title":{"rendered":"Sending Email from a DigitalOcean or VPS Server"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">You spin up a droplet, install Postfix, and send a test message. Nothing arrives. You open a support ticket, get port 25 unblocked, set up a reverse DNS record, and try again.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">This time the connection works \u2014 and the message bounces with a rejection naming a blocklist you have never heard of.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">That second failure catches people out, because fixing the port feels like fixing the problem. On a VPS there are two separate obstacles: the provider blocking outbound SMTP, and the reputation of the IP address you were assigned. Solving the first does nothing about the second.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Quick Answer: Can You Send Email From a VPS?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Technically yes, practically rarely. Most VPS providers block outbound port 25 on new accounts, and even when unblocked, VPS IP ranges are widely distrusted by receiving mail servers because of their abuse history.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The reliable route is to send through an authenticated relay on port 587 or 2525, which needs no unblock request and arrives on IPs that already have a sending reputation:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Host:  smtp.photonrelay.com\nPort:  587          # or 2525 if 587 is also restricted\nUser:  your_project_api_user\nPass:  your_secret_api_key<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">An authenticated relay such as <a href=\"https:\/\/www.photonconsole.com\/\">PhotonConsole<\/a> handles both problems at once \u2014 the port and the reputation.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Check Both Problems Before You Start<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Most guides only test the port. Test both, from the server itself.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Test 1: Is port 25 blocked?<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code># Port 25 \u2014 likely to hang, then time out\nnc -zvw5 smtp.photonrelay.com 25\n\n# Port 587 \u2014 should connect immediately\nnc -zvw5 smtp.photonrelay.com 587<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">A timeout on 25 with a connection on 587 confirms the provider block.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Test 2: What is your IP&#8217;s reputation?<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code># Find your public IP\ncurl -s ifconfig.me\n\n# Check reverse DNS\ndig -x YOUR_IP +short<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Then look the IP up against the major blocklists. <a href=\"https:\/\/www.spamhaus.org\/\" target=\"_blank\" rel=\"noopener\">Spamhaus<\/a> maintains lists that specifically cover address space considered unsuitable for direct mail sending, and large parts of VPS and cloud ranges sit inside them by policy rather than because of anything you did.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">If the IP is listed before you have sent a single message, that is the second problem, and no port change fixes it.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Common Mistake<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Setting up a reverse DNS record, confirming it resolves correctly, and assuming the IP is now trusted. A valid PTR record is a minimum requirement, not a reputation. Many VPS ranges are included on policy blocklists that cover the entire address block, so a perfectly configured server on a listed IP is still rejected. Check the IP against the blocklists before investing time in mail server configuration.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Quick Fix<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Mail Sends but Bounces With a Blocklist Message<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Read the full bounce message \u2014 it usually names the list and gives a lookup URL<\/li>\n\n\n\n<li>Check whether the listing covers your single IP or the whole range<\/li>\n\n\n\n<li>A range-wide policy listing cannot be delisted by you<\/li>\n\n\n\n<li>Confirm reverse DNS resolves and matches your sending hostname<\/li>\n\n\n\n<li>If the range is listed by policy, switch to a relay rather than appealing<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Why VPS Providers Block Port 25<\/h2>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><img fetchpriority=\"high\" decoding=\"async\" width=\"1024\" height=\"683\" src=\"https:\/\/photonconsole.com\/blog\/wp-content\/uploads\/2026\/10\/Two-Problems-One-Fix_-Photon-Console-1024x683.png\" alt=\"Diagram showing the two separate VPS email problems, the blocked port and the distrusted IP, with a relay solving both\" class=\"wp-image-465\" style=\"aspect-ratio:1.7777777777777777;width:1200px;height:auto\" srcset=\"https:\/\/photonconsole.com\/blog\/wp-content\/uploads\/2026\/10\/Two-Problems-One-Fix_-Photon-Console-1024x683.png 1024w, https:\/\/photonconsole.com\/blog\/wp-content\/uploads\/2026\/10\/Two-Problems-One-Fix_-Photon-Console-300x200.png 300w, https:\/\/photonconsole.com\/blog\/wp-content\/uploads\/2026\/10\/Two-Problems-One-Fix_-Photon-Console-768x512.png 768w, https:\/\/photonconsole.com\/blog\/wp-content\/uploads\/2026\/10\/Two-Problems-One-Fix_-Photon-Console.png 1536w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\">Unblocking the port solves the first problem. The IP reputation problem remains untouched.<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Port 25 carries mail between servers and requires no authentication by design. A VPS costs a few dollars, takes a minute to create, and can be paid for with a stolen card \u2014 which makes it ideal for sending spam at volume.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Providers block the port by default to protect the reputation of their address space. When a range earns a bad reputation, every legitimate customer on it suffers, so the restriction protects other users as much as the provider.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Provider<\/th><th>Port 25 on new accounts<\/th><th>Unblock process<\/th><\/tr><\/thead><tbody><tr><td>DigitalOcean<\/td><td>Commonly blocked<\/td><td>Support request, reviewed case by case<\/td><\/tr><tr><td>Linode<\/td><td>Commonly blocked<\/td><td>Support request after account history<\/td><\/tr><tr><td>Vultr<\/td><td>Commonly blocked<\/td><td>Support request, often declined<\/td><\/tr><tr><td>Hetzner<\/td><td>Often restricted initially<\/td><td>Request after account is established<\/td><\/tr><tr><td>OVH<\/td><td>Varies by product<\/td><td>Panel setting or support request<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Policies change, so confirm the current position with your provider&#8217;s documentation rather than relying on any article. The pattern across all of them is consistent: new accounts are restricted, and unblocking is a review rather than a toggle.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">The Problem That Remains After Unblocking<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Suppose the ticket succeeds and port 25 opens. You still face three things a port change cannot address.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>The range may be listed by policy.<\/strong> Some blocklists cover address space considered unsuitable for direct-to-MX sending, regardless of who holds the IP. You cannot delist an IP from a listing that applies to the whole block.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Your IP may be recycled.<\/strong> VPS addresses are reassigned constantly. The IP handed to your droplet may have been used by a spammer last month, and you inherit whatever reputation came with it \u2014 with no way to choose a different one.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>A new IP has no sending history.<\/strong> Even a genuinely clean address is unknown to receiving providers. Reputation is built through consistent sending over weeks, and until then your mail is treated cautiously, in line with <a href=\"https:\/\/support.google.com\/mail\/answer\/81126\" target=\"_blank\" rel=\"noopener\">Google&#8217;s sender guidelines<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">What Each Fix Actually Solves<\/h2>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><img decoding=\"async\" width=\"1024\" height=\"683\" src=\"https:\/\/photonconsole.com\/blog\/wp-content\/uploads\/2026\/10\/What-Each-Fix-Actually-Solves-1024x683.png\" alt=\"Matrix showing which VPS email fixes address the port block and which address IP reputation, with only a relay covering both\" class=\"wp-image-466\" style=\"aspect-ratio:1.7777777777777777;width:1200px;height:auto\" srcset=\"https:\/\/photonconsole.com\/blog\/wp-content\/uploads\/2026\/10\/What-Each-Fix-Actually-Solves-1024x683.png 1024w, https:\/\/photonconsole.com\/blog\/wp-content\/uploads\/2026\/10\/What-Each-Fix-Actually-Solves-300x200.png 300w, https:\/\/photonconsole.com\/blog\/wp-content\/uploads\/2026\/10\/What-Each-Fix-Actually-Solves-768x512.png 768w, https:\/\/photonconsole.com\/blog\/wp-content\/uploads\/2026\/10\/What-Each-Fix-Actually-Solves.png 1536w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\">Only one row covers both columns, which is why most VPS mail configuration changes nothing.<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">This is the table worth reading twice, because it explains why so much VPS mail configuration produces no improvement.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Action<\/th><th>Fixes the port block<\/th><th>Fixes IP reputation<\/th><\/tr><\/thead><tbody><tr><td>Request port 25 unblock<\/td><td>Yes<\/td><td>No<\/td><\/tr><tr><td>Set a reverse DNS record<\/td><td>No<\/td><td>Partially \u2014 a requirement, not a reputation<\/td><\/tr><tr><td>Publish SPF and DKIM<\/td><td>No<\/td><td>Partially \u2014 proves authorisation, not trust<\/td><\/tr><tr><td>Rebuild the droplet for a new IP<\/td><td>No<\/td><td>No \u2014 the new IP may be worse<\/td><\/tr><tr><td>Send through an authenticated relay<\/td><td>Yes<\/td><td>Yes<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Only the last row addresses both columns. That is the whole argument for using a relay on a VPS, and it is a practical observation rather than a sales one.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">When Self-Hosting Is Still Reasonable<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Running your own mail server on a VPS makes sense in a few situations: internal mail that never leaves your network, a learning exercise, or a service where you control both ends of the delivery.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">For anything user-facing, the ongoing work is substantial. You take on blocklist monitoring, TLS certificate renewal, security patching of a service that is a constant attack target, bounce and complaint processing, and reputation management for an IP you did not choose. A managed <a href=\"https:\/\/www.photonconsole.com\/relay.php\">SMTP relay service<\/a> absorbs all of that, which is why most teams keep the droplet for the application and move only the mail path off it.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Our analysis of <a href=\"https:\/\/photonconsole.com\/blog\/free-smtp-servers\/\">free SMTP servers<\/a> covers where self-managed and free options stop being practical.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Configuring the Relay<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Postfix as a Relay Host<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">If the server already runs Postfix, keep it and point it at the relay. Every local process that uses <code>sendmail<\/code> keeps working, with PhotonConsole handling the outbound delivery.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># \/etc\/postfix\/main.cf\nrelayhost = &#91;smtp.photonrelay.com]:587\nsmtp_sasl_auth_enable = yes\nsmtp_sasl_password_maps = hash:\/etc\/postfix\/sasl_passwd\nsmtp_sasl_security_options = noanonymous\nsmtp_tls_security_level = encrypt\nsmtp_use_tls = yes<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code># \/etc\/postfix\/sasl_passwd\n&#91;smtp.photonrelay.com]:587 your_project_api_user:your_secret_api_key<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo postmap \/etc\/postfix\/sasl_passwd\nsudo chmod 600 \/etc\/postfix\/sasl_passwd*\nsudo systemctl restart postfix\n\n# Send a test\necho \"Test body\" | mail -s \"Relay test\" you@yourdomain.com\n\n# Watch the log\nsudo tail -f \/var\/log\/mail.log<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Application Configuration<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code># Node.js\nconst transporter = nodemailer.createTransport({\n  host: 'smtp.photonrelay.com',\n  port: 587,\n  secure: false,\n  auth: { user: process.env.SMTP_USER, pass: process.env.SMTP_PASS }\n});<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code># Python\nwith smtplib.SMTP(\"smtp.photonrelay.com\", 587, timeout=10) as server:\n    server.starttls()\n    server.login(smtp_user, smtp_pass)\n    server.send_message(msg)<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Our guides to <a href=\"https:\/\/photonconsole.com\/blog\/how-to-send-emails-in-node-js-with-nodemailer-a-production-setup-guide\/\">sending email in Node.js<\/a> and <a href=\"https:\/\/photonconsole.com\/blog\/sending-email-in-python-smtplib-vs-an-email-api-with-working-code\/\">sending email in Python<\/a> cover pooling, timeouts and retries in depth.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Publish Your DNS Records<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>TXT    @                    v=spf1 include:relay.photonconsole.com ~all\nCNAME  photon._domainkey    dkim.photonconsole.com<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Note<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">If you previously published an SPF record authorising your VPS IP directly, remove it when you move to a relay. Two separate TXT records starting with <code>v=spf1<\/code> break authentication entirely, and an SPF record still pointing at an unused server adds nothing. DNS changes take from a few minutes to 24-48 hours to propagate.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Our guide to <a href=\"https:\/\/photonconsole.com\/blog\/spf-dkim-dmarc-explained-simply\/\">SPF, DKIM and DMARC<\/a> explains the records, and the free <a href=\"https:\/\/www.photonconsole.com\/email-deliverability-checker.php\">email deliverability checker<\/a> shows what your domain currently publishes.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Port Reference<\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Port<\/th><th>Purpose<\/th><th>On a typical VPS<\/th><\/tr><\/thead><tbody><tr><td>25<\/td><td>Server-to-server mail relay<\/td><td>Blocked on new accounts<\/td><\/tr><tr><td>587<\/td><td>Authenticated submission<\/td><td>Available<\/td><\/tr><tr><td>465<\/td><td>Submission over implicit SSL<\/td><td>Available<\/td><\/tr><tr><td>2525<\/td><td>Unofficial fallback<\/td><td>Available<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Port 587 is the submission port, <a href=\"https:\/\/datatracker.ietf.org\/doc\/html\/rfc6409\" target=\"_blank\" rel=\"noopener\">defined in RFC 6409<\/a> for authenticated clients. Because every connection requires credentials, it cannot be abused anonymously the way port 25 can \u2014 which is why providers leave it open.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Quick Fix<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Relay Configured but Still Not Sending<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Check <code>\/var\/log\/mail.log<\/code> for the actual SMTP response<\/li>\n\n\n\n<li>Confirm <code>postmap<\/code> was run after editing the password file<\/li>\n\n\n\n<li>Confirm the password file is mode 600 and owned by root<\/li>\n\n\n\n<li>Check for whitespace copied into the credentials<\/li>\n\n\n\n<li>Try port 2525 if 587 also times out on your provider<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Pro Tips<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Check the IP before you build.<\/strong> Look up a new droplet&#8217;s address against the blocklists on day one, before configuring anything.<\/li>\n\n\n\n<li><strong>Never rebuild hoping for a better IP.<\/strong> Assignment is random, and the next one may be worse.<\/li>\n\n\n\n<li><strong>Keep the firewall tight.<\/strong> An open mail server on a VPS becomes an open relay quickly, which gets the IP listed and the account suspended.<\/li>\n\n\n\n<li><strong>Set reverse DNS anyway.<\/strong> It is required by many receivers even when you send through a relay for application mail.<\/li>\n\n\n\n<li><strong>Verify DNS after any change.<\/strong> <a href=\"https:\/\/mxtoolbox.com\/\" target=\"_blank\" rel=\"noopener\">MXToolbox<\/a> checks SPF, DKIM and blocklist status in one lookup.<\/li>\n\n\n\n<li><strong>Score a real send before launch.<\/strong> <a href=\"https:\/\/www.mail-tester.com\/\" target=\"_blank\" rel=\"noopener\">Mail Tester<\/a> flags authentication problems before users encounter them.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Related Issues You May Hit Next<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/photonconsole.com\/blog\/aws-ec2-port-25-blocked\/\">AWS EC2 port 25 blocked<\/a> for how the AWS restriction compares<\/li>\n\n\n\n<li><a href=\"https:\/\/photonconsole.com\/blog\/google-cloud-smtp-port-blocked\/\">Google Cloud SMTP port restrictions<\/a> where the block is permanent<\/li>\n\n\n\n<li><a href=\"https:\/\/photonconsole.com\/blog\/smtp-connection-timeout\/\">SMTP connection timeouts<\/a> when connections hang rather than fail<\/li>\n\n\n\n<li><a href=\"https:\/\/photonconsole.com\/blog\/emails-sent-but-not-delivered\/\">Emails sent but not delivered<\/a> when the server reports success<\/li>\n\n\n\n<li><a href=\"https:\/\/photonconsole.com\/blog\/why-emails-go-to-spam-in-gmail\/\">Emails landing in Gmail spam<\/a> after delivery succeeds<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Frequently Asked Questions<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Will DigitalOcean unblock port 25 for me?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">It is reviewed case by case rather than granted automatically, and newer accounts are less likely to succeed. Policies change, so check the current documentation. Port 587 through a relay needs no request at all.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Why does my mail bounce even after port 25 is open?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Almost always IP reputation. Many VPS ranges sit on policy blocklists covering the whole block, so a correctly configured server on a listed IP is still rejected.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Can I get my VPS IP delisted?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">If the listing is specific to your IP and caused by past abuse, sometimes. If it is a policy listing covering the entire range, no \u2014 that is not something an individual customer can appeal.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Does setting reverse DNS fix deliverability?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">It removes one reason to reject you, but it does not create trust. Treat it as a minimum requirement rather than a solution.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Should I run my own mail server on a VPS?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">For internal or learning use, it is reasonable. For user-facing mail, the blocklist monitoring, patching and reputation work usually costs more in engineering time than a relay does in fees.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Can I keep Postfix and still use a relay?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Yes. Configure Postfix with a <code>relayhost<\/code> and SASL credentials. Local processes keep sending through <code>sendmail<\/code> exactly as before.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">What if port 587 is blocked too?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Use port 2525. It is an unofficial fallback that most relays accept for networks restricting the standard ports, and PhotonConsole accepts authenticated submission on it alongside 587 and 465.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Conclusion<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">VPS email fails for two reasons that look like one. The provider blocks port 25 to prevent abuse, and the address space itself carries a reputation problem that predates your account.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">An unblock request, a reverse DNS record and correct SPF and DKIM all help, but they only address the first problem and part of the second. The IP remains unknown or pre-listed, and no amount of server configuration changes that.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Sending through an authenticated relay solves both at once: it uses a port that was never blocked, and it delivers from IPs that receiving providers already trust. A dedicated <a href=\"https:\/\/www.photonconsole.com\/relay.php\">transactional email solution<\/a> handles the ports, authentication and reputation, and keeps working if you later move the application to a different provider. <a href=\"https:\/\/www.photonconsole.com\/pricing.php\">Pricing<\/a> starts with 5,000 free emails per month, enough to confirm the whole path before spending anything.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Read More<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/www.photonconsole.com\/email-deliverability-checker.php\">Free Email Deliverability Checker<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/photonconsole.com\/blog\/aws-ec2-port-25-blocked\/\">AWS EC2 Port 25 Blocked: Why and How to Fix It<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/photonconsole.com\/blog\/google-cloud-smtp-port-blocked\/\">Sending Email from Google Cloud<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/photonconsole.com\/blog\/spf-dkim-dmarc-explained-simply\/\">SPF, DKIM and DMARC Explained Simply<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/photonconsole.com\/blog\/smtp-configuration\/\">SMTP Configuration: Complete Setup Reference<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/www.photonconsole.com\/relay.php\">PhotonRelay: SMTP Relay Service<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/www.photonconsole.com\/pricing.php\">PhotonConsole Pricing<\/a><\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>You spin up a droplet, install Postfix, and send a test message. Nothing arrives. You open a support ticket, get port 25 unblocked, set up a reverse DNS record, and try again. This time the connection works \u2014 and the message bounces with a rejection naming a blocklist you have never heard of. That second [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":464,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3],"tags":[547,548],"class_list":["post-463","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-email-deliverability","tag-got-port-25-unblocked-on-your-droplet-and-mail-still-bounces-a-vps-has-two-email-problems","tag-not-one-here-is-what-each-fix-actually-solves"],"_links":{"self":[{"href":"https:\/\/photonconsole.com\/blog\/wp-json\/wp\/v2\/posts\/463","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/photonconsole.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/photonconsole.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/photonconsole.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/photonconsole.com\/blog\/wp-json\/wp\/v2\/comments?post=463"}],"version-history":[{"count":1,"href":"https:\/\/photonconsole.com\/blog\/wp-json\/wp\/v2\/posts\/463\/revisions"}],"predecessor-version":[{"id":467,"href":"https:\/\/photonconsole.com\/blog\/wp-json\/wp\/v2\/posts\/463\/revisions\/467"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/photonconsole.com\/blog\/wp-json\/wp\/v2\/media\/464"}],"wp:attachment":[{"href":"https:\/\/photonconsole.com\/blog\/wp-json\/wp\/v2\/media?parent=463"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/photonconsole.com\/blog\/wp-json\/wp\/v2\/categories?post=463"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/photonconsole.com\/blog\/wp-json\/wp\/v2\/tags?post=463"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}