BFO Publisher Mail Service
This page briefly describes the demonstration email responder running on publisher.bfo.com.
- What is BFO Publisher?
- It is an HTML+CSS (really, any XML+CSS) layout engine, to convert HTML or XML to PDF. BFO have been working on it for a very long time, and version 1.0 was released in late 2022.
- What is the BFO Publisher Mail Service?
-
It's an email auto-responder.
To test the kind of things our clients might want to do, we've written a very
simple daemon in NodeJS which receives emails for
pdfa3@publisher.bfo.com or
pdfa4@publisher.bfo.com
, forwards them to a
Web Service for conversion to PDF and sends the response back to
the sender.
It's partly to raise awareness of the product and partly to get us as much test data as we can - HTML email tends to be ugly HTML, which is great for testing. The service is automated so we won't read the emails except to diagnose faults. So don't email anything sensitive. - Can I download BFO Publisher or the email responder code?
- BFO Publisher is available at publisher.bfo.com. The mail-server is largely based on the example shown in our blog article, except instead of storing the email it sends it back as a reply.
- You're sending me email and I don't want it
- Sorry. We reply to email we get at the above addresses, so if this is happening someone is spoofing your email address - we always check SPF, DKIM and DMARC before replying. Email us at support@bfo.com, forwarding the reply we sent you and we'll permanently block your address.
- You're not sending me email and I want you to
- Sorry. Either we've emailed you in the previous four hours (we limit the emails we send to prevent abuse), the email reply has been blocked by your server for some reason or - however improbably - something has gone wrong at our end. Email us at support@bfo.com with details of the email you were expecting a reply to and we'll look into it.
- How does this relate to EA-PDF?
-
EA-PDF is a new standard for email archiving in PDF, first published in early 2025. BFO Publisher can process emails in almost any way you can imagine, but for this demo we've configured it to return replies matching the PDF/mail-1s specification defined as part of EA-PDF.
- Why PDF/A-3? Why PDF/A-4? Why not PDF/UA?
-
PDF/A-3a lets us put tags in the PDF and store arbitrary attachments. PDF/A-4f lets us store attachments too - there's no general "tagged" version of this, but we're tagging it anyway because any tags are better than no tags. We're not targetting PDF/A-1 because it's an antique, or PDF/A-2 because it won't let us store arbitrary attachments.
We're not targetting PDF/UA because it's strict: we have no control over the HTML we're receiving, and if the email contained tables without headers, or images without alt-text, PDF/UA would require us to fail.
- The digital signature on your reply is invalid
- The signature is technically valid, but the identity is untrusted because it's self-signed. This is just a demonstration service at this point, and the signature has no legal weight (it's not timestamped for the same reason).
- What's up with the metadata?
- The metadata is exactly as described in EA-PDF 1.0 - yes, it's quite verbose.
- What's up with the attachments?
-
EA-PDF 1.0 requires the original RFC2822 message is attached for
PDF/mail-1s
, so that's what we're doing - it's attached asmessage.eml
. Other profiles of PDF/mail don't do this, but PDF/mail-1s is the most useful profile so it's the one we're demonstrating here. - Is this service a long term thing?
-
That's the plan, yes. We anticipate keeping a free, rate-limited service much like the one running now on these email addresses for the forseeable future. We'll stamp our stamp on the PDF as part of that deal. Of course with a licensed version customers can do this too, or something similar. Publisher runs as a web-service; it's trivial to integrate with any workflow and easy cloud or docker deployment means adding capacity is trivial.
- Any more documentation?
- https://publisher.bfo.com/live/help is the userguide - the web-service we're using to do this is documented in this section. But most useful will be the blog article explaining the process.
Updated 2025-18-08