Problem with sending a form via email button?

Is anyone aware of a problem with the Send Contact Form via Email button?

• I had a form I had used on another page, and I duplicated it and simplified it.
• I published the site and tested the form, the required fields and numbers and email fields are warning me of errors. When I fill out the form correctly, I’m able to submit it and I’m routed to the Thank You page.
• But the mail never shows up. And I tried a couple more times unsuccessfully. I checked the spam filter, but the message is not there.
• So I tried the form that used to work, and it’s no longer sending the form to me.
• I opened an older site that I haven’t edited for … not sure how long. I filled out a form on its Contact Us page, and the message appeared in my mailbox correctly.
• As a test, I republished the older site without making any changes. I tested the Contact Us page, and the message did not appear in my mailbox.

Maybe there’s another explanation, but it seems to me that this button is not working for newly published forms.

I’ve attached a screenshot of the button parameters. I don’t do this often, so I won’t be surprised if I’m doing something wrong.

And here is a screenshot of the button on the other site that used to work and stopped when I republished.

I just don’t see anything suspicious that jumps out at me. Did I overlook some announcement about changes to how this feature works?

Hi @chuckbo,

email delivery on the internet is tricky, and constantly evolving in attempts to reduce spam. This can result in breakage even if you don’t change anything in Sparkle.

One spam prevention technique that has been adopted progressively over the past years is SPF. SPF, Sender Policy Framework, is a way of indicating which servers are allowed to send email for a domain.

The way this works is a domain has a “TXT” record where with a somewhat arcane syntax the servers are indicated. Your from email address is, and this is a query of the SPF record for it:

% dig txt


;; ANSWER SECTION:		86400	IN	TXT	"v=spf1 -all"		86400	IN	TXT	"wgyf8z8cgvm2qmxpnbnldrcltvk4xqfn"


The relevant section is "v=spf1 -all", where no servers are listed. A more interesting example is’s record: "v=spf1 ~all", which includes mallet (our newsletter provider), amazonses (for transactional email) and messagingengine (the servers for Fastmail, our email provider). It doesn’t include our web server because we use custom SMTP straight to fast mail.

Note that in most cases the noreply part of the email address isn’t checked by anybody (though some outgoing servers do check that it’s a valid mailbox).

The SPF record is used on the receiving end, so in your case the mail server for

% dig mx


;; ANSWER SECTION:		3600	IN	MX	10		3600	IN	MX	30		3600	IN	MX	20

The only first hand information I have is from a few years ago when the ratio of spam to ham was about 10:1, so mail servers (or spam filtering dedicated appliances such as Ironports or Barracudas) can’t afford to store all the spam for review, they’ll simply delete what is deemed to be clearly spam. That’s why you don’t find it in your spam folder.

So to summarize all this, the likely reason your contact form email has stopped coming through is have implemented SPF checking, and has no email servers listed, so no email from should be sent by anybody, and is deleting it.

The unfortunate gotcha in this is was and still is the default in Sparkle, and we’ll be changing this.

The solution is generally to use an address of the domain where the website resides, because most of the time there’s no SPF record set. But if there is an SPF record, it needs to be amended to include the web server’s address.

If this contact form is hosted on, it does have an SPF record, and it includes the web server itself.

The web server address is

% host has address

And the SPF record includes it:

% dig txt


;; ANSWER SECTION:		14400	IN	TXT	"v=spf1 +a +mx +ip4: +ip4: +ip4: ~all"		14400	IN	TXT	"MS=ms65142870"


So you should be able to use as the from address safely.

Similarly for

Thank you, Duncan; that solved the issue. That’s one of the tests I should’ve thought of running.