Giter Club home page Giter Club logo

paperboy's Introduction

Paperboy

A Fast & Modern Email Campaign Engine built in Go.

Website | Documentation | Installation Guide

Version Badge Go Report Card Build Status

Overview

Paperboy is complete email engine that helps you get the most out of your campaigns. It allows you to craft shared templates, and then quickly author and deliver multi-format campaigns.

Paperboy is command-line tool that consumes a source directory as input to render and send email campaigns via any SMTP service. By placing templates, lists, and content in a predefined directory structure, Paperboy will render markup, inline styles, wrap layouts, and more to deliver modern (yet legacy-compatible) newsletters and announcements.

Complete documentation is available at Paperboy Documentation.

Installing binaries

Currently, we provide pre-built binaries for Linux and macOS. Paperboy is a single binary with no external dependencies.

Just run ./paperboy help and you're ready to go.

Installing from source

You can also build and install Paperboy from source. The only requirement is to have a working installation of Go 1.11+. With those in place, the following commands will install Paperboy to $GOPATH/bin:

$ git clone https://github.com/rykov/paperboy.git
$ cd paperboy
$ make install

And please make sure $GOPATH/bin is in your $PATH.

If you receive a go: modules disabled error due to your project being inside of $GOPATH, you will have to force-enable go modules support:

GO111MODULE=on make install

Contributing to Paperboy

We welcome all contribution to Paperboy: documentation, bug reporst, feature ideas, blog posts, promotion, etc

You can start here:

Inspiration and credits

Paperboy aims to bring to email the ease of use and control we love from static site generators. We particularly want to thank Hugo authors for much of the inspiration and a number of our [dependencies][].

The banner photo is by Mathyas Kurmann

paperboy's People

Contributors

rykov avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

paperboy's Issues

alpha 0.3.0 version - panic: runtime error:

When using 0.3.0-alpha.1/Paperboy_0.3.0-alpha.1_Linux_64bit binary pre-compiled i get the following 'panic error' :

jordi@sirio:~/Html/paperboy5$ paperboy send life-coaching pilot
Loading template content/life-coaching.md
Loading recipients lists/pilot.yaml
Sending an email every 1s via 3 workers
[0] Starting worker...
Retrying SMTP dial on error:  EOF
Retrying SMTP dial on error:  EOF
Retrying SMTP dial on error:  EOF
[0] Stopping worker...
panic: runtime error: invalid memory address or nil pointer dereference
[signal SIGSEGV: segmentation violation code=0x1 addr=0x0 pc=0xad84e1]

goroutine 33 [running]:
github.com/rykov/paperboy/mail.(*deliverer).startWorker.func1()
	/home/runner/work/paperboy/paperboy/mail/sender.go:136 +0x121
created by github.com/rykov/paperboy/mail.(*deliverer).startWorker
	/home/runner/work/paperboy/paperboy/mail/sender.go:133 +0x146

Hope it helps !

paperboy init panics at afero.Exists()

After a fresh compile of paperboy, I cd'ed into an empty directory and called

paperboy init

and got a SIGSEV immediately:

~/D/P/test> paperboy init
panic: runtime error: invalid memory address or nil pointer dereference
[signal SIGSEGV: segmentation violation code=0x1 addr=0x8 pc=0x147ec2b]

goroutine 1 [running]:
github.com/rykov/paperboy/mail.(*fs).Stat(0x0, 0xc4202bc640, 0x36, 0x114732f, 0xc42019dca0, 0x2, 0x2)
	<autogenerated>:1 +0x2b
github.com/rykov/paperboy/vendor/github.com/spf13/afero.Exists(0x18cb540, 0x0, 0xc4202bc640, 0x36, 0x36, 0x0, 0xc4202d9680)
	/Users/christoph/go/src/github.com/rykov/paperboy/vendor/github.com/spf13/afero/util.go:313 +0x49
github.com/rykov/paperboy/cmd.glob..func3(0xc4200cb440, 0x1928908, 0x0, 0x0, 0x0, 0x0)
	/Users/christoph/go/src/github.com/rykov/paperboy/cmd/new.go:125 +0x113
github.com/rykov/paperboy/vendor/github.com/spf13/cobra.(*Command).execute(0xc4200cb440, 0x1928908, 0x0, 0x0, 0xc4200cb440, 0x1928908)
	/Users/christoph/go/src/github.com/rykov/paperboy/vendor/github.com/spf13/cobra/command.go:649 +0x456
github.com/rykov/paperboy/vendor/github.com/spf13/cobra.(*Command).ExecuteC(0x19000e0, 0xc42019df40, 0x1900228, 0xc42019df08)
	/Users/christoph/go/src/github.com/rykov/paperboy/vendor/github.com/spf13/cobra/command.go:728 +0x2fe
github.com/rykov/paperboy/vendor/github.com/spf13/cobra.(*Command).Execute(0x19000e0, 0xc42019df08, 0x1)
	/Users/christoph/go/src/github.com/rykov/paperboy/vendor/github.com/spf13/cobra/command.go:687 +0x2b
github.com/rykov/paperboy/cmd.Execute(0x1654640, 0x1b, 0x15dcb9e, 0x3)
	/Users/christoph/go/src/github.com/rykov/paperboy/cmd/root.go:33 +0x1bd
main.main()
	/Users/christoph/go/src/github.com/rykov/paperboy/main.go:28 +0x51
2 ~/D/P/test>

I had a prior version of paperboy around for quite a while but I cannot remember if I ever found the time to test it. So I cannot confirm whether paperboy ever worked on my machine.

Validate sender validation setup

Sender validation is one of significant signals to spam filters. There are a number of standards (DKIM, SPF, DMARK, etc) that are all tedious to set up. This task is to add a validation command that will do a sanity check on the From address.

For this task, we'll take the domain of the From address and check it against the hostname in in the SMTP settings. The command will also allow specifying a sender hostname via CLI flags.

Feature request: follow-up messages

Hi,

amazing project. Really looking forward to what paperboy will be capable of in the future.

My feature request would be to send follow-up messages, also known as drip campaigns.

Is this something that will make it as a feature in paperboy some day?

-Sasa

Campaign preview via browser

This will work by exposing a "localhost" API endpoint from the CLI, and use a hosted single page Javascript app to call the API (with Cross-Origin Resource Sharing) to render the results:

  • GraphQL API in CLI
    • Add "server" command to start server
    • Add "preview" command to start server and open browser preview
    • Expose version API to connection/compatibility check
    • Expose single email rendering API
  • Javascript app
    • Create and configure Ember.js app build
    • Choose reconfigurable client-side API library
    • Add "connect" route to configure API client
    • Add "render" route to show rendered email
    • Add compatibility check to "connect" route
    • Add error handling for "connect" route
    • Add error handling for "render" route
    • Create manual connect flow

Things to consider:

We are calling a "localhost" API that cannot use HTTPS due to lack of a valid certificate. Thus browser security policy will not allow our Javascript preview app to call an HTTP API, unless the app is loaded via HTTP as well. (Secure pages cannot load unsecured resources). This may be ok, or we may need to proxy the whole page through the CLI to secure the remote connection:

Browser <--[http]--> CLI <--[https]--> Hosted JS app

make install errors out: undefined: blackfriday.Run

Today I wanted to test paperboy but I cannot even get past paperboy init.

This is the first of two issues I encountered:

Problem:

make install errors out with the message: undefined: blackfriday.Run.

Repro steps:

Follow the installation steps: git clone, cd, make install:

~/g/s/g/rykov> git clone https://github.com/rykov/paperboy                                                                                        16:28:05
Cloning into 'paperboy'...
remote: Counting objects: 333, done.
remote: Total 333 (delta 0), reused 0 (delta 0), pack-reused 333
Receiving objects: 100% (333/333), 84.68 KiB | 285.00 KiB/s, done.
Resolving deltas: 100% (192/192), done.
 ~/g/s/g/rykov> cd paperboy/                                                                                                                          16:28:20
 ~/g/s/g/r/paperboy (master โœ”)> ls                                                                                                                    16:28:24
Makefile    Melody.lock Melody.toml README.md   cmd         mail        main.go     parser      server
 ~/g/s/g/r/paperboy (master โœ”)> make install                                                                                                          16:28:25
go install -ldflags "-X 'main.version="0.0.0" (2018-01-29 15:28:29)'" -v .
github.com/rykov/paperboy/parser
github.com/rykov/paperboy/mail
# github.com/rykov/paperboy/mail
mail/campaign.go:230:12: undefined: blackfriday.Run
make: *** [install] Error 2

Workaround:

call

melody u

and now make install runs without errors.

Loading template error while tying to '$ paperboy send .. ' ?

f3n1x@urano:~/paperboy$ tree
.
โ”œโ”€โ”€ content/
โ”‚ย ย  โ”œโ”€โ”€ campaign0.md
โ”‚ย ย  โ””โ”€โ”€ life-coaching.md
โ”œโ”€โ”€ layouts/
โ”‚ย ย  โ”œโ”€โ”€ _default.css
โ”‚ย ย  โ”œโ”€โ”€ _default.html
โ”‚ย ย  โ””โ”€โ”€ _default.text
โ”œโ”€โ”€ lists/
โ”‚ย ย  โ””โ”€โ”€ pilot.yaml
โ”œโ”€โ”€ themes/
โ”œโ”€โ”€ config.toml
โ””โ”€โ”€ README.org

4 directories, 8 files
f3n1x@urano:~/paperboy$ paperboy send piloto life-coaching

Leads to :

Loading template 
Error: open : no such file or directory

What am i missing ?

Thanks, thanks, thanks

Add "Port" Configuration in SMTP

By default paperboy uses port 25.

Some mail provider uses port 465 / 2525 for their smtp servers.

For example:

[smtp]
     url = "smtp://smtp.mailtrap.io"
     port = 2525

Rendering campaigns for publishing to web

Some newsletters have a "Read this e-mail on the Web" link, and some newsletters like to publish issue archive online. Let's design this behavior for Paperboy ...

Error: dial tcp :465: getsockopt: connection refused

I am getting the following error while trying to send the email.

Error: dial tcp :465: getsockopt: connection refused

how to set a custom port?

I already tried like following

[smtp]
  url = "smtp.socketlabs.com"
  port = "25"

and

[smtp]
  url = "smtp.socketlabs.com:25"

i am using MacOS.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.