{"id":458,"date":"2026-10-02T01:30:31","date_gmt":"2026-10-02T07:00:31","guid":{"rendered":"https:\/\/photonconsole.com\/blog\/?p=458"},"modified":"2026-10-02T07:48:51","modified_gmt":"2026-10-02T13:18:51","slug":"sending-email-from-google-cloud-port-restrictions-and-working-options","status":"publish","type":"post","link":"https:\/\/photonconsole.com\/blog\/sending-email-from-google-cloud-port-restrictions-and-working-options\/","title":{"rendered":"Sending Email from Google Cloud: Port Restrictions and Working Options"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">You move an application to Compute Engine, and email stops. The connection on port 25 hangs and times out. You add an egress firewall rule allowing TCP 25, confirm it is active, and nothing changes.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The rule is being ignored. Google Cloud blocks outbound port 25 across its network, the block sits above your VPC firewall, and \u2014 unlike AWS \u2014 there is no request form, no support ticket and no appeal. It is permanent.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">That permanence is actually useful information, because it removes an option that would otherwise waste days. This guide covers how to confirm the block, which Google Cloud services it affects, and the routes that do work.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Quick Answer: Can You Send Email From Google Cloud?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Yes, but never on port 25. Google Cloud permanently blocks outbound traffic on that port and does not lift the restriction for any customer.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Use port 587 or 2525 with an authenticated relay instead:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Host:  smtp.photonrelay.com\nPort:  587          # or 2525 if 587 is restricted on your network\nUser:  your_project_api_user\nPass:  your_secret_api_key<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">This works on Compute Engine, GKE, Cloud Run and Cloud Functions without any request to Google. An authenticated relay such as <a href=\"https:\/\/www.photonconsole.com\/\">PhotonConsole<\/a> accepts connections on the ports Google leaves open.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Confirm the Block Before Changing Anything<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Run these from the Compute Engine VM itself, not from your local machine.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># Port 25 \u2014 expect this to hang, then time out\nnc -zvw5 smtp.photonrelay.com 25\n\n# Port 587 \u2014 expect an immediate connection\nnc -zvw5 smtp.photonrelay.com 587\n\n# Port 2525 \u2014 fallback, should also connect\nnc -zvw5 smtp.photonrelay.com 2525<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">A timeout on 25 with a successful connection on 587 confirms the block. The distinction matters: a refused connection suggests a firewall rule, while a silent hang followed by a timeout means traffic is being dropped upstream of your configuration.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Once 587 connects, confirm TLS negotiates too:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>openssl s_client -starttls smtp -connect smtp.photonrelay.com:587 -crlf<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Common Mistake<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Creating a VPC egress firewall rule that allows TCP 25 and assuming the problem is solved. The rule will save successfully and show as active in the console, because the rule itself is valid. Google&#8217;s block is applied at the network level above your VPC, so the traffic is dropped regardless of what your firewall permits. A rule that looks correct and changes nothing is the expected result, not a sign of misconfiguration.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Quick Fix<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Confirming the Google Cloud Port 25 Block<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Test from the VM, never from a local machine<\/li>\n\n\n\n<li>Timeout on 25 plus a connection on 587 confirms the block<\/li>\n\n\n\n<li>Delete any egress rule you added for TCP 25 \u2014 it does nothing<\/li>\n\n\n\n<li>Check your application config does not hardcode port 25<\/li>\n\n\n\n<li>Do not open a support case asking for removal; there is no removal process<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Why Google Does Not Lift It<\/h2>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><img fetchpriority=\"high\" decoding=\"async\" width=\"1024\" height=\"512\" src=\"https:\/\/photonconsole.com\/blog\/wp-content\/uploads\/2026\/10\/Firewall-Port-Blocking-Infographic-1024x512.png\" alt=\"Diagram showing Google Cloud permanently blocking outbound port 25 above the VPC while ports 587 and 2525 reach an SMTP relay\" class=\"wp-image-460\" style=\"aspect-ratio:1.7777777777777777;width:1200px;height:auto\" srcset=\"https:\/\/photonconsole.com\/blog\/wp-content\/uploads\/2026\/10\/Firewall-Port-Blocking-Infographic-1024x512.png 1024w, https:\/\/photonconsole.com\/blog\/wp-content\/uploads\/2026\/10\/Firewall-Port-Blocking-Infographic-300x150.png 300w, https:\/\/photonconsole.com\/blog\/wp-content\/uploads\/2026\/10\/Firewall-Port-Blocking-Infographic-768x384.png 768w, https:\/\/photonconsole.com\/blog\/wp-content\/uploads\/2026\/10\/Firewall-Port-Blocking-Infographic-1536x768.png 1536w, https:\/\/photonconsole.com\/blog\/wp-content\/uploads\/2026\/10\/Firewall-Port-Blocking-Infographic.png 1774w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\">The block sits above your VPC, so firewall rules cannot reach it \u2014 and there is no removal process.<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Port 25 carries mail between mail servers and requires no authentication by design. That makes any machine reachable on it a potential spam source, and cloud instances are cheap and quick to create at scale.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">AWS throttles port 25 by default but will consider removal requests for legitimate use. <a href=\"https:\/\/cloud.google.com\/compute\/docs\" target=\"_blank\" rel=\"noopener\">Google Cloud<\/a> takes the stricter position and blocks it outright, with no exception process. If you have arrived here from an AWS background, our guide to the <a href=\"https:\/\/photonconsole.com\/blog\/aws-ec2-port-25-blocked\/\">AWS EC2 port 25 throttle<\/a> covers how the two differ.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The practical effect is that the decision is simpler on Google Cloud. There is no trade-off to weigh between waiting for approval and moving on \u2014 only one path exists.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Which Ports Work<\/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 Google Cloud<\/th><\/tr><\/thead><tbody><tr><td>25<\/td><td>Server-to-server mail relay<\/td><td>Permanently blocked<\/td><\/tr><tr><td>587<\/td><td>Authenticated message 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 submission 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 handing mail to a server they hold credentials for. An application is a client rather than a mail server, so 587 is the correct port even where 25 is available.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">How Each Google Cloud Service Behaves<\/h2>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><img decoding=\"async\" width=\"1024\" height=\"512\" src=\"https:\/\/photonconsole.com\/blog\/wp-content\/uploads\/2026\/10\/Every-Service-Same-Block-1024x512.png\" alt=\"Matrix showing port 25 blocked across Compute Engine, GKE, Cloud Run, Cloud Functions and App Engine with the recommended approach for each\" class=\"wp-image-461\" style=\"aspect-ratio:1.7777777777777777;width:1200px;height:auto\" srcset=\"https:\/\/photonconsole.com\/blog\/wp-content\/uploads\/2026\/10\/Every-Service-Same-Block-1024x512.png 1024w, https:\/\/photonconsole.com\/blog\/wp-content\/uploads\/2026\/10\/Every-Service-Same-Block-300x150.png 300w, https:\/\/photonconsole.com\/blog\/wp-content\/uploads\/2026\/10\/Every-Service-Same-Block-768x384.png 768w, https:\/\/photonconsole.com\/blog\/wp-content\/uploads\/2026\/10\/Every-Service-Same-Block-1536x768.png 1536w, https:\/\/photonconsole.com\/blog\/wp-content\/uploads\/2026\/10\/Every-Service-Same-Block.png 1774w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\">Every Google Cloud compute service is subject to the block. Only the recommended workaround differs.<\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Service<\/th><th>Port 25<\/th><th>Recommended approach<\/th><\/tr><\/thead><tbody><tr><td>Compute Engine<\/td><td>Blocked<\/td><td>SMTP relay on 587 or 2525<\/td><\/tr><tr><td>GKE<\/td><td>Blocked<\/td><td>SMTP relay, credentials via Secrets<\/td><\/tr><tr><td>Cloud Run<\/td><td>Blocked<\/td><td>SMTP relay with short timeouts<\/td><\/tr><tr><td>Cloud Functions<\/td><td>Blocked<\/td><td>SMTP relay, or an HTTP email API<\/td><\/tr><tr><td>App Engine standard<\/td><td>Blocked<\/td><td>HTTP email API in restricted runtimes<\/td><\/tr><tr><td>App Engine flexible<\/td><td>Blocked<\/td><td>SMTP relay on 587 or 2525<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Note<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Some managed runtimes restrict outbound socket access more tightly than Compute Engine does, so even port 587 may be unavailable. If an SMTP connection fails on every port from a serverless runtime, the environment is likely blocking raw sockets rather than that specific port. An HTTP email API works there because it travels over an ordinary HTTPS request.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Configuring Your Application<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The change is usually the host and the port. No application logic needs rewriting.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Node.js<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>const transporter = nodemailer.createTransport({\n  host: 'smtp.photonrelay.com',\n  port: 587,        \/\/ never 25 on Google Cloud\n  secure: false,    \/\/ STARTTLS on 587\n  auth: {\n    user: process.env.SMTP_USER,\n    pass: process.env.SMTP_PASS\n  },\n  connectionTimeout: 8000,\n  socketTimeout: 8000\n});<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Our <a href=\"https:\/\/photonconsole.com\/blog\/how-to-send-emails-in-node-js-with-nodemailer-a-production-setup-guide\/\">Nodemailer production guide<\/a> covers pooling, retries and error handling in depth.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Python<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>import smtplib\n\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 guide to <a href=\"https:\/\/photonconsole.com\/blog\/sending-email-in-python-smtplib-vs-an-email-api-with-working-code\/\">sending email in Python<\/a> covers the wider setup.<\/p>\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 VM already runs Postfix, point it at the relay rather than delivering directly.<\/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<\/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<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Every local process that sends through <code>sendmail<\/code> keeps working, with PhotonConsole handling delivery.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Serverless Considerations<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Cloud Run and Cloud Functions behave differently from a long-running VM, and three things matter.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Connection pooling gives little benefit.<\/strong> The container may be destroyed after the request, so a pooled connection has nothing to reuse it. Disable pooling and use short-lived connections.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Timeouts must fit inside the platform limit.<\/strong> Request timeouts vary by service and configuration, so check <a href=\"https:\/\/cloud.google.com\/run\/docs\" target=\"_blank\" rel=\"noopener\">the current limits<\/a> for your setup and keep SMTP timeouts comfortably below them. Being killed mid-handshake produces a platform error rather than a mail error, which is misleading when debugging.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Cold starts add latency.<\/strong> A cold container paying the full TCP and TLS handshake cost can take several seconds before the message is even accepted. For time-critical mail such as one-time codes, that latency is worth measuring.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Quick Fix<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Cloud Run or Cloud Functions Cannot Connect<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Confirm the port is 587 or 2525, never 25<\/li>\n\n\n\n<li>Lower SMTP timeouts below the service request timeout<\/li>\n\n\n\n<li>Disable connection pooling \u2014 it does not help in a short-lived container<\/li>\n\n\n\n<li>Check environment variables are set on the deployed revision, not only locally<\/li>\n\n\n\n<li>If every port fails, the runtime may block raw sockets entirely \u2014 use an HTTP email API<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">What About the Google Workspace SMTP Relay?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Google Workspace offers an SMTP relay service for customers on a paid plan. It can work for internal or low-volume mail, but it carries conditions worth understanding before relying on it.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">It requires an active Workspace subscription, applies its own sending limits, and ties your application&#8217;s email to a mailbox product rather than a sending platform. You also get limited delivery logging and no bounce webhooks, so diagnosing a delivery problem means working without the data you would normally use.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">For application mail \u2014 password resets, receipts, notifications \u2014 a dedicated relay is the better fit. Our analysis of <a href=\"https:\/\/photonconsole.com\/blog\/free-smtp-servers\/\">free SMTP servers<\/a> covers where options like this stop being practical.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Publish Your DNS Records<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Changing the port gets mail out of Google Cloud. Authentication records are what get it into inboxes.<\/p>\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\">Without these, mail leaves successfully and is filtered on arrival, in line with <a href=\"https:\/\/support.google.com\/mail\/answer\/81126\" target=\"_blank\" rel=\"noopener\">Google&#8217;s sender guidelines<\/a>. 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<p class=\"wp-block-paragraph\">DNS changes take from a few minutes to 24-48 hours to propagate depending on your registrar and TTL settings. Check you do not already publish a second SPF record \u2014 two separate TXT records starting with <code>v=spf1<\/code> break authentication entirely.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Pro Tips<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Test from inside Google Cloud.<\/strong> Local testing proves nothing about what a VM or container can reach.<\/li>\n\n\n\n<li><strong>Never hardcode the port.<\/strong> Keep host and port in environment variables so a change does not require a rebuild.<\/li>\n\n\n\n<li><strong>Use Secret Manager for credentials.<\/strong> Mount them as environment variables rather than baking them into an image.<\/li>\n\n\n\n<li><strong>Set explicit SMTP timeouts.<\/strong> Library defaults are often very long, which turns a blocked port into a hung worker.<\/li>\n\n\n\n<li><strong>Do not run your own mail server to avoid a relay fee.<\/strong> On a permanently blocked port 25 it will not work regardless, and reputation management costs far more in engineering time.<\/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 differs<\/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\/smtp-authentication-error\/\">SMTP authentication errors<\/a> once the port is open but login fails<\/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\">Can I request that Google unblock port 25?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">No. Unlike AWS, Google Cloud has no removal process for this restriction. Opening a support case will not change it.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Will a VPC firewall rule allowing port 25 work?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">No. The block is applied above your VPC, so the rule saves and appears active while the traffic is still dropped.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Does the block apply to Cloud Run and Cloud Functions?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Yes. Every Google Cloud compute service is subject to it. Use port 587 or 2525, or an HTTP email API where raw sockets are unavailable.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Can I use Gmail SMTP from a Compute Engine VM?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">For testing only. Google enforces low sending caps on consumer and Workspace mailboxes, throttles automated traffic, and can lock the account, which takes your application&#8217;s email down with it.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Why does port 587 work when 25 does not?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Port 587 is the authenticated submission port. Because every connection requires credentials, it cannot be used anonymously for spam the way port 25 can.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">What if 587 is also blocked on my network?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Use port 2525. It is an unofficial fallback that most relays accept precisely for networks that restrict the standard ports.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Do I still need SPF and DKIM when using a relay?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Yes. The relay delivers the message, but the DNS records prove your domain authorised it. Without them, delivery is far less reliable regardless of which relay you use.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Conclusion<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">A hung connection on port 25 from Google Cloud is not a configuration error, and it is not something a firewall rule can fix. Google blocks the port across its network permanently, and no amount of searching for a removal form will turn up one, because none exists.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The useful consequence is that the decision is already made for you. Move the application to port 587 or 2525, authenticate against a relay, and publish SPF and DKIM for your sending domain. That is the complete fix, and it takes minutes rather than days.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A dedicated <a href=\"https:\/\/www.photonconsole.com\/relay.php\">transactional email solution<\/a> handles the ports, authentication and sending reputation, and works identically across Compute Engine, GKE, Cloud Run and Cloud Functions. <a href=\"https:\/\/www.photonconsole.com\/pricing.php\">Pricing<\/a> starts with 5,000 free emails per month, which is enough to confirm the whole path works 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\/smtp-configuration\/\">SMTP Configuration: Complete Setup Reference<\/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-response-codes-explained\/\">SMTP Response Codes Explained<\/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 move an application to Compute Engine, and email stops. The connection on port 25 hangs and times out. You add an egress firewall rule allowing TCP 25, confirm it is active, and nothing changes. The rule is being ignored. Google Cloud blocks outbound port 25 across its network, the block sits above your VPC [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":459,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[60],"tags":[],"class_list":["post-458","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-email-tools-comparison"],"_links":{"self":[{"href":"https:\/\/photonconsole.com\/blog\/wp-json\/wp\/v2\/posts\/458","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=458"}],"version-history":[{"count":1,"href":"https:\/\/photonconsole.com\/blog\/wp-json\/wp\/v2\/posts\/458\/revisions"}],"predecessor-version":[{"id":462,"href":"https:\/\/photonconsole.com\/blog\/wp-json\/wp\/v2\/posts\/458\/revisions\/462"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/photonconsole.com\/blog\/wp-json\/wp\/v2\/media\/459"}],"wp:attachment":[{"href":"https:\/\/photonconsole.com\/blog\/wp-json\/wp\/v2\/media?parent=458"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/photonconsole.com\/blog\/wp-json\/wp\/v2\/categories?post=458"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/photonconsole.com\/blog\/wp-json\/wp\/v2\/tags?post=458"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}