a801352c7f
no issue - adjusted mega's post serializer to get full email contents - fetch `mobiledoc` from the API rather than the pre-rendered `html` and `plaintext` - re-generate `html` using the mobiledoc renderer with an "email" target so that the email-only card content is included - re-generate `plaintext` from the newly generated email html - added replacement handling to mega's `getEmailData` function - find all of our `%%{replacement "fallback"}%%` instances in the html template and push them into a replacements array with the respective property on the member instance and desired fallback - transform the replacement for Mailgun compatibility. Mailgun uses `%recipient.variable_name%` for its template variables so we need to replace our custom replacement string with the compatible version. Our replacements system allows for the same replacement (`{subscriber_name}`) to be used multiple times and have different fallbacks, Mailgun doesn't support fallbacks so for each replacement we also need an indexed `variable_name` part so that we can put our fallbacks in the correct place - perform the same Mailgun template transformation for the plaintext version except we re-use the replacements array to avoid bloating the API request to Mailgun with duplicate template variables for every recipient - swapped `reduce` for a plain loop for easier readability |
||
---|---|---|
.github | ||
content | ||
core | ||
test | ||
.editorconfig | ||
.eslintignore | ||
.eslintrc.json | ||
.gitattributes | ||
.gitignore | ||
.gitmodules | ||
.npmignore | ||
config.development.json | ||
Gruntfile.js | ||
index.js | ||
LICENSE | ||
MigratorConfig.js | ||
package.json | ||
PRIVACY.md | ||
README.md | ||
renovate.json | ||
SECURITY.md | ||
yarn.lock |
Ghost.org |
Features |
Showcase |
Forum |
Documentation |
Contributing |
Twitter
The easiest way to deploy Ghost is with our official Ghost(Pro) managed service. You can have a fresh instance up and running in a couple of clicks with a worldwide CDN, backups, security and maintenance all done for you.
Not only will it save you hours of maintenance per month, but all revenue goes to the Ghost Foundation, which funds the maintenance and further development of Ghost itself. So you’ll be supporting open source software and getting a great service! Alternatively if you'd like to support us, we're very grateful to all our backers on Open Collective ❤️
If you prefer to run on your own infrastructure, we also provide 1-off installs and managed support and maintenance plans via Ghost(Valet) - which can save a substantial amount of developer time and resources.
Quickstart Install
If you want to run your own instance of Ghost, in most cases the best way is to use our CLI tool
$ npm install ghost-cli -g
Then, if installing locally add the local
flag to get up and running in under a minute - Local install docs
$ ghost install local
or on a server run the full install, including automatic SSL setup using LetsEncrypt - Production install docs
$ ghost install
Check out our official documentation for more information about our recommended hosting stack & properly upgrading Ghost, plus everything you need to develop your own Ghost themes or work with our API.
Getting Help
You can find answers to a huge variety of questions, along with a large community of helpful developers over on the Ghost forum - replies are generally very quick. Ghost(Pro) customers also have access to 24/7 email support.
To stay up to date with all the latest news and product updates, make sure you subscribe to our blog — or you can always follow us on Twitter, if you prefer your updates bite-sized and facetious. 🎷🐢
Contributors & Advanced Developers
For anyone wishing to contribute to Ghost or to hack/customise core files we recommend following our full development setup guides: General Contributor Guide | Developer Setup Instructions | Admin Client development guide
Copyright & License
Copyright (c) 2013-2020 Ghost Foundation - Released under the MIT license. Ghost and the Ghost Logo are trademarks of Ghost Foundation Ltd. Please see our trademark policy for info on acceptable usage.