/ nodejs

Emails Personalizados utilizando o Amazon SES

No último post eu falei sobre envio automático de emails personalizados. Uma das ferramentas disponíveis para o envio desses emails é o serviço SES da Amazon. Nesse post vou mostrar como enviar emails personalizados através do SES. Se você não viu o post anterior, clique aqui.

Se você nunca usou o AWS SES, vai precisar confirmar pelo menos um endereço de email para utilizar. Para isso, acesse o serviço SES a partir do seu console (console -> Services -> Simple Email Service).

Configurando o seu email

  • Acesse Email Addresses na seção Identity Management
  • Clique em Verify a New Email Address
  • Insira seu endereço de email e clique em Verify this Email Address
  • Acesse seu email e clique no endereço de confirmação

Nesse momento, você já possui um endereço de email verificado e já pode enviar emails através dele. Note que, se você está usando o SES pela primeira vez ou sua conta ainda está no modo sandbox, você só conseguirá enviar emails para emails verificados. Ao longo do post vou explicar como enviar emails para qualquer endereço.

Criando um Template de Email

  • Crie um arquivo chamado template.html. Esse será seu template e você pode alterar como quiser.
<!DOCTYPE html>
<body width='100%' style='margin: 0; mso-line-height-rule: exactly;'>
    <p style='margin: 0;'>Olá, Usuário! Esse é seu primeiro email personalizado.</p>                
</body>
</html>

Uma das vantagens do Amazon SES é você definir variáveis no seu template que serão preenchidas depois. Por exemplo, queremos substituir "Usuário" pelo nome do usuário. Para isso, podemos definir variáveis no template usando a sintaxe:

{{ nomedousuario }}

Assim, o arquivo template.html ficará assim:

<!DOCTYPE html>
<body width='100%' style='margin: 0; mso-line-height-rule: exactly;'>
    <p style='margin: 0;'>Olá, {{nomedousuario}}! Esse é seu primeiro email personalizado.</p>                
</body>
</html>

Agora, crie um arquivo chamado email_template.json:

{
  "Template": {
    "TemplateName": "primeiro_template",
    "SubjectPart": "Olá {{nomedousuario}}!",
    "HtmlPart": "",
    "TextPart": "Olá, {{nomedousuario}}! Esse é seu primeiro email personalizado."
  }
}

Perceba que faltou preencher o campo Htmlpart. Esse campo deve ser preenchido com o código html do seu template. Para isso:

  • Substitua as aspas duplas (") do seu código html por aspas simples (')
  • Comprima o código html (você pode usar alguma ferramenta online para isso, como essa).
  • Insira o código comprimido na seção HtmlPart:
{
  "Template": {
    "TemplateName": "primeiro_template",
    "SubjectPart": "Olá {{nomedousuario}}!",
    "HtmlPart": "<!DOCTYPE html><body width='100%' style='margin: 0; mso-line-height-rule: exactly;'> <p style='margin: 0;'>Olá, {{nomedousuario}}! Esse é seu primeiro email personalizado.</p> </body></html>",
    "TextPart": "Olá, {{nomedousuario}}! Esse é seu primeiro email personalizado."
  }
}

Agora o template está completo. Vamos carregar esse template na conta AWS para podermos utilizar. Para isso, vou utilizar a interface de comando da AWS (AWS CLI). Se você não possui a CLI configurada, veja aqui como instalar.

  • Crie o template no AWS SES

aws ses create-template --cli-input-json file://email_template.json

Observação: Se você quiser deletar o template, use:
aws ses delete-template --template-name primeiro_template

Enviando Emails utilizando o Template

Ok, agora o template está configurado no AWS SES e pronto para ser utilizado. Para isso, vamos utilizar um código bem simples em javascript usando nodejs para enviar emails.

  • Instale o AWS para nodejs:

npm install --save aws-sdk

  • Crie um arquivo chamado enviar_email.js. Note que como ainda não tiramos a conta do sandbox, tanto seu email de origem como o email de destino devem ser emails verificados no AWS SES. Caso contrário, não será possível enviar.
var AWS = require('aws-sdk');
AWS.config.update({region: 'SUA_REGIAO_AWS'});

var params = {
	Destination: { 
	    CcAddresses: [],
	    ToAddresses: ['SEU_EMAIL_DE_DESTINO']
	},
	Source: 'SEU_EMAIL_DE_ORIGEM', 
	Template: 'primeiro_template', 
	TemplateData: "{ \"nomedousuario\":\"" + "Francisquini" + "\"}",
	ReplyToAddresses: ['SEU_EMAIL_DE_ORIGEM'],
};
var sendPromise = new AWS.SES({apiVersion: '2010-12-01'}).sendTemplatedEmail(params).promise();
sendPromise.then(function(data) {
	console.log(data);
}).catch(function(err) {
    console.error(err, err.stack);
});
  • Envie o email:

node enviar_email.js

Se tudo deu certo, você recebeu o email que acabou de enviar. Note que não é possível enviar um email para um endereço de email que não foi verificado. Isso ocorre porque o serviço AWS SES não permite que contas no modo sandbox enviem emails para endereços não verificados. Para remover sua conta do modo sandbox, você deverá abrir um case na Amazon. Você pode ver aqui como fazer isso. Quando seu suporte estiver completo, sua conta será removida do modo sandbox e você poderá enviar email para qualquer endereço.

O código fonte desse projeto está disponível no github.