Olá cidadãos do TibiaKing! Como tenho visto muitas pessoas tendo problemas com o sistema de envio de e-mail do Lost Account através do PHP Mailer, resolvi postar pra vocês uma pequena alteração que fiz no código para utilizar o MailGun no disparo dos e-mails no lugar de um SMTP convencional. Alguns avisos:
O MailGun é uma plataforma estrangeira, que estou indicando por ter uma API de fácil entendimento. Não sou responsável pela plataforma ou suporte da mesma.
O plano grátis do MailGun suporta 10.000 envios por mês.
Caso você não tenha um domínio para utilizar (no-ip não é considerado como domínio), terá que fazer os envios através do sandbox deles, que permite 300 envios por hora, limitados a 10.000 por mês.
Para começar o tutorial, se cadastre na plataforma do MailGun aqui: https://mailgun.com/signup (depois que cadastrar, confirme sua conta através do link enviado por e-mail) Em seguida, adicione seu domínio aqui: https://mailgun.com/app/domains/new Para confirmar seu domínio, será necessário criar algumas entradas de DNS que estarão explicadas na página do MailGun. Assim que o domínio for adicionado, clique no mesmo. (Caso não tenha domínio, clique no domínio sandbox). Precisaremos dos seguintes dados para continuar:
API Key
API Base URL
Default SMTP Login
Depois que obtiver os dados acima, abra o arquivo lostaccount.php e procure pela seguinte parte de código: $mail = new PHPMailer();
if ($config['site']['smtp_enabled'])
{
$mail->IsSMTP();
$mail->Host = $config['site']['smtp_host'];
$mail->Port = $config['site']['smtp_port'];
$mail->SMTPAuth = $config['site']['smtp_auth'];
$mail->Username = $config['site']['smtp_user'];
$mail->Password = $config['site']['smtp_pass'];
}
$mail->IsMail();
$mail->IsHTML(true);
$mail->From = $config['site']['mail_address'];
$mail->AddAddress($account->getCustomField('email'));
$mail->Subject = $config['server']['serverName']." - Link to >set new password to account<";
$mail->Body = $mailBody;
$enviado = $mail->Send();
if($enviado)
{
$account->set('email_code', $newcode);
$account->set('next_email', (time() + $config['site']['email_lai_sec_interval']));
$account->save();
$main_content .= '<br />Link with informations needed to set new password has been sent to account e-mail address. You should receive this e-mail in 15 minutes. Please check your inbox/spam directory.';
}
else
{
$account->set('next_email', (time() + 60));
$account->save();
$main_content .= '<br />An error occorred while sending email! Try again or contact with admin. ('.$mail->ErrorInfo.')';
}Remova todo esse código e substitua por: $to = ''.$account->getCustomField('email').'';
$subject = ''.$config['server']['serverName'].' - Set >new password to account<';
$ch = curl_init();
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
curl_setopt($ch, CURLOPT_USERPWD, 'api:SUA API KEY');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_URL,
'https://api.mailgun.net/v2/SEUDOMINIO/messages');
curl_setopt($ch, CURLOPT_POSTFIELDS,
array('from' => 'SEU OT <
[email protected]>',
'to' => $to,
'subject' => $subject,
'html' => $mailBody,
'text' => $mailBody));
$result = curl_exec($ch);
$info = curl_getinfo($ch);
curl_close($ch);
if($info['http_code'] == 200){
$account->set('email_code', $newcode);
$account->set('next_email', (time() + $config['site']['email_lai_sec_interval']));
$account->save();
$main_content .= '<br />Link with informations needed to set new password has been sent to account e-mail address. You should receive this e-mail in 15 minutes. Please check your inbox/spam directory.';
}E em seguida altere as seguintes linhas para configurar de acordo com sua conta:curl_setopt($ch, CURLOPT_USERPWD, 'api:key-xxxxxxx'); //Substitua key-xxxxxxx pela sua API Key
'https://api.mailgun.net/v2/SEUDOMINIO/messages'); //Altere SEUDOMINIO com o domínio que se encontra no final da API Base URL
array('from' => 'SEU OT <
[email protected]>', //Substitua pelo nome e e-mail do jogo (caso tenha domínio). Caso não tenha domínio, utilize o e-mail que está em Default SMTP Login
E pronto, seu Lost Account já estará funcionando normalmente! Observações:
O código final tem algumas modificações para facilitar na configuração e na utilização, mas como a versão final foi desenvolvida para venda, resolvi postar uma versão simplificada que resolve o problema.
É necessário ter o PHP cURL funcionando para usar esse método.
O código foi feito em cima do Gesior 2012: https://github.com/gesior/Gesior2012
Façam bom proveito (Esse tutorial foi completamente escrito por mim, incluindo o código. Qualquer cópia deve ser previamente autorizada e conter os devidos créditos.)