Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

like image 680
Anders Kitson Avatar asked Jun 24 '14 16:06

Anders Kitson


People also ask

Is Gmail SMTP going away?

To help keep your account secure, starting May 30, 2022, ​​Google will no longer support the use of third-party apps or devices which ask you to sign in to your Google Account using only your username and password.

How can you send an email using a JavaScript function?

You can't send emails using JavaScript code alone due to the lack of support for server sockets. For this, you need a server-side language that talks to the SMTP server. You can use JS in conjunction with a server script that will send emails from the browser based on your requests.

How do I send automatic emails in JavaScript?

js, right click on the index. html file > open in the browser. Once the browser loads the page, click on the button Send Email. That's it.. the mail is sent successfully.


2 Answers

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 ..

like image 141
d4v Avatar answered Nov 15 '22 17:11

d4v


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.

like image 40
Tarang Avatar answered Nov 15 '22 17:11

Tarang