Portal SAMP
[Pedido] Sistema de recuperação de senha e envio de email automático - Versão de Impressão

+- Portal SAMP (https://portalsamp.com)
+-- Fórum: SA-MP (https://portalsamp.com/forumdisplay.php?fid=5)
+--- Fórum: Área de suporte (https://portalsamp.com/forumdisplay.php?fid=6)
+--- Tópico: [Pedido] Sistema de recuperação de senha e envio de email automático (/showthread.php?tid=3523)



Sistema de recuperação de senha e envio de email automático - Slach - 15/04/2023

Olá a todos os membros! 

Estou desenvolvendo a muito tempo uma GM do 0 que está ficando gigante, está bem feito e organizado. Sempre sanei várias dúvidas referente a códigos e desenvolvimeto no portal samp, por isso só tenho a agradecer o mesmo, mas eu nunca pensei que algum dia eu pudesse criar um tópico aqui, pois bem esse dia chegou!

Venho aqui pedir a ajuda de todos, porque não estou coseguindo de jeito nenhum e nem sei por onde começar com um sistema de enviar E-Mail automático ao jogador

Por exemplo: Quando ele quiser redefinir a senha, será enviado um E-Mail automático pelo sistema.

Eu já pesquisei em todos os foruns, inclusive em outras linguas. Tem alguns tópicos aqui no portal samp mesmo, mas estão desatualizados, que usam o próprio Gmail do google e o google desativou a função em 2022, com isso, não sendo possível mais usar.  

Eu já entendi que devo deixar o mailer.php online, usar o mailer.inc e dentro do GM usar a função SendMail para enviar o E-Mail, porém não sei por onde começar. Eu não sei onde eu encontro o mailer.php que funcione e nem ao menos onde eu posso hospeda-lo, no caso em todos os tutoriais que vi, só mostraram os arquivos que devem ser usados, porém nenhum mostrava o passo a passo, desde baixar os arquivos até configura-los corretamente.

EU RELMENTE necessito da ajuda de todos, quem puder me ajudar, vou agradecer de coração mesmo! Estou quase no fim do meu projeto e uma das unicas coisas que ainda faltam é um sistema que envie E-Mail automático aos jogadores, de resto, não tenho mais nenhuma dúvida, são 7 anos desenvolvendo esse GM, claro, não foram 7 anos interruptos mas é um tempo considerável.

Se enviar algum tutorial desatualizado, peço que se puder me explicar o passo a passo do tutorial, me mostrar uma direção clara, ficarei grato!

Desde já muito obrigado a todos pela atenção! Ficarei aguardando uma resposta.


RE: Sistema de recuperação de senha e envio de email automático - Dr Editor - 16/04/2023

https://portalsamp.com/showthread.php?tid=676

Nesse link você encontra referência para utilização do serviço de e-mail de um domínio que possui esta funcionalidade habilitada.
Caso não, é necessário aprender a utilizar PHPMailer e configurar uma conta através do gmail, outlook...

@EDIT

Esqueci que havia criado um sistema de token com PHPMailer. Não é pra recuepração de senha, mas pode utilizar esta base pra fazer algo relacionado:
https://github.com/eduardocoracini/Login-com-Validacao-via-Email


RE: Sistema de recuperação de senha e envio de email automático - Slach - 06/05/2023

(16/04/2023 19:09)@EDIT Escreveu: Esqueci que havia criado um sistema de token com PHPMailer. Não é pra recuepração de senha, mas pode utilizar esta base pra fazer algo relacionado:
https://github.com/eduardocoracini/Login...-via-Email


Achei bem interessante esse @EDIT com esse link que você disponibilizou, parece ser bem simples de usar. Porem não manjo nada de PHP, você não conseguiria me auxiliar na instalação desse sistema PHPMailer? Um passo á passo ou se você tiver algum video que explique a instalação corretamente ( Em um servidor SA:MP obviamente ). Realmente estou pedindo a sua ajuda desesperadamente, pois só falta esse sistema para o meu servidor ficar totalmente completo. Se puder me ajudar, ficarei extremamente grato pela sua ajuda meu amigo ou de alguém que possa me auxiliar nessa questão!


RE: Sistema de recuperação de senha e envio de email automático - Dr Editor - 09/05/2023

Perdão pela demora.
Estou fora do SA:MP, mas como é algo relativamente simples e não preciso jogar para testar vou te fazer o meio de campo e se tiver alguma dúvida pode ir perguntando que eu ou outro membro vai ajudar.

Vou anexar os arquivos do PHPMailer para fazer funcionar este sistema e abaixo vou colocar o script pawn e o PHP.
O sistema funciona, PORÉM, não está pronto para uso. Deve adicionar onde salvar o token e onde carregar para fazer a verificação ingame, bem como como o jogador deve fazer para digitar o token.
Este código é apenas o pontapé inicial para fazer esse sistema, mas a parte que você possui dificuldade está pronta.

Pawn:
(feito em forma de gamemode, mas você vai precisar apenas da função EnviarTokenRecuperacao e a definição PHP_URL)
Código:
#include <a_samp>
#include <zcmd>

#define PHP_URL "localhost/sendmail/send-mail.php?Email=%s&Token=%i"

main()
{
    
}

CMD:recuperarconta(playerid, params[])
{
    EnviarTokenRecuperacao(playerid, "seuemail@dominio.com.br", random(999999) + 100000);
    return 1;
}

stock EnviarTokenRecuperacao(playerid, email[], token)
{
    if(!IsPlayerConnected(playerid))
        return 0;
    
    static url[200];
    format(url, sizeof url, PHP_URL, email, token);
    HTTP(playerid, HTTP_GET, url, "", "OnPlayerRequestToken");
    return 1;
}

forward OnPlayerRequestToken(index, response_code, data[]);
public OnPlayerRequestToken(index, response_code, data[])
{
    if (response_code == 200)
    {
        SendClientMessage(index, -1, "Em breve você receberá um e-mail contendo um token de recuperação da conta.");
        
        // restante do código
    }
    else
        SendClientMessage(index, -1, "Houve uma instabilidade em nosso servidor e não foi possível enviar o token. Fale com a administração.");
    return true;
}

PHP:
(Altere o e-mail e senha do outlook ou outro serviço de e-mail)
Código PHP:
<?php
if(empty($_GET["Email"]) || empty($_GET["Token"]))
    die(0);

$Email $_GET["Email"];
$Token $_GET["Token"];

require 
"PHPMailer/PHPMailer.php";
require 
"PHPMailer/SMTP.php";
require 
"PHPMailer/Exception.php";

$mail = new \PHPMailer\PHPMailer\PHPMailer();
$mail->isSMTP();
$mail->Host "smtp.office365.com";
$mail->SMTPAuth true;
$mail->SMTPSecure = \PHPMailer\PHPMailer\PHPMailer::ENCRYPTION_STARTTLS;
$mail->setLanguage("pt");
$mail->CharSet PHPMailer\PHPMailer\PHPMailer::CHARSET_UTF8;
$mail->Username "email@hotmail.com.br"// E-mail outlook <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
$mail->Password "pdw123"// Senha da conta <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
$mail->Port 587;

$mail->setFrom("email@hotmail.com.br"); // E-mail outlook <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
$mail->addAddress($Email);
$mail->isHTML(true);
$mail->Subject "E-mail de recuperação de conta - SA:MP";
$mail->Body "Você solicitou um token de recuperação!<br>Token: <b>{$Token}</b>";

if(!
$mail->send())
    echo 0;
else
    echo 1

PHPMailer: em anexo


Como fazer:
  1. Descompacte a pasta PHPMailer e jogue a pasta dentro do servidor PHP.
  2. Copie o conteúdo do arquivo PHP acima e cole em um arquivo de texto e salve como "send-mail.php".
  3. Para testar se não há erro por parte do servidor, basta jogar o link do arquivo "send-mail.php" no navegador: www.servidor.com/send-mail.php?Email=email_destino@dominio.com.br&Token=12345
  4. Se funcionar, basta ajustar o link da definição PHP_URL no script pawn.
Novamente, se tiver alguma dúvida só questionar que alguém irá ajudar.
Espero ter ajudado!


RE: Sistema de recuperação de senha e envio de email automático - Slach - 12/05/2023

(09/05/2023 11:20)Dr Editor Escreveu: Perdão pela demora.
Estou fora do SA:MP, mas como é algo relativamente simples e não preciso jogar para testar vou te fazer o meio de campo e se tiver alguma dúvida pode ir perguntando que eu ou outro membro vai ajudar.

Vou anexar os arquivos do PHPMailer para fazer funcionar este sistema e abaixo vou colocar o script pawn e o PHP.
O sistema funciona, PORÉM, não está pronto para uso. Deve adicionar onde salvar o token e onde carregar para fazer a verificação ingame, bem como como o jogador deve fazer para digitar o token.
Este código é apenas o pontapé inicial para fazer esse sistema, mas a parte que você possui dificuldade está pronta.

Pawn:
(feito em forma de gamemode, mas você vai precisar apenas da função EnviarTokenRecuperacao e a definição PHP_URL)
Código:
#include <a_samp>
#include <zcmd>

#define PHP_URL "localhost/sendmail/send-mail.php?Email=%s&Token=%i"

main()
{
    
}

CMD:recuperarconta(playerid, params[])
{
    EnviarTokenRecuperacao(playerid, "seuemail@dominio.com.br", random(999999) + 100000);
    return 1;
}

stock EnviarTokenRecuperacao(playerid, email[], token)
{
    if(!IsPlayerConnected(playerid))
        return 0;
    
    static url[200];
    format(url, sizeof url, PHP_URL, email, token);
    HTTP(playerid, HTTP_GET, url, "", "OnPlayerRequestToken");
    return 1;
}

forward OnPlayerRequestToken(index, response_code, data[]);
public OnPlayerRequestToken(index, response_code, data[])
{
    if (response_code == 200)
    {
        SendClientMessage(index, -1, "Em breve você receberá um e-mail contendo um token de recuperação da conta.");
        
        // restante do código
    }
    else
        SendClientMessage(index, -1, "Houve uma instabilidade em nosso servidor e não foi possível enviar o token. Fale com a administração.");
    return true;
}

PHP:
(Altere o e-mail e senha do outlook ou outro serviço de e-mail)
Código PHP:
<?php
if(empty($_GET["Email"]) || empty($_GET["Token"]))
    die(0);

$Email $_GET["Email"];
$Token $_GET["Token"];

require 
"PHPMailer/PHPMailer.php";
require 
"PHPMailer/SMTP.php";
require 
"PHPMailer/Exception.php";

$mail = new \PHPMailer\PHPMailer\PHPMailer();
$mail->isSMTP();
$mail->Host "smtp.office365.com";
$mail->SMTPAuth true;
$mail->SMTPSecure = \PHPMailer\PHPMailer\PHPMailer::ENCRYPTION_STARTTLS;
$mail->setLanguage("pt");
$mail->CharSet PHPMailer\PHPMailer\PHPMailer::CHARSET_UTF8;
$mail->Username "email@hotmail.com.br"// E-mail outlook <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
$mail->Password "pdw123"// Senha da conta <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
$mail->Port 587;

$mail->setFrom("email@hotmail.com.br"); // E-mail outlook <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
$mail->addAddress($Email);
$mail->isHTML(true);
$mail->Subject "E-mail de recuperação de conta - SA:MP";
$mail->Body "Você solicitou um token de recuperação!<br>Token: <b>{$Token}</b>";

if(!
$mail->send())
    echo 0;
else
    echo 1

PHPMailer: em anexo


Como fazer:
  1. Descompacte a pasta PHPMailer e jogue a pasta dentro do servidor PHP.
  2. Copie o conteúdo do arquivo PHP acima e cole em um arquivo de texto e salve como "send-mail.php".
  3. Para testar se não há erro por parte do servidor, basta jogar o link do arquivo "send-mail.php" no navegador: www.servidor.com/send-mail.php?Email=email_destino@dominio.com.br&Token=12345
  4. Se funcionar, basta ajustar o link da definição PHP_URL no script pawn.
Novamente, se tiver alguma dúvida só questionar que alguém irá ajudar.
Espero ter ajudado!

Mano, eu só tenho a te agradecer pela sua ajuda! Você sinceramente salvou o meu projeto, era o único sistema que faltava para o meu projeto ficar completo, mas como não manjo nada de PHP e essas outras coisas, encontrei muita dificuldade em desenvolver algo! Assisti muitos videos, até russos e americanos e nada, mas com o seu breve tutorial e a disponibilização do seu script para estudo eu FINALMENTE consegui! Muito obrigado mesmo!

Eu só tenho mais algumas duvidas bobas agora. Que não atrapalha em nada no projeto, mas com toda certeza deixaria mais profissional, bom vamos lá:

1° - Perg.: Como eu faço para colocar acentos na mensagem que será enviada pelo URL, não consegui resolver esse pequeno problema, vou dar um exemplo.

format(MsgEmail,sizeof(MsgEmail),"Olá+<b>%s</b>,<br>Seja+muito+Bem+Vindo(a)+ao+servidor<br><br>", NomeInserido[playerid]);

format(url, sizeof url, PHP_URL, EmailInserido[playerid], AssuntoE, MsgEmail);


NO EMAIL A MENSAGEM CHEGARÁ ASSIM:

"Ol[font=Graphik, -apple-system, BlinkMacSystemFont, "Segoe UI", Arial, Helvetica, sans-serif]� [Fulano], Seja muito Bem Vindo(a) ao servidor..."

Com esse simbolo ( [font=Graphik, -apple-system, BlinkMacSystemFont, "Segoe UI", Arial, Helvetica, sans-serif]� )[/font] que não reconheceu o acento ( á ). Se eu enviar o URL direto pela internet, ele reconhece normal os acentos e simbolos, agora se for enviado pelo sistema do servidor, ai acontece isso! Teria como resolver isso direto pelo código ou algo do tipo? Se for enviado pelo sistema do servidor, não reconhece simbolos também.

2° - Perg.: Os emails que serão enviados diariamente por esse sistema PHPMailer são ilimitados, né? Ou existe algum limite diário?

- Mais uma vez, meus sinceros agradecimentos! Desde já obrigado pela atenção!
[/font]



RE: Sistema de recuperação de senha e envio de email automático - Dr Editor - 12/05/2023

(12/05/2023 16:07)Slach Escreveu: Mano, eu só tenho a te agradecer pela sua ajuda! Você sinceramente salvou o meu projeto, era o único sistema que faltava para o meu projeto ficar completo, mas como não manjo nada de PHP e essas outras coisas, encontrei muita dificuldade em desenvolver algo! Assisti muitos videos, até russos e americanos e nada, mas com o seu breve tutorial e a disponibilização do seu script para estudo eu FINALMENTE consegui! Muito obrigado mesmo!

Eu só tenho mais algumas duvidas bobas agora. Que não atrapalha em nada no projeto, mas com toda certeza deixaria mais profissional, bom vamos lá:

1° - Perg.: Como eu faço para colocar acentos na mensagem que será enviada pelo URL, não consegui resolver esse pequeno problema, vou dar um exemplo.

format(MsgEmail,sizeof(MsgEmail),"Olá+<b>%s</b>,<br>Seja+muito+Bem+Vindo(a)+ao+servidor<br><br>", NomeInserido[playerid]);

format(url, sizeof url, PHP_URL, EmailInserido[playerid], AssuntoE, MsgEmail);


NO EMAIL A MENSAGEM CHEGARÁ ASSIM:

"Ol[font=Graphik, -apple-system, BlinkMacSystemFont, "Segoe UI", Arial, Helvetica, sans-serif]� [Fulano], Seja muito Bem Vindo(a) ao servidor..."

Com esse simbolo ( [font=Graphik, -apple-system, BlinkMacSystemFont, "Segoe UI", Arial, Helvetica, sans-serif]� )[/font] que não reconheceu o acento ( á ). Se eu enviar o URL direto pela internet, ele reconhece normal os acentos e simbolos, agora se for enviado pelo sistema do servidor, ai acontece isso! Teria como resolver isso direto pelo código ou algo do tipo? Se for enviado pelo sistema do servidor, não reconhece simbolos também.

2° - Perg.: Os emails que serão enviados diariamente por esse sistema PHPMailer são ilimitados, né? Ou existe algum limite diário?

- Mais uma vez, meus sinceros agradecimentos! Desde já obrigado pela atenção!
[/font]

Os acentos podem ser em função da codificação do seu arquivo pawn compilado.
Se você usar UTF-8, mesma codificação do arquivo PHP deveria dar certo.
Se estiver usando alguma ocidental mude também no arquivo PHP:

Código PHP:
$mail->CharSet "Windows-1252"

@EDIT

Sobre limitação:
PHPMailer não é serviço de e-mail. O que pode limitar é o serviço você configurou nele e também a quantidade de requisições no servidor pode afetar a velocidade de resposta, mas estamos falando de muitas requisições constantes em pouco intervalo de tempo, como um ataque.

Fico feliz por ter ajudado.
Abraço!


RE: Sistema de recuperação de senha e envio de email automático - Slach - 13/05/2023

(12/05/2023 17:43)Dr Editor Escreveu:
(12/05/2023 16:07)Slach Escreveu: Mano, eu só tenho a te agradecer pela sua ajuda! Você sinceramente salvou o meu projeto, era o único sistema que faltava para o meu projeto ficar completo, mas como não manjo nada de PHP e essas outras coisas, encontrei muita dificuldade em desenvolver algo! Assisti muitos videos, até russos e americanos e nada, mas com o seu breve tutorial e a disponibilização do seu script para estudo eu FINALMENTE consegui! Muito obrigado mesmo!

Eu só tenho mais algumas duvidas bobas agora. Que não atrapalha em nada no projeto, mas com toda certeza deixaria mais profissional, bom vamos lá:

1° - Perg.: Como eu faço para colocar acentos na mensagem que será enviada pelo URL, não consegui resolver esse pequeno problema, vou dar um exemplo.

format(MsgEmail,sizeof(MsgEmail),"Olá+<b>%s</b>,<br>Seja+muito+Bem+Vindo(a)+ao+servidor<br><br>", NomeInserido[playerid]);

format(url, sizeof url, PHP_URL, EmailInserido[playerid], AssuntoE, MsgEmail);


NO EMAIL A MENSAGEM CHEGARÁ ASSIM:

"Ol[font=Graphik, -apple-system, BlinkMacSystemFont, "Segoe UI", Arial, Helvetica, sans-serif]� [Fulano], Seja muito Bem Vindo(a) ao servidor..."

Com esse simbolo ( [font=Graphik, -apple-system, BlinkMacSystemFont, "Segoe UI", Arial, Helvetica, sans-serif]� )[/font] que não reconheceu o acento ( á ). Se eu enviar o URL direto pela internet, ele reconhece normal os acentos e simbolos, agora se for enviado pelo sistema do servidor, ai acontece isso! Teria como resolver isso direto pelo código ou algo do tipo? Se for enviado pelo sistema do servidor, não reconhece simbolos também.

2° - Perg.: Os emails que serão enviados diariamente por esse sistema PHPMailer são ilimitados, né? Ou existe algum limite diário?

- Mais uma vez, meus sinceros agradecimentos! Desde já obrigado pela atenção!
[/font]

Os acentos podem ser em função da codificação do seu arquivo pawn compilado.
Se você usar UTF-8, mesma codificação do arquivo PHP deveria dar certo.
Se estiver usando alguma ocidental mude também no arquivo PHP:

Código PHP:
$mail->CharSet "Windows-1252"

@EDIT

Sobre limitação:
PHPMailer não é serviço de e-mail. O que pode limitar é o serviço você configurou nele e também a quantidade de requisições no servidor pode afetar a velocidade de resposta, mas estamos falando de muitas requisições constantes em pouco intervalo de tempo, como um ataque.

Fico feliz por ter ajudado.
Abraço!

O arquivo que você me mandou "send-mail.php", que eu estudei e dei um modificada. O código está assim:

<?php

if(empty($_GET["Email"]) || empty($_GET["Assunto"]) || empty($_GET["Msg"]))
    die(0);

$Email = $_GET["Email"];
$Assunto = $_GET["Assunto"];
$Msg = $_GET["Msg"];

require "PHPMailer/PHPMailer.php";
require "PHPMailer/SMTP.php";
require "PHPMailer/Exception.php";

$mail = new \PHPMailer\PHPMailer\PHPMailer();
$mail->isSMTP();
$mail->Host = "smtp.office365.com";
$mail->SMTPAuth = true;
$mail->SMTPSecure = \PHPMailer\PHPMailer\PHPMailer::ENCRYPTION_STARTTLS;
$mail->setLanguage("pt");
$mail->CharSet = PHPMailer\PHPMailer\PHPMailer::CHARSET_UTF8;
$mail->Username = "E-Mail que enviará os emails";
$mail->Password = "Senha do E-Mail";
$mail->Port = 587;

$mail->setFrom("E-Mail que enviará os emails");
$mail->addAddress($Email);
$mail->isHTML(true);
$mail->Subject = "{$Assunto}";
$mail->Body = "{$Msg}";

if(!$mail->send())
    echo 0;
else
    echo 1;

Como você pode ver, o CharSet está dessa forma: "$mail->CharSet = PHPMailer\PHPMailer\PHPMailer::CHARSET_UTF8;"

1° Perg.: Como eu faço para saber a codificação do meu "arquivo pawn compilado" que você citou acima?

2° Perg.: E quando eu achar, se for diferente a codificação no "arquivo pawn compilado", no "$mail->CharSet" eu mantenho esses "PHPMailer\PHPMailer\PHPMailer:"?

Ficaria tipo: $mail->CharSet = PHPMailer\PHPMailer\PHPMailer::Windows-1252;

3° Perg.: Ultima pergunta, meu amigo. No código que mandei logo acima, mais especificamente no "$mail->Subject ="  e "$mail->Body =", é correto eu deixar o "$Assunto"  e "$Msg" daquela forma? Tipo, dentro de Aspas ( " " ) e dentro de Colchetes ( { } ).

- Tomara que seja meu último tópico e eu consiga sanar minhas dúvidas, já estou te chateando eu acho. Kkk



RE: Sistema de recuperação de senha e envio de email automático - Dr Editor - 15/05/2023

(13/05/2023 14:51)Slach Escreveu: O arquivo que você me mandou "send-mail.php", que eu estudei e dei um modificada. O código está assim:

<?php

if(empty($_GET["Email"]) || empty($_GET["Assunto"]) || empty($_GET["Msg"]))
    die(0);

$Email = $_GET["Email"];
$Assunto = $_GET["Assunto"];
$Msg = $_GET["Msg"];

require "PHPMailer/PHPMailer.php";
require "PHPMailer/SMTP.php";
require "PHPMailer/Exception.php";

$mail = new \PHPMailer\PHPMailer\PHPMailer();
$mail->isSMTP();
$mail->Host = "smtp.office365.com";
$mail->SMTPAuth = true;
$mail->SMTPSecure = \PHPMailer\PHPMailer\PHPMailer::ENCRYPTION_STARTTLS;
$mail->setLanguage("pt");
$mail->CharSet = PHPMailer\PHPMailer\PHPMailer::CHARSET_UTF8;
$mail->Username = "E-Mail que enviará os emails";
$mail->Password = "Senha do E-Mail";
$mail->Port = 587;

$mail->setFrom("E-Mail que enviará os emails");
$mail->addAddress($Email);
$mail->isHTML(true);
$mail->Subject = "{$Assunto}";
$mail->Body = "{$Msg}";

if(!$mail->send())
    echo 0;
else
    echo 1;

Como você pode ver, o CharSet está dessa forma: "$mail->CharSet = PHPMailer\PHPMailer\PHPMailer::CHARSET_UTF8;"

1° Perg.: Como eu faço para saber a codificação do meu "arquivo pawn compilado" que você citou acima?

2° Perg.: E quando eu achar, se for diferente a codificação no "arquivo pawn compilado", no "$mail->CharSet" eu mantenho esses "PHPMailer\PHPMailer\PHPMailer:"?

Ficaria tipo: $mail->CharSet = PHPMailer\PHPMailer\PHPMailer::Windows-1252;

3° Perg.: Ultima pergunta, meu amigo. No código que mandei logo acima, mais especificamente no "$mail->Subject ="  e "$mail->Body =", é correto eu deixar o "$Assunto"  e "$Msg" daquela forma? Tipo, dentro de Aspas ( " " ) e dentro de Colchetes ( { } ).

- Tomara que seja meu último tópico e eu consiga sanar minhas dúvidas, já estou te chateando eu acho. Kkk

1 - Provavelmente com o IDE nativo não seja possível. Para isso terá que usar um IDE mais "profissional" para definir a codificação ou usar algum outro programa que realize isso sem precisar configurar o compilador.

2 - Pode substituir essa linha conforme o que respondi anteriormente:
Código PHP:
$mail->CharSet "Windows-1252"

3 - Não há necessidades de chaves nesta situação. Pode remover.