I am trying to send a email in meteor with process.env and smtp gmail

I am using the following to send emails which works on localhost but not my server.

// server
Meteor.startup(function () {
    process.env.MAIL_URL="smtp://uername%40gmail.com:[email protected]:465/"; 
});

I get the follow error in my logs(it seems like google is blocking it for some reason, is there a way to stop that?

[162.243.52.235] 534-5.7.14 Learn more at
534 5.7.14 https://support.google.com/mail/bin/answer.py?answer=78754 l10sm1017845qae.41 - gsmtp
    at SMTPClient._actionAUTHComplete (/opt/meteor/app/programs/server/npm/email/main/node_modules/simplesmtp/lib/client.js:826:23)
    at SMTPClient._onData (/opt/meteor/app/programs/server/npm/email/main/node_modules/simplesmtp/lib/client.js:329:29)
    at CleartextStream.EventEmitter.emit (events.js:95:17)
    at CleartextStream.<anonymous> (_stream_readable.js:746:14)
    at CleartextStream.EventEmitter.emit (events.js:92:17)
    at emitReadable_ (_stream_readable.js:408:10)
    at _stream_readable.js:401:7
    at process._tickCallback (node.js:415:13)

This is the event that I think sends initiates the email sending. I know that meteor is now setup to use mailgun, is there a way to modify this to just use mailgun instead of meteor without process.env?

Template.forgotPassword.events({
    'submit #forgotPasswordForm': function(e, t) {
        e.preventDefault();

        var forgotPasswordForm = $(e.currentTarget),
            email = trimInput(forgotPasswordForm.find('#forgotPasswordEmail').val().toLowerCase());

        if (isNotEmpty(email) && isEmail(email)) {
            Accounts.forgotPassword({email: email}, function(err) {
                if (err) {
                    if (err.message === 'User not found [403]') {
                        Session.set('alert', 'This email does not exist.');
                    } else {
                        Session.set('alert', 'We\'re sorry but something went wrong.');
                    }
                } else {
                    Session.set('alert', 'Email Sent. Please check your mailbox to reset your password.');

                }
            });
        }
        return false;
    },

    'click #returnToSignIn': function(e, t) {
        Session.set('showForgotPassword', null);
        return false;
    },
});

Packages already installed

enter image description here

Answers:

Answer

You need to URL encode your username and password else Meteor confuses the two '@' signs with each other.

You could do this in your JS console (with encodeURIComponent(username)) and usually end up with something like

user%40gmail.com:[email protected]:465

You could use Mailgun in the same way, or Mandrill, or any other smtp provider. It's just the username format causing the issues.

Answer

I encountered a similar problem. The method send email work locally but not on the hosting modulus. For my part this was due to a blocking google security (access to my gmail account from Seattle while I live in France has probably seemed fishy to google). I went through several pages to authorize less strict connections to my gmail account. On this page I saw the blockage. So I allowed the less secure applications and allowed access to my account.

If it helps someone ..

Answer

Just use the email package with

meteor add email

Then sending email will work. Mine works with port 587 in my config.

Meteor.startup(function () {
    process.env.MAIL_URL = 'smtp://user%40gmail.com:[email protected]:587';
});

Tags

Recent Questions

Top Questions

Home Tags Terms of Service Privacy Policy DMCA Contact Us

©2020 All rights reserved.