SA-MP Forums

Go Back   SA-MP Forums > Non-English > Languages > Português/Portuguese > Lançamentos/Releases

Reply
 
Thread Tools Display Modes
Old 06/06/2018, 12:34 AM   #1
bruxo00
High-roller
 
bruxo00's Avatar
 
Join Date: Oct 2012
Location: Portugal
Posts: 1,121
Reputation: 152
Default SAMPMailJS - Agora suporta Templates [NodeJS]



SAMPMailJS é uma include que envia diretamente emails de uma conta gmail, eliminando assim a possibilidade de os mails irem parar à caixa de SPAM. Suporta HTML. Muito útil para criar, por exemplo, recuperadores de password, confirmadores de email, enviar avisos por email aos administradores, etc.

A include usa um script em NodeJS, mas não é preciso ter conhecimento nenhum em Javascript para conseguir pôr isto a funcionar.


TUTORIAIS

Como instalar NodeJS [Windows] [Linux]
Como obter credenciais do GMAIL
GitHub Wiki - Documentação
Criar sistema de confirmação de emails (inglês)


COMO CONFIGURAR

Video passo a passo de como configurar corretamente: bit. ly/2m29S0Q


  • sampmail.js

Para usar os servidores SMTP do GMAIL, renomeie o ficheiro config.json.gmail para config.json. Edite o ficheiro com todas as configurações desejadas. Para obter o clientId, clientSecret e refreshToken siga o link acima Como obter credenciais do GMAIL.

Para usar outro servidor SMTP, renomeie o ficheiro config.json.custom para config.json. Edite o ficheiro com as suas credenciais. Note que para alguns servidores SMTP são necessárias mais algumas configurações no objeto auth para conseguir utilizar o servidor SMTP, mas os mais básicos funcionam com user e password apenas.

machineIp: normalmente o IP externo, se for usar o script apenas no localhost use o IP interno. 127.0.0.1 não irá funcionar para outros computadores, mesmo que estejam na mesma rede local.
listenPort: porta em que o script irá correr.
httpPassword: mesma password que configurar na include.
enableDebug: quando true, faz print de algumas informações adicionais na consola.

Se for usar templates, é necessário criar a pasta ./templates na raíz onde está o seu script, e colocar lá os templates, caso contrário o script irá crashar quando tentar enviar um email com um template que não existe no host.

  • sampmailjs.inc
Editar as constantes:

Code:
#define SAMPMAILJS_URL "127.0.0.1:8080" 
#define SAMPMAILJS_PASSWORD "changeme" 
#define SAMPMAILJS_CONSOLELOG 0
#define SAMPMAILJS_MAXPOSTDATA 2048
SAMPMAILJS_URL - IP:Porta ou Hostname:Porta do host onde está o script a correr
SAMPMAILJS_PASSWORD - Deve ser igual à password do sampmail.js
SAMPMAILJS_CONSOLELOG - Loga na consola algumas informações que podem ser utéis em debug
SAMPMAILJS_MAXPOSTDATA - Tamanho máximo da variável que envia a informação ao script. Com emails com pouco texto, pode ser usado um número mais baixo. Com emails grandes, é aconselhável subir um pouco. Depende de cada um.

  • NodeJS
Para instalar o NODEJS, seguir o tutorial na parte dos tutoriais. É necessário instalar os packages http, nodemailer, url, fs, se ainda não os tiver. Para instalar packages para o node, é só navegar para o directório do script e fazer:

PHP Code:
npm install 
Para correr o scrip, basta navegar até à pasta onde ele está e correr na linha de comandos:

PHP Code:
node sampmail.js 
  • STRLIB
É necessário fazer download da include strlib.inc. Pode ser encontrada aqui.


USO NORMAL

Code:
SendEmail(name[], to[], subject[], text[])

Exemplo:

SendEmail("SAMPMailJS Teste", "**********@gmail.com", "Teste para o Forum Samp", "<img src='https://i.gyazo.com/cf4f68f94b939c99ccfd0d9f8f51976c.png'><br>Isto e um email de teste!");
Print do Email Recebido


USO COM TEMPLATES

Code:
SendEmail(name[], to[], subject[], text[], bool:isTemplate = false, templateName[] = "default.html")
Um template é um ficheiro .html já feito que vai ficar presente na pasta do script. Com isto, podem criar templates infinitos e alterar só certas partes. Com isto há a vantagem de não ser preciso gastar tanta memória no SAMP para enviar um ficheiro completo em HTML.

Este exemplo vai usar o template default.html, que está disponível também no GitHub. (AQUI)

Neste caso, iriamos gastar muita memória ao enviar um email completo diretamente pelo SAMP. Com templates, é preciso enviar muito pouco texto para enviar um email complexo.

O template default é este:

HTML Code:
<html>
  <img src='https://i.gyazo.com/cf4f68f94b939c99ccfd0d9f8f51976c.png' height="100" width="300">
  <br><br> Bem vindo ao servidor <b>PLAYERNAME</b>! Obrigado por se registar!
  <br> Informações sobre a sua conta:
  <br> IP: PADDRESS
  <br> Data de Registo: DREG
  <br><br> Divirta-se! Visite-nos em https://github.com/bruxo00/SAMPMailJS
</html>
Como podemos ver ali, temos algumas palavras que se destacam das outras, que neste caso são PLAYERNAME, PADDRESS e DREG. Nos lugares onde estão estas palavras, queremos ter por exemplo, o nome do jogador, o IP do jogador e a data de registo. Para fazer isso, no argumento text vamos enviar ao script um formato pré-definido que ele entenda. O formato que o script entende é tag1:valor1#tag2:valor2#tag3:valor3, que significa que vai ao template, procura no template tag1 e vai substituir por valor1, tag2 e substitui por valor2, etc. Neste caso específico, temos as tags PLAYERNAME, PADDRESS e DREG. Para as substutuir, fazemos PLAYERNAME:valor#PADDRESS:valor#DREG:valor. Exemplo em Pawn:

Code:
forward EnviarEmailBemVindo(playerid);
public EnviarEmailBemVindo(playerid)
{
	new string[128], pName[MAX_PLAYER_NAME], IP[32];
	
	GetPlayerName(playerid, pName, sizeof pName);
	GetPlayerIp(playerid, IP, sizeof IP);
	
	format(string, sizeof string, "PLAYERNAME:%s#PADDRESS:%s#DREG:07/06/2018", pName, IP);
        SendEmail("SAMP MailJS Teste", "omeuemail@gmail.com", "Bem Vindo ao servidor", string, true);
    
	return 1;
}
Este código iria dar um email parecido com este:



Print do exemplo da consola do script:



BUGS CONHECIDOS

Nenhum

DOWNLOADS

Repositório Github
Link Direto

Last edited by bruxo00; 09/09/2019 at 03:03 AM.
bruxo00 is offline   Reply With Quote
Old 06/06/2018, 12:37 AM   #2
CaioCartaxo
Little Clucker
 
Join Date: May 2018
Location: João Pessoa, PB
Posts: 42
Reputation: 1
Default Re: SAMPMailJS [NodeJS]

Muito legal o script mano, parabéns
CaioCartaxo is offline   Reply With Quote
Old 06/06/2018, 05:25 AM   #3
B4dSh33p
Big Clucker
 
Join Date: Jun 2016
Posts: 123
Reputation: 4
Default Re: SAMPMailJS [NodeJS]

Isso era para acontecer?

B4dSh33p is offline   Reply With Quote
Old 06/06/2018, 12:06 PM   #4
bruxo00
High-roller
 
bruxo00's Avatar
 
Join Date: Oct 2012
Location: Portugal
Posts: 1,121
Reputation: 152
Default Re: SAMPMailJS [NodeJS]

Não, é porque o localIP está mal configurado. EADDRNOTAVAIL -> Address not avaliable. Provavelmente está a tentar configurar para o seu IP externo, mas tem de ser no IP local. No linux para ver o IP local basta fazer o comando ifconfig.

Também pode ser versão desatualizada do node, no meu caso eu uso a 10.3.0.

EDIT: testei agora, e se estiver a usar uma VPS e não tiver acesso ao IP interno, pode usar o IP externo que vai funcionar na mesma.

Last edited by bruxo00; 06/06/2018 at 12:47 PM.
bruxo00 is offline   Reply With Quote
Old 06/06/2018, 12:16 PM   #5
silenthill
Huge Clucker
 
silenthill's Avatar
 
Join Date: Nov 2011
Posts: 343
Reputation: 21
Default Re: SAMPMailJS [NodeJS]

Bruxo, você é um bruxo, parabéns!!
silenthill is offline   Reply With Quote
Old 06/06/2018, 01:02 PM   #6
Locky_
High-roller
 
Locky_'s Avatar
 
Join Date: Jul 2012
Posts: 1,609
Reputation: 326
Default Re: SAMPMailJS [NodeJS]

Muito bom.
Sobre os bugs de acentos, isso é a codificação (do arquivo ou durante a requesição http do servidor).

Acredito que, você deve codificar em utf8 ou fazer o procedimento de decodificação do utf8 assim que obter o conteúdo do e-mail no seu script de hospedagem. Assim não ocorrerá problemas. ^^
Locky_ is offline   Reply With Quote
Old 06/06/2018, 01:27 PM   #7
bruxo00
High-roller
 
bruxo00's Avatar
 
Join Date: Oct 2012
Location: Portugal
Posts: 1,121
Reputation: 152
Default Re: SAMPMailJS [NodeJS]

Quote:
Originally Posted by Locky_ View Post
Muito bom.
Sobre os bugs de acentos, isso é a codificação (do arquivo ou durante a requesição http do servidor).

Acredito que, você deve codificar em utf8 ou fazer o procedimento de decodificação do utf8 assim que obter o conteúdo do e-mail no seu script de hospedagem. Assim não ocorrerá problemas. ^^
Obrigado! Já tentei várias formas de descodificar para UTF-8 em NodeJS mas nenhuma das formas que tentei funciona, por isso acho mesmo que o problema é mesmo o SAMP. Vou fazer mais alguns testes para ver se o problema é do NodeJS ou se é do SAMP, e numa próxima atualização tento corrigir.
bruxo00 is offline   Reply With Quote
Old 06/06/2018, 02:11 PM   #8
Ermanhaut
Gangsta
 
Ermanhaut's Avatar
 
Join Date: Apr 2016
Location: Curitiba
Posts: 635
Reputation: 47
Default Re: SAMPMailJS [NodeJS]

Muito bom, eu já uso o NodeJS para estudar p5.js e com certeza usarei esta include no meu projeto.
__________________
try, try and try again
Ermanhaut is offline   Reply With Quote
Old 06/06/2018, 03:55 PM   #9
JR_Junior
Huge Clucker
 
Join Date: Nov 2011
Location: Brazil
Posts: 216
Reputation: 54
Lightbulb Re: SAMPMailJS [NodeJS]

Quote:
Originally Posted by bruxo00 View Post
Obrigado! Já tentei várias formas de descodificar para UTF-8 em NodeJS mas nenhuma das formas que tentei funciona, por isso acho mesmo que o problema é mesmo o SAMP. Vou fazer mais alguns testes para ver se o problema é do NodeJS ou se é do SAMP, e numa próxima atualização tento corrigir.
Então, parceiro... Acho que a solução está aqui:

Baixe essa include: https://github.com/oscar-broman/strl...ter/strlib.inc

Antes de enviar a o email você vai usar a seguinte função:
PHP Code:
new TextoEmail[SAMPMAILJS_MAXPOSTDATA];
new 
UTF8TextoEmail[SAMPMAILJS_MAXPOSTDATA];

format(TextoEmailsizeof(TextoEmail), "Esse é meu email com acentuação de caracteres.");
utf8encode(TextoEmailUTF8TextoEmail); 
SendEmail("NOME","DESTINATÁRIO""Teste de acentuação"UTF8TextoEmail); 
Esse problema ocorre no plugin Discord Connector e eu resolvi dessa forma: http://forum.sa-mp.com/showpost.php?...&postcount=157

Espero que funcione no teu script também, vale a pena testar!
JR_Junior is offline   Reply With Quote
Old 06/06/2018, 06:36 PM   #10
bruxo00
High-roller
 
bruxo00's Avatar
 
Join Date: Oct 2012
Location: Portugal
Posts: 1,121
Reputation: 152
Default Re: SAMPMailJS [NodeJS]

Quote:
Originally Posted by JR_Junior View Post
Então, parceiro... Acho que a solução está aqui:

Baixe essa include: https://github.com/oscar-broman/strl...ter/strlib.inc

Antes de enviar a o email você vai usar a seguinte função:
PHP Code:
new TextoEmail[SAMPMAILJS_MAXPOSTDATA];
new 
UTF8TextoEmail[SAMPMAILJS_MAXPOSTDATA];

format(TextoEmailsizeof(TextoEmail), "Esse é meu email com acentuação de caracteres.");
utf8encode(TextoEmailUTF8TextoEmail); 
SendEmail("NOME","DESTINATÁRIO""Teste de acentuação"UTF8TextoEmail); 
Esse problema ocorre no plugin Discord Connector e eu resolvi dessa forma: http://forum.sa-mp.com/showpost.php?...&postcount=157

Espero que funcione no teu script também, vale a pena testar!
Já tinha testado assim, mas não tinha funcionado. Mas refiz agora e funcionou

Obrigado
bruxo00 is offline   Reply With Quote
Reply

Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
[Tool/Web/Other] node.ucp - A full-fledged isomorphic UCP [nodejs + reactjs] BroZeus Tools and Files 17 07/04/2018 06:24 PM


All times are GMT. The time now is 04:32 AM.


Powered by vBulletin® Version 3.8.6
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.