[Include] SAMPMailJS [NodeJS]
#1

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
  • 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:

Код:
#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у fazer o comando na linha de comandos (Windows e Linux):

PHP код:
npm install http --save
npm install nodemailer 
--save
npm install url 
--save
npm install fs 
--save 
Para correr o scrip, basta navegar atй а pasta onde ele estб e correr na linha de comandos:

PHP код:
node sampmail.js 
  • STRLIB
Й necessбrio fazer download da include strlib.inc. Pode ser encontrada aqui.


USO NORMAL

Код:
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

Код:
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:
<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/SAMPMailJSnl6...1.91878385</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:

Код:
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
Reply
#2

Muito legal o script mano, parabйns
Reply
#3

Isso era para acontecer?

Reply
#4

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.
Reply
#5

Bruxo, vocк й um bruxo, parabйns!!
Reply
#6

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. ^^
Reply
#7

Quote:
Originally Posted by Locky_
Посмотреть сообщение
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.
Reply
#8

Muito bom, eu jб uso o NodeJS para estudar p5.js e com certeza usarei esta include no meu projeto.
Reply
#9

Quote:
Originally Posted by bruxo00
Посмотреть сообщение
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 код:
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!
Reply
#10

Quote:
Originally Posted by JR_Junior
Посмотреть сообщение
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 код:
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
Reply
#11

Quote:
Originally Posted by bruxo00
Посмотреть сообщение
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.
Agora funcionou. Reputado.
Reply
#12

Quote:
Originally Posted by bruxo00
Посмотреть сообщение
Jб tinha testado assim, mas nгo tinha funcionado. Mas refiz agora e funcionou

Obrigado
Й isso aк kkkk Talvez nгo tinha feito dessa forma que passei. O importante й que deu certo!
Reply
#13

Bom trabalho ^^
Reply
#14

Nossa ficou bem bacana o cуdigo, parabйns. +Rep
Reply
#15

Agora suporta templates em HTML. Ler o post principal para mais informaзхes.
Reply
#16

Quote:
Originally Posted by bruxo00
Посмотреть сообщение
Agora suporta templates em HTML. Ler o post principal para mais informaзхes.
Faзa um script de exemplo usando as templates, a explicaзгo nгo ficou muito clara.
Reply
#17

Quote:
Originally Posted by Ermanhaut
Посмотреть сообщение
Faзa um script de exemplo usando as templates, a explicaзгo nгo ficou muito clara.
No post principal tem um exemplo de como funciona. Quando eu tiver tempo refaзo a explicaзгo.
Reply
#18

Boa include, gostei do cуdigo, bem otimizado e organizado. Ter outras ferramentas de email й gratificante pra comunidade.
Reply
#19

Quote:
Originally Posted by bruxo00
Посмотреть сообщение
No post principal tem um exemplo de como funciona. Quando eu tiver tempo refaзo a explicaзгo.
Jб atualizei a explicaзгo, acho que estб melhor.

Obrigado a todos
Reply
#20

Simplesmente, incrнvel!
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)