'problem sending email using sendgrid with serverless-http
when trying to send email by sendgrid the lambda does not show log and ends up giving timeout. I've tried putting it inside a promise, but it didn't help. The initial handler has already been placed asyncronously. The same error also happens when I try to upload on S3. This problem only happens when it is deployed on aws, on serverless-offline it works correctly.
handler.js
import app from './';
import serverless from 'serverless-http';
const handler = serverless(app);
module.exports.handler = async (event, context) => {
// you can do other things here
const result = await new Promise(async (resolve, reject) => {
const resProm = await handler(event, context);
resolve(resProm);
});
// and here
return result;
};
serveless.yml
functions:
app:
name: app-${env:STAGE}
handler: src/handler.handler
events:
- http: ANY /
- http: 'ANY {proxy+}'
sendMail.js
'use strict';
import crypto from 'crypto';
import sgMail from '@sendgrid/mail';
const forgetPassword = async event => {
try{
const { email } = event.body;
const token = crypto.randomBytes(3).toString('hex');
const text = `<p>Você esqueceu sua senha?</p>
<p>Codigo de autorização para mudar senha: ${token}</p>
<p>Se não pediu para recuperar a senha ignore esse e-amil.</p>`;
const msg = {
to: [<<EMAIL>>],
from: '[email protected]',
subject: 'Código para resetar senha',
text,
html: text
}
sgMail.setApiKey(process.env.SENDGRID_API_KEY);
const sendMail = await sgMail.send(msg);
console.log( sendMail);
return {
statusCode: 200,
body: JSON.stringify(
{
message: 'Pedido de token enviado, verifique seu e-mail!',
sendMail
}
),
}
}catch(e){
console.error(e, "forgetPassword EROOR");
}
return {
statusCode: 400,
error: true,
body: JSON.stringify(
{
message: 'Falha na recuperação da senha!',
input: event,
}
),
}
}
export default Auth;
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
Solution | Source |
---|