Giter VIP home page Giter VIP logo

mailtrain's People

Contributors

addy90 avatar alexeychikk avatar andresmrm avatar andris9 avatar bbraganca avatar bures avatar charlo270398 avatar elitzer2 avatar gerhardsletten avatar gsiou avatar guillaumeremycsi avatar j-mir-prazak avatar jcacqua avatar jonathanmmm avatar larrabee avatar loscsol avatar marcelwaldvogel avatar martialblog avatar morremeyer avatar nebulade avatar notz avatar pablocastellano avatar programster avatar sedrubal avatar taye avatar theyough avatar tiangolo avatar tstrg avatar witzig avatar wschopohl 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  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

mailtrain's Issues

Connect to MAMP MySQL?

Looks interesting. I'm curious about comparing it to Sendy. I'm trying to run it on my Mac but it won't connect to the MySQL which MAMP runs. Any suggestions?
Thank you!

Segment Rule Issue: Any (rule match) does not appear to work

We have created a segment with the below criteria.

Rule Match: Any
Rule: Signup Date, Start: 240 days before today
Rule: Latest Open, Start: 240 days before today

The count that shows for the segment is all records for the list instead of the ones that match the above criteria. I've double checked MySql data using the below query to ensure data exists properly and both queries resulted in the correct count.

SELECT COUNT(*)
FROM mailtrain.subscription__1
WHERE status = 1
    AND (
        (created > DATE_ADD(NOW(), INTERVAL -240 DAY))
        OR (latest_open > DATE_ADD(NOW(), INTERVAL -240 DAY))
        );

SELECT COUNT(*)
FROM mailtrain.subscription__1
WHERE status = 1
    AND (
        (status_change > DATE_ADD(NOW(), INTERVAL -240 DAY))
        OR (latest_open > DATE_ADD(NOW(), INTERVAL -240 DAY))
        );

There appears to still be a logic bug with the Rule Match 'Any' option. In fact, even when removing the rules and just having one rule the count still shows the entire subscribed list count.

Milestone v1.4

  • RSS campaigns
  • Store timezone information with subscriptions

drip campains

Would be a wondelful addition to this great software :-).
Installing was a breeze BTW.

Subscription options

One thing that other services do not provide at all currently and that I’d love to offer:

During sign-up process (or in profile edit mode), a subscriber can choose a few options to receive a newsletter (the following are only a few ideas):

  • [Weekly] Short version
  • [Weekly] Long version
  • [Montly] Concatenated version
  • Receive on Fridays
  • Receive on Mondays

Hope you get the idea of what I’m trying to achieve here.
Do you have any idea if that’s already possible with mailtrain or if it would be possible to build that missing features for it without much effort?

Cheers,
— Anselm

Subdirectory installation + nginx as reverse proxy doesn't work well

Hi,

I was trying to install & run Mailtrain off a subdirectory but it seems to run into a problem, particularly when trying to login.

The issue is that Mailtrain is installed on http://example.com/campaigns, clicking on login changes the URL to http://example.com/users/login instead of http://example.com/campaigns/users/login

this is the nginx config file I used

server {
    listen 80;
    listen [::]:80;

    server_name example.com;
    access_log /var/log/nginx/mailtrain.log;
    error /var/log/nginx/mailtrain_err.log;
    location /campaigns {
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header HOST $http_host;
        proxy_set_header X-NginX-Proxy true;

        proxy_pass http://127.0.0.1:3000;
        proxy_redirect off;
    }
}

I've also tried a variant of

rewrite ^/campaigns/?(.*) /campaigns/$1 break;

Both cases the redirect goes to http://example.com/users/login and results in a 404

UNINSTALL

Please can you tell somewhere how to completely uninstall mailtrain from Ubuntu (14.04)?

I installed it with the "### Automatic install (Ubuntu 14.04)" method, then i tried to access to "http://localhost:3000/", but receiving "ERR_CONNECTION_REFUSED" from the browser.

Probably i missed to do something, if you can help me i'm very happy, thx :).
In any case i would like to be able to clean my os.

Thank you for the support and thank you VERY MUCH for the community work.

Critical: Email Click Tracking Bug

We found a serious issue with links in the email. We're trying to figure out how to consistently reproduce it.

The behavior is the links in the email go back to the mailtrain web site to perform click tracking but enter an infinite redirect loop resulting in the link ending with undefined in the url. The browser terminates the infinite redirect to prevent it from crashing.

Link below clicked in the email.

http://mailtrain.myhost.com/links/Syww0AGE/ry6zFeWx/BJPvxRNN/S1woZRVN

The below is the link it lands on when the browser kills the infinite redirect loop.

http://mailtrain.myhost.com/links/Syww0AGE/SJ9cNXmN/BJ-4jNX4/undefined

It does not happen to all emails nor to the same user.

The email template was created using the campaign template editor. We have the WYSIWYG turned OFF.

I've included the below snippet from the logs where the redirect appears.

info HTTP GET /links/SyY7yDyV/Hyr-re1e/f45f8a7d79 200 3.092 ms - 42
info HTTP GET /links/Syww0AGE/ry6zFeWx/SyYQFxWe/rkWwGRVE 302 12.998 ms - 478
info HTTP GET /links/SyY7yDyV/Hyr-re1e/0c609cd3c1 200 2.778 ms - 42
info HTTP GET /links/Syww0AGE/ry6zFeWx/SyYQFxWe/rkWwGRVE 302 10.902 ms - 478
info HTTP GET /links/Syww0AGE/ry6zFeWx/SyYQFxWe/BJlTbRN4 302 13.712 ms - 62
info HTTP GET /links/Syww0AGE/ry6zFeWx/SyYQFxWe/undefined 302 11.572 ms - 62
info HTTP GET /links/Syww0AGE/ry6zFeWx/SyYQFxWe/undefined 302 12.885 ms - 62
info HTTP GET /links/Syww0AGE/ry6zFeWx/SyYQFxWe/undefined 302 11.354 ms - 62
info HTTP GET /links/Syww0AGE/ry6zFeWx/SyYQFxWe/undefined 302 11.811 ms - 62
info HTTP GET /links/Syww0AGE/ry6zFeWx/SyYQFxWe/undefined 302 10.533 ms - 62
info HTTP GET /links/Syww0AGE/ry6zFeWx/SyYQFxWe/undefined 302 14.949 ms - 62
info HTTP GET /links/Syww0AGE/ry6zFeWx/SyYQFxWe/undefined 302 13.418 ms - 62
info HTTP GET /links/Syww0AGE/ry6zFeWx/SyYQFxWe/undefined 302 12.250 ms - 62
info HTTP GET /links/Syww0AGE/ry6zFeWx/SyYQFxWe/undefined 302 10.176 ms - 62
info HTTP GET /links/Syww0AGE/ry6zFeWx/SyYQFxWe/undefined 302 10.758 ms - 62
info HTTP GET /links/Syww0AGE/ry6zFeWx/SyYQFxWe/undefined 302 10.653 ms - 62
info HTTP GET /links/Syww0AGE/ry6zFeWx/SyYQFxWe/undefined 302 11.678 ms - 62
info HTTP GET /links/Syww0AGE/ry6zFeWx/SyYQFxWe/undefined 302 11.514 ms - 62
info HTTP GET /links/Syww0AGE/ry6zFeWx/SyYQFxWe/undefined 302 11.961 ms - 62
info HTTP GET /links/Syww0AGE/ry6zFeWx/SyYQFxWe/undefined 302 10.002 ms - 62
info HTTP GET /links/Syww0AGE/ry6zFeWx/SyYQFxWe/undefined 302 9.852 ms - 62
info HTTP GET /links/Syww0AGE/ry6zFeWx/SyYQFxWe/undefined 302 9.618 ms - 62
info HTTP GET /links/Syww0AGE/ry6zFeWx/SyYQFxWe/undefined 302 10.104 ms - 62
info HTTP GET /links/Syww0AGE/ry6zFeWx/SyYQFxWe/undefined 302 10.957 ms - 62
info HTTP GET /links/Syww0AGE/ry6zFeWx/SyYQFxWe/undefined 302 13.080 ms - 62
info HTTP GET /links/Syww0AGE/ry6zFeWx/SyYQFxWe/undefined 302 12.251 ms - 62
info HTTP GET /links/Syww0AGE/ry6zFeWx/SyYQFxWe/undefined 302 9.956 ms - 62
info HTTP GET /links/Syww0AGE/ry6zFeWx/SyYQFxWe/undefined 302 11.195 ms - 62
info HTTP GET /links/Syww0AGE/ry6zFeWx/SyYQFxWe/undefined 302 10.332 ms - 62
info HTTP GET /links/Syww0AGE/ry6zFeWx/SyYQFxWe/undefined 302 11.049 ms - 62
info HTTP GET /links/Syww0AGE/ry6zFeWx/SyYQFxWe/undefined 302 10.039 ms - 62
info HTTP GET /links/Syww0AGE/ry6zFeWx/SyYQFxWe/undefined 302 10.882 ms - 62
info HTTP GET /links/Syww0AGE/ry6zFeWx/SyYQFxWe/undefined 302 10.769 ms - 62
info HTTP GET /links/Syww0AGE/ry6zFeWx/SyYQFxWe/undefined 302 10.504 ms - 62
info HTTP GET /links/Syww0AGE/ry6zFeWx/SyYQFxWe/undefined 302 12.218 ms - 62
info HTTP GET /links/Syww0AGE/ry6zFeWx/SyYQFxWe/undefined 302 11.059 ms - 62
info HTTP GET /links/Syww0AGE/ry6zFeWx/SyYQFxWe/undefined 302 10.041 ms - 62
info HTTP GET /links/SyY7yDyV/Hyr-re1e/116274a6e3 200 3.057 ms - 42
info HTTP GET /links/Syww0AGE/ry6zFeWx/r1JiM1QN/BJlTbRN4 302 10.984 ms - 62
info HTTP GET /links/Syww0AGE/ry6zFeWx/r1JiM1QN/undefined 302 11.037 ms - 62
info HTTP GET /links/Syww0AGE/ry6zFeWx/r1JiM1QN/undefined 302 13.208 ms - 62
info HTTP GET /links/Syww0AGE/ry6zFeWx/r1JiM1QN/undefined 302 11.217 ms - 62
info HTTP GET /links/Syww0AGE/ry6zFeWx/r1JiM1QN/undefined 302 12.307 ms - 62
info HTTP GET /links/Syww0AGE/ry6zFeWx/r1JiM1QN/undefined 302 12.915 ms - 62
info HTTP GET /links/Syww0AGE/ry6zFeWx/r1JiM1QN/undefined 302 22.207 ms - 62
info HTTP GET /links/Syww0AGE/ry6zFeWx/r1JiM1QN/undefined 302 12.386 ms - 62
info HTTP GET /links/Syww0AGE/ry6zFeWx/r1JiM1QN/undefined 302 11.864 ms - 62
info HTTP GET /links/Syww0AGE/ry6zFeWx/r1JiM1QN/undefined 302 11.214 ms - 62
info HTTP GET /links/Syww0AGE/ry6zFeWx/r1JiM1QN/undefined 302 10.440 ms - 62
info HTTP GET /links/Syww0AGE/ry6zFeWx/r1JiM1QN/undefined 302 9.935 ms - 62
info HTTP GET /links/Syww0AGE/ry6zFeWx/r1JiM1QN/undefined 302 10.921 ms - 62
info HTTP GET /links/Syww0AGE/ry6zFeWx/r1JiM1QN/undefined 302 10.754 ms - 62
info HTTP GET /links/Syww0AGE/ry6zFeWx/r1JiM1QN/undefined 302 11.048 ms - 62
info HTTP GET /links/Syww0AGE/ry6zFeWx/r1JiM1QN/undefined 302 11.065 ms - 62
info HTTP GET /links/Syww0AGE/ry6zFeWx/r1JiM1QN/undefined 302 11.092 ms - 62
info HTTP GET /links/Syww0AGE/ry6zFeWx/r1JiM1QN/undefined 302 11.266 ms - 62
info HTTP GET /links/Syww0AGE/ry6zFeWx/r1JiM1QN/undefined 302 10.935 ms - 62
info HTTP GET /links/Syww0AGE/ry6zFeWx/r1JiM1QN/undefined 302 10.080 ms - 62
info HTTP GET /links/Syww0AGE/ry6zFeWx/r1JiM1QN/undefined 302 9.579 ms - 62
info HTTP GET /links/Syww0AGE/ry6zFeWx/r1JiM1QN/undefined 302 14.603 ms - 62
info HTTP GET /links/Syww0AGE/ry6zFeWx/r1JiM1QN/undefined 302 13.693 ms - 62
info HTTP GET /links/Syww0AGE/ry6zFeWx/r1JiM1QN/undefined 302 10.365 ms - 62
info HTTP GET /links/Syww0AGE/ry6zFeWx/r1JiM1QN/undefined 302 12.323 ms - 62
info HTTP GET /links/Syww0AGE/ry6zFeWx/r1JiM1QN/undefined 302 13.273 ms - 62
info HTTP GET /links/Syww0AGE/ry6zFeWx/r1JiM1QN/undefined 302 11.850 ms - 62
info HTTP GET /links/Syww0AGE/ry6zFeWx/r1JiM1QN/undefined 302 10.454 ms - 62
info HTTP GET /links/Syww0AGE/ry6zFeWx/r1JiM1QN/undefined 302 10.762 ms - 62
info HTTP GET /links/Syww0AGE/ry6zFeWx/r1JiM1QN/undefined 302 10.532 ms - 62
info HTTP GET /links/Syww0AGE/ry6zFeWx/r1JiM1QN/undefined 302 11.324 ms - 62
info HTTP GET /links/Syww0AGE/ry6zFeWx/r1JiM1QN/undefined 302 10.877 ms - 62
info HTTP GET /links/Syww0AGE/ry6zFeWx/r1JiM1QN/undefined 302 10.424 ms - 62
info HTTP GET /links/Syww0AGE/ry6zFeWx/r1JiM1QN/undefined 302 11.781 ms - 62
info HTTP GET /links/Syww0AGE/ry6zFeWx/r1JiM1QN/undefined 302 12.148 ms - 62
info HTTP GET /links/Syww0AGE/ry6zFeWx/r1JiM1QN/undefined 302 10.696 ms - 62
info HTTP GET /links/Syww0AGE/ry6zFeWx/r1JiM1QN/undefined 302 11.481 ms - 62
info HTTP GET /links/Syww0AGE/ry6zFeWx/r1JiM1QN/undefined 302 12.912 ms - 62
info HTTP GET /links/Syww0AGE/ry6zFeWx/r1JiM1QN/undefined 302 10.737 ms - 62
info HTTP GET /links/Syww0AGE/ry6zFeWx/r1JiM1QN/undefined 302 11.660 ms - 62
info HTTP GET /links/Syww0AGE/ry6zFeWx/r1JiM1QN/undefined 302 10.929 ms - 62
info HTTP GET /links/Syww0AGE/ry6zFeWx/r1JiM1QN/undefined 302 10.737 ms - 62

We've had to suspend usage of the site until we can resolve this issue due to its severity. Any help is appreciated in resolving it. Also, please let us know whether we can get more information for you.

Custom API Integration

We have a custom sign up form for our newsletter. We need to be able to add users to subscription lists. I can see two different ways to do it either via SQL or Web API on the front-end. What is your recommendation?

I should also mention we don't want to send the email that says click here to begin subscription. It would be a silent subscribe.

API Issue: ER_PARSE_ERROR: You have an error in your SQL syntax;

I started integrating the API and it seems to work the first time. If a user signs up again with the same email, I'm receiving the below issue. It might be the version of MySQL 5.7 verses MySQL 5.5 what you are targeting or not. It looked suspicious.

Does this work successfully for you?

Input below.

var addSubscriber = {
    EMAIL: input.email,
    // FIRST_NAME: null,
    // LAST_NAME: null,
    // TIMEZONE: null,
    FORCE_SUBSCRIBE: 'yes',
    REQUIRE_CONFIRMATION: 'no',
  };

  var mailtrainRequestOptions = {
    uri: 'http://***/api/subscribe/***?access_token=***',
    method: 'POST',
    form: addSubscriber,
    json: true,
  };

Response below.

{"error":"ER_PARSE_ERROR: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE id=403824 LIMIT 1' at line 1","data":[]}

Node server not getting started

I am getting following error. My node version is v0.10.41 and npm is 3.8.5.

/home/akash/experimental/mailtrain/mailtrain-master/index.js:6
let config = require('config');
^^^
SyntaxError: Unexpected strict mode reserved word
at Module._compile (module.js:439:25)
at Object.Module._extensions..js (module.js:474:10)
at Module.load (module.js:356:32)
at Function.Module._load (module.js:312:12)
at Function.Module.runMain (module.js:497:10)
at startup (node.js:119:16)
at node.js:935:3

npm ERR! Linux 3.16.0-44-generic
npm ERR! argv "node" "/usr/bin/npm" "start"
npm ERR! node v0.10.41
npm ERR! npm v3.8.5
npm ERR! code ELIFECYCLE
npm ERR! [email protected] start: node index.js
npm ERR! Exit status 8
npm ERR!
npm ERR! Failed at the [email protected] start script 'node index.js'.
npm ERR! Make sure you have the latest version of node.js and npm installed.
npm ERR! If you do, this is most likely a problem with the mailtrain package,
npm ERR! not with npm itself.
npm ERR! Tell the author that this fails on your system:
npm ERR! node index.js
npm ERR! You can get information on how to open an issue for this project with:
npm ERR! npm bugs mailtrain
npm ERR! Or if that isn't available, you can get their info via:
npm ERR! npm owner ls mailtrain
npm ERR! There is likely additional logging output above.

npm ERR! Please include the following file with any support request:
npm ERR! /home/akash/experimental/mailtrain/mailtrain-master/npm-debug.log

Feature : See who opened the email

Mailtrain has evolved so fast so awesome! We are planning to start using it in production now, but it would be good to see who opened the sent out emails, including the time of opening.
Any plans to put this on the roadmap?

Amazon SES sending limit / sec

Hi! I've successfully configured it to use through Amazon SES. The only thing I'm a bit worried about is the sending limit per second. In my case, Amazon allowed me to send 14 emails/sec, so I don't know how can I limit the mailer to achieve this. For now, I changed the SMTP setting of 5 to 1 max connection, but it doesn't imply the amount to send per second, right? Thank you for such a great new project!

Show email addresses that failed processing after list subscriber import

When subscriber list is imported, at times some emails fail to be imported for valid reasons(domain no longer valid, MX not found etc). It would be nice if these errors are logged and stored in a table somewhere so that post import, we can go and see what the errors were.

Currently these errors are logged but not shown anywhere

MYSQL error - improve error message

When you forgot to configure your mysql password or user the webUI exposes the plain MYSQL error message:

Err: 'Access denied for user: 'mailtrain@localhost' (Using password: YES)'

People inexperienced with MySQL might not know that is a an error with the database connection. The web interface should at least mention that this is an error coming back from mysql.

Something like that:

MySQL Error: 'Access denied for user: 'mailtrain@localhost' (Using password: YES)'

A message with more information would be more user friendly, like this:

Your MySQL username or password appears to be wrong. Check config/production.toml for the right values!

Or something.

SyntaxError: Unexpected strict mode reserved word

I get the following error after following the installations instructions:

root@msa-web:/var/lib/shared/websites/custom/www/mailtrain-master# NODE_ENV=production npm start

> [email protected] start /var/lib/shared/websites/custom/www/mailtrain-master
> node index.js


/var/lib/shared/websites/custom/www/mailtrain-master/index.js:7
let config = require('config');
^^^
SyntaxError: Unexpected strict mode reserved word
    at Module._compile (module.js:439:25)
    at Object.Module._extensions..js (module.js:474:10)
    at Module.load (module.js:356:32)
    at Function.Module._load (module.js:312:12)
    at Function.Module.runMain (module.js:497:10)
    at startup (node.js:119:16)
    at node.js:906:3

npm ERR! Linux 3.2.0-4-amd64
npm ERR! argv "node" "/usr/bin/npm" "start"
npm ERR! node v0.10.29
npm ERR! npm  v3.8.5
npm ERR! code ELIFECYCLE
npm ERR! [email protected] start: `node index.js`
npm ERR! Exit status 8
npm ERR!
npm ERR! Failed at the [email protected] start script 'node index.js'.
npm ERR! Make sure you have the latest version of node.js and npm installed.
npm ERR! If you do, this is most likely a problem with the mailtrain package,
npm ERR! not with npm itself.
npm ERR! Tell the author that this fails on your system:
npm ERR!     node index.js
npm ERR! You can get information on how to open an issue for this project with:
npm ERR!     npm bugs mailtrain
npm ERR! Or if that isn't available, you can get their info via:
npm ERR!     npm owner ls mailtrain
npm ERR! There is likely additional logging output above.

npm ERR! Please include the following file with any support request:
npm ERR!     /var/lib/shared/websites/custom/www/mailtrain-master/npm-debug.log

/var/lib/shared/websites/custom/www/mailtrain-master/npm-debug.log

0 info it worked if it ends with ok
1 verbose cli [ 'node', '/usr/bin/npm', 'start' ]
2 info using [email protected]
3 info using [email protected]
4 verbose node symlink /usr/bin/node
5 verbose run-script [ 'prestart', 'start', 'poststart' ]
6 info lifecycle [email protected]~prestart: [email protected]
7 silly lifecycle [email protected]~prestart: no script for prestart, continuing
8 info lifecycle [email protected]~start: [email protected]
9 verbose lifecycle [email protected]~start: unsafe-perm in lifecycle true
10 verbose lifecycle [email protected]~start: PATH: /usr/lib/node_modules/npm/bin/node-gyp-bin:/var/lib/shared/websites/custom/www/mailtrain-master/node_modules/.bin:/usr/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
11 verbose lifecycle [email protected]~start: CWD: /var/lib/shared/websites/custom/www/mailtrain-master
12 silly lifecycle [email protected]~start: Args: [ '-c', 'node index.js' ]
13 silly lifecycle [email protected]~start: Returned: code: 8  signal: null
14 info lifecycle [email protected]~start: Failed to exec start script
15 verbose stack Error: [email protected] start: `node index.js`
15 verbose stack Exit status 8
15 verbose stack     at EventEmitter.<anonymous> (/usr/lib/node_modules/npm/lib/utils/lifecycle.js:239:16)
15 verbose stack     at EventEmitter.emit (events.js:98:17)
15 verbose stack     at ChildProcess.<anonymous> (/usr/lib/node_modules/npm/lib/utils/spawn.js:24:14)
15 verbose stack     at ChildProcess.emit (events.js:98:17)
15 verbose stack     at maybeClose (child_process.js:755:16)
15 verbose stack     at Process.ChildProcess._handle.onexit (child_process.js:822:5)
16 verbose pkgid [email protected]
17 verbose cwd /var/lib/shared/websites/custom/www/mailtrain-master
18 error Linux 3.2.0-4-amd64
19 error argv "node" "/usr/bin/npm" "start"
20 error node v0.10.29
21 error npm  v3.8.5
22 error code ELIFECYCLE
23 error [email protected] start: `node index.js`
23 error Exit status 8
24 error Failed at the [email protected] start script 'node index.js'.
24 error Make sure you have the latest version of node.js and npm installed.
24 error If you do, this is most likely a problem with the mailtrain package,
24 error not with npm itself.
24 error Tell the author that this fails on your system:
24 error     node index.js
24 error You can get information on how to open an issue for this project with:
24 error     npm bugs mailtrain
24 error Or if that isn't available, you can get their info via:
24 error     npm owner ls mailtrain
24 error There is likely additional logging output above.
25 verbose exit [ 1, true ]

Required MySQL privileges?

What is the privileges mailtrain need? I don't want to grant it all privileges in case in a hack, and loose all data in the database

sending a website

Is there a plan to add a feature which allows sending existing websites? Since I think mailtrain could be a really nice alternative to phplist, but they have this implemented in this way:
2016-04-06 18_59_10-phplist __ phplist __ send a campaign

Just curious if this is on the roadmap.

How to edit Bounce settings?

I use my own mailserver on localhost and route every outgoing mail to mailgun (but incoming dicrectly). On the homepage you state that you can set the webhook for these mail providers, but where or how can I set these parameters?

HTML email compliance

Currently signup messages do not include html headers which triggers SpamAssasin spam points. Additionally SparkPost seems to be re-encoding non-multipart messages which ends up in 77-byte QP lines which also triggers spam points.

Solution: System messages should contain HTML + plainttext parts and HTML content of the message should be embedded into a simple html structure.

Not sending emails - one reported as Opened (while never received)

Hi Mailtrain developers,

I have done a Digital Ocean install as per readme.
One comment on Ubuntu install:

  • /opt directory on default Ubuntu 14 droplet (Digital Ocean) did NOT exist, so I had to create it manually and then finalise install manually

Issue: so install now done. Created a list, a template and a campaign but it is not sending out emails.
I use localhost for sending out email and this works well on OS level.
Funny this is that it reports having sent one email (one email opened) to my own gmail account but its never received (not even in Spam).
Any idea where to start troubleshooting?

Kind regards,
Trond

[Enhancement] Plain HTML editor

We are having problems with the current template HTML editor stripping important markup from the HTML. It would be nice to have an option to just provide the raw HTML and turn off the HTML editor to prevent it sanitizing the HTML of the template.

PS - Nice work on the project. Easy setup and very useful.

Mailtrain Roadmap

This is a meta-issue to track new features

  • Handlebars support in addition to normal HTML. This would enable to use more complex logic
  • Prefetch linked images and embed as attachments
  • Campaign specific merge tags. Maybe import from a CSV file? Would make it possible to provide custom fields like coupon codes, pdf links etc.

  • Upgrade template editor. Mosaico seems like a great option (#10)
  • Bounce detection by grepping Postfix logs
  • Continous campaigns – currently once all subscribers have received a message the campaign is ended. It should be possible to keep it running, so if new subscribers appear then they would get the same message automatically. Also required for RSS campaigns, drip campaigns etc. docs
  • Relative datetime segmentation rules – it should be possible to create rules like "1 day after signup"
  • Message preview before sending out the campaign docs
  • RSS campaigns – every new entry in a RSS file should create a new campaign and send the contents of the RSS entry as the message to a selected list docs
  • Scheduled sending (#23) docs
  • Additional SMTP configuration, for example to allow self-signed certificates (#7)
  • Message source from an URL – instead of editing message template in Mailtrain it should be possible to fetch it from a provided URL (#8)
  • GPG encryption – users should be able to upload their GPG key as part of their profile and if such key is set then all messages sent to this user should be GPG encrypted docs
  • API access docs
  • Disable tracking features for campaigns. If tracking is disabled before sending a campaign, tracking links are not used. If tracking is disabled after sending the campaign, redirects keep working but tracking information is not stored to db
  • Custom attachments

embed external images within email

phpList has just released version 3.2.5 and with it the possibility to embed external referenced images within the email automatically while sending out the email.

I wouldn't necessarily say this is always a good idea, but it might make sense sometimes and is definitely a great feature, maybe mailtrain wants to put this on the list as well.

Milestone v1.3

Here are the todo's for upcoming v1.3. This list probably changes before v1.3 is released

  • Simple send scheduling. docs
  • Fetch message contents from URL

DB Upgrade Instructions

I noticed you revamped the SQL scripts to allow for incremental upgrades. I didn't see anything mentioning how to upgrade the existing SQL DB. I'm assuming I'd just run the setup/sql/upgrade-#####.sql in order on the DB?

Please provide guidance.

Redis Issue

I've run into an issue when I turn on redis for session management. I turn it on and I get the below error in the logs with the site crashing hard. I'm guessing the redis connection is failing.

Does the redis connection get verified on start up?

Error: Can't set headers after they are sent.
    at ServerResponse.OutgoingMessage.setHeader (_http_outgoing.js:346:11)
    at ServerResponse.header (/data/mailtrain/node_modules/express/lib/response.js:718:10)
    at ServerResponse.contentType (/data/mailtrain/node_modules/express/lib/response.js:551:15)
    at ServerResponse.send (/data/mailtrain/node_modules/express/lib/response.js:138:14)
    at done (/data/mailtrain/node_modules/express/lib/response.js:957:10)
    at /data/mailtrain/node_modules/hbs/lib/hbs.js:93:9
    at done (/data/mailtrain/node_modules/hbs/lib/async.js:74:20)
    at /data/mailtrain/node_modules/hbs/lib/hbs.js:88:18
    at render_file (/data/mailtrain/node_modules/hbs/lib/hbs.js:49:14)
    at render_with_layout (/data/mailtrain/node_modules/hbs/lib/hbs.js:80:5)

SMTP settings

I am having trouble getting a connection to my SMTP server. I always get the message "Connection refused, check hostname and port.".
I am suspecting that it has to do with the SSL verification. Is there a chance to disable the SSL verification? I would be willing to contribute, but just started to check out the project and probably need some direction first.

Those settings work for me using heirloom-mailx for example:

echo "hello world" | /usr/bin/heirloom-mailx -v -r "[email protected]" -s "subject" -S smtp="host:port" -S smtp-use-starttls -S smtp-auth=login -S smtp-auth-user="[email protected]" -S smtp-auth-password="smtp-password" -S ssl-verify=ignore "[email protected]"

The only difference I can spot is the ssl-verify=ignore so far.

Translation

What's planned in regard to translation? I didn't see anything on the roadmap.

I would prefer it when the project integrated with a service like transifex so people without or very little code and git knowledge can easily contribute.

Transifex is gratis for open source projects. And it is pretty easy to integrate and more importantly easy to use.

Guide for github

API Subscribe with verification email

I've played with the API, and I see that the users don't get a verification email when they're added through the API. Would it be possible to do this?

Performance Feedback

I'm working to figure out the best way to increase my send rate.

I started with t2.micro MySql and t2.nano EC2. I found that I could send about 7-8k per hour until my CPU credit was used up on both then it dropped to half that and stayed steady. The interesting part was the CPU of the EC2 instance never really went much above 10%. It appears I probably need more MySql capacity to improve send rate.

The latest improvement to the code definitely helped a lot in improving my send rate. Prior to the update the above numbers were far worse. Seeing 4k max send until it ran into the degraded issue. I've included the below.

Send rate prior to fix.

I tried to increase the send rate by increasing the DB and EC2 capacity on 5/23 23:00 and you can see it picked up.

'2016-05-21 11','3318'
'2016-05-21 12','4127'
'2016-05-21 13','3997'
'2016-05-21 14','3934'
'2016-05-21 15','3832'
'2016-05-21 16','1052'
'2016-05-21 17','604'
'2016-05-21 18','600'
'2016-05-21 19','598'
'2016-05-21 20','595'
'2016-05-21 21','591'
'2016-05-21 22','587'
'2016-05-21 23','583'
'2016-05-22 00','580'
'2016-05-22 01','577'
'2016-05-22 02','575'
'2016-05-22 03','572'
'2016-05-22 04','568'
'2016-05-22 05','567'
'2016-05-22 06','564'
'2016-05-22 07','561'
'2016-05-22 08','558'
'2016-05-22 09','554'
'2016-05-22 10','552'
'2016-05-22 11','547'
'2016-05-22 12','546'
'2016-05-22 13','544'
'2016-05-22 14','541'
'2016-05-22 15','539'
'2016-05-22 16','537'
'2016-05-22 17','531'
'2016-05-22 18','534'
'2016-05-22 19','530'
'2016-05-22 20','528'
'2016-05-22 21','526'
'2016-05-22 22','523'
'2016-05-22 23','523'
'2016-05-23 00','520'
'2016-05-23 01','518'
'2016-05-23 02','516'
'2016-05-23 03','515'
'2016-05-23 04','513'
'2016-05-23 05','499'
'2016-05-23 06','509'
'2016-05-23 07','507'
'2016-05-23 08','504'
'2016-05-23 09','503'
'2016-05-23 10','500'
'2016-05-23 11','486'
'2016-05-23 12','495'
'2016-05-23 13','493'
'2016-05-23 14','490'
'2016-05-23 15','488'
'2016-05-23 16','497'
'2016-05-23 17','478'
'2016-05-23 18','486'
'2016-05-23 19','491'
'2016-05-23 20','480'
'2016-05-23 21','480'
'2016-05-23 22','481'
'2016-05-23 23','1499'
'2016-05-24 00','2872'
'2016-05-24 01','3435'
'2016-05-24 02','3757'
'2016-05-24 03','3720'
'2016-05-24 04','3678'
'2016-05-24 05','3641'
'2016-05-24 06','3602'
'2016-05-24 07','3575'
'2016-05-24 08','3525'
'2016-05-24 09','3512'
'2016-05-24 10','3465'
'2016-05-24 11','3424'
'2016-05-24 12','3367'
'2016-05-24 13','882'

The below is the send rate after the fix.

No modifications were made to the EC2 or DB.

'2016-06-04 10','7882'
'2016-06-04 11','8048'
'2016-06-04 12','8043'
'2016-06-04 13','7983'
'2016-06-04 14','7998'
'2016-06-04 15','7824'
'2016-06-04 16','7892'
'2016-06-04 17','7973'
'2016-06-04 18','7845'
'2016-06-04 19','7863'
'2016-06-04 20','4569'
'2016-06-04 21','3126'
'2016-06-04 22','3098'
'2016-06-04 23','3151'
'2016-06-05 00','3102'
'2016-06-05 01','3088'
'2016-06-05 02','3061'
'2016-06-05 03','67'

I'm planning on increasing my DB capacity the next run to see what affect it will have on the send rate. If you have any suggestions, please let me know. Thanks.

npm start issue

Please check there are issues when I do npm start

C:\wamp\www\automark\mailtrain>npm start

[email protected] start C:\wamp\www\automark\mailtrain
node index.js

C:\wamp\www\automark\mailtrain\index.js:6
let config = require('config');
^^^^^^
SyntaxError: Unexpected identifier
at Module._compile (module.js:439:25)
at Object.Module._extensions..js (module.js:474:10)
at Module.load (module.js:356:32)
at Function.Module._load (module.js:312:12)
at Function.Module.runMain (module.js:497:10)
at startup (node.js:119:16)
at node.js:929:3

npm ERR! Windows_NT 6.1.7601
npm ERR! argv "node" "C:\Users\Administrator\AppData\Roaming\npm\node_modules\npm\bin\npm-cli.js" "start"
npm ERR! node v0.10.35
npm ERR! npm v3.5.2
npm ERR! code ELIFECYCLE
npm ERR! [email protected] start: node index.js
npm ERR! Exit status 8
npm ERR!
npm ERR! Failed at the [email protected] start script 'node index.js'.
npm ERR! Make sure you have the latest version of node.js and npm installed.
npm ERR! If you do, this is most likely a problem with the mailtrain package,
npm ERR! not with npm itself.
npm ERR! Tell the author that this fails on your system:
npm ERR! node index.js
npm ERR! You can get information on how to open an issue for this project with:
npm ERR! npm bugs mailtrain
npm ERR! Or if that isn't available, you can get their info via:
npm ERR! npm owner ls mailtrain
npm ERR! There is likely additional logging output above.

npm ERR! Please include the following file with any support request:
npm ERR! C:\wamp\www\automark\mailtrain\npm-debug.log

Segment Rule Feature: Allow date range to support relative timeframe filter

We've typically done rules where we look back the last 60 days or 8 months. We'd love to see a date filter that allows this kind of filtering. It'd be nice to say either ## days or ## months and provide a number. This number would then be used to segment the list by a fixed date range on campaign send.

Example, a segment has a filter of 60 days by signup date. The campaign starts on 5/1/2016. The actual filter would be the exclusively previous 60 days. 3/1/2016 - 4/30/2016.

Thanks for the consideration.

Segment Rule Issue: Date Range with blank End Date doesn't filter as expected

It would appear you can create a Rule for a Segment of a List with a Date Range that has a Start Date and leave the End Date blank. This would be something similar to Start Date: 5/1/2016 and End Date: n/a returning all subscribers equal to or after 5/1/2016. The actual result is nothing is found.

Is this behavior a bug? This seems like useful filter to be able to omit the start or end date of the range.

Piwik plugin

Hi,

Would it be interesting to integrate Mailtrain in Piwik as a plugin?
I don't have enough argumentation right now, but I'm really curious to see your point of view.

Thanks,
HLFH

Possible DB Performance Issue

We ran a full campaign this weekend of 100k subscribers (list has close to 400k). It took several days to fully send. The DB seemed to be the bottleneck on the writes back to the database. We plan on diagnosing at a deeper level in the next two weeks during our next run.

Does this performance metric sound right? Is there a possibility there is some bottle necking going on which would slow down a large send?

server process crash

I use the test template to try mailtrain but every time I click the [LINK_BROWSER] link in the received email the server process will crash. I use a apache2 as proxy server in front of the mailtrain server. I got the error

/srv/mailtrain/node_modules/mysql/lib/protocol/Parser.js:77
        throw err; // Rethrow non-MySQL errors
        ^

TypeError: Cannot read property 'hasOwnProperty' of undefined
    at key (/srv/mailtrain/lib/tools.js:161:35)
    at /srv/mailtrain/lib/tools.js:169:17
    at String.replace (native)
    at Object.formatMessage (/srv/mailtrain/lib/tools.js:167:20)
    at /srv/mailtrain/routes/archive.js:68:44
    at Query._callback (/srv/mailtrain/lib/models/campaigns.js:422:20)
    at Query.Sequence.end (/srv/mailtrain/node_modules/mysql/lib/protocol/sequences/Sequence.js:96:24)
    at Query._handleFinalResultPacket (/srv/mailtrain/node_modules/mysql/lib/protocol/sequences/Query.js:144:8)
    at Query.EofPacket (/srv/mailtrain/node_modules/mysql/lib/protocol/sequences/Query.js:128:8)
    at Protocol._parsePacket (/srv/mailtrain/node_modules/mysql/lib/protocol/Protocol.js:280:23)

Multilingual mail support

hi,

for the moment I never see a provider that allow the send of a mail with multiple version, one for each languages.

It'll possible to add the features?

This kind of feature will require some supplementary information in the campaign:

  • 1 default language (or template ref) for each campaign
  • the [MERGE_TAG] that indicate the language for each user
  • the attribute language for a template, or multiple content for a template, one for languages

What do you think?

Conditional Merge Tags

It would be benefitial if mailtrain would be able to handle conditional merge tags for sending e.g. different salutations based on the gender of the subscriber.

Mailchimp solves this by letting the user write "pseudocode" conditionals like:

|IF:SALUTATION=Mr |
Sehr geehrter |SALUTATION| |LNAME|,
|ELSEIF:SALUTATION=Mrs |
Sehr geehrte |SALUTATION| |LNAME|,
|ELSE:|
Sehr geehrte Damen und Herren,
|END:IF|

Redis Scaling Question

Do I need to have Redis connected to launch more instances of mailtrain to improve the send rate? Or, is it possible to just launch the mailtrain application on multiple servers and ignore Redis when not using them as part of the web farm?

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.