Se seu serviço de hospedagem não tem servidor de e-mails (ou se o servidor de e-mails vive caindo, ou se é impossível de configurar, etc.) você pode enviar os e-mails do WordPress através de uma conexão SMTP com outro servidor com o plugin WP Mail SMTP.
Para enviar os e-mails através do gmail de forma mais segura, não é mais aconselhável usar os dados SMTP do Google. Agora o plugin WP Mail SMTP precisa do código de uma aplicação web. Embora isso possa parecer trabalhoso, na verdade é um processo que, além de rápido, é grátis. Além disso, usar os dados de SMTP do Google requeria uma outra configuração (usar aplicativos menos seguros) que era mais complicada do que obter o seu token.
Passo 1: Instale o plugin WP Mail SMTP
Baixe o plugin através do repositório ou acesse seu Painel, vá em Plugins, depois em Adicionar Novo e digite WP Mail SMTP
(a imagem do plugin é um pombo). Instale e ative.
Vá em Configurações→ WP Mail SMTP e preencha os campos E-mail do remetente e Nome do remetente. IMPORTANTE: o campo E-mail do remetente precisa ser preenchido com o seu endereço do gmail.
No campo Mailer selecione Gmail e marque o campo Configura o endereço de retorno para corresponder ao E-mail do remetente
.
Na seção logo abaixo você vai precisar dos códigos da sua aplicação Web lá no Gmail. Siga os próximos passos, ou envie este link para o seu cliente, para consegui-los.
Passo 2: Crie uma Aplicação Web
O Google disponibiliza uma ferramenta chamada Google API. Lá você consegue utilizar os serviços do Google externamente, como Google Maps, Gmail, Drive e etc. Lá você vai ter Projetos, APIs e Credenciais. Uma visão geral, para entender melhor, seria:
- Meu projeto
- API do Gmail
- Credenciais
- API do Gmail
- Outro projeto
- API do Google Maps
- Credenciais
- API do Gmail
- Credenciais
- API do Google Maps
E assim por diante. É legal entender essa organização, porque o Google costuma alterar um pouco a navegação dessa área, então entendendo como funciona, você vai se achar mais fácil se mexerem lá.
Os passos abaixo são necessários para obter os dois códigos necessários para fazer o plugin funcionar com o Gmail. É preciso ter o valor do campo Authorized redirect URI, fornecido pelo WP Mail SMTP, para completar o processo.
O que é preciso fazer:
- Faça seu login e acesse o registro de aplicações do Gmail;
- Depois de acessar, você verá uma tela que diz Registre seu aplicativo no serviço Gmail API no Console de API do Google. Você pode selecionar algum projeto já existente ou não mexer para criar um novo.
- Na próxima tela você verá um aviso de que A API está ativada. Se você não usou nenhum projeto já existente, o Google criou um projeto chamado My Project para você. Clique em Acessar credenciais;
- Na próxima tela você precisará responder um formulário para descobrir quais credenciais você precisa. Preencha da seguinte forma:
Qual API você usa? Gmail API
De onde você chamará a API? Servidor da Web (por exemplo, node.js, Tomcat)
Que dados você acessará? Dados do usuário - Clicando em Preciso de quais credenciais? você precisará preencher outro formulário. Ao preencher este formulário, você receberá os dados necessários para voltar ao WordPress e terminar a configuração do plugin. Preencha da seguinte forma:
Nome: deixe o padrão ou altere para qualquer outra coisa, não fará diferença para obter os códigos (este campo só é usado como referência).
Origens JavaScript autorizadas: o endereço do seu site comhttp://
ouhttps//
, mas sem / no final. No meu caso ficouhttps://felipeelia.com/br
URIs de redirecionamento autorizados: como eu disse no começo desta seção, o valor deste campo é fornecido pelo plugin, na tela de configuração, no campo Authorized redirect URI. Ao lado do campo existe um botão que já copia o valor para você:
No fim das contas, fica assim: - Na tela seguinte você configurará os dados que aparecerão na tela de consentimento de uso da aplicação. Na verdade esta tela só será exibida para você, afinal só você, através do seu site WordPress, usará o aplicativo.
Endereço de e-mail: deixe o seu
Nome do produto mostrado aos usuários: coloque o nome do seu site. Só é usado para referência. - Clique em Continuar e, na tela seguinte, em Farei isso mais tarde. Você será redirecionado para uma tela com a lista de IDs do cliente. Clique no ícone de lápis da linha (se você não mexeu no nome do Passo 5 desta lista, o nome será Cliente Web 1);
- A tela que abre tem, no começo, os dois dados que precisamos: ID do cliente e Chave secreta do cliente. IMPORTANTE: cuidado para não copiar espaços em branco nem antes de depois dos valores.
É hora de voltar para o WordPress.
Passo 3: Concedendo acesso e testando o envio de e-mails
Volte para a tela de configuração do plugin (Painel→ Configurações→ WP Mail SMTP) para completar o processo, preenchendo os valores de Client ID, Client Secret e salvando. Cuidado para não colar espaços em branco antes ou depois dos valores.
Ao clicar em Save Settings e rolar a tela para baixo, você verá que apareceu um botão novo para que você possa autorizar o plugin a usar sua conta do gmail. Clique nele e siga o fluxo para permitir que o plugin use sua conta.
Depois de autorizado, volte para a tela de configuração do plugin e clique na aba Email test para testar se os envios estão sendo feitos.
Possíveis erros
Erros gerais
Confira os valores de Client ID e Client Secret.
Erro 406 – Not Acceptable
Ao tentar instalar aqui no site, tive um problema no retorno do Google para o meu site. A parte final da URL contém um https://
, que o mod_security
trava. Se é o seu caso, tente desativar o mod_security
no painel da sua hospedagem ou, se não houver esta opção, entre em contato com o suporte.
Se sua hospedagem não liberar seu acesso, há uma gambiarra um modo de contornar. Abra o arquivo src/Providers/Gmail/Auth.php
e encontre o trecho
if ( isset( $_GET['scope'] ) ) {
$scope = urldecode( $_GET['scope'] );
}
(na minha versão é a linha 191) e altere para
if ( isset( $_GET['scope'] ) ) {
$scope = urldecode( $_GET['scope'] );
} else {
$scope = 'https://www.googleapis.com/auth/gmail.send';
}
Tente acessar novamente, dessa vez retirando da URL tudo do &scope=
pra frente. Veja se funciona e não esqueça de desfazer a sua mudança, isto é, de voltar o arquivo ao seu conteúdo original.
Este conteúdo é baseado na documentação oficial do plugin.
Aqui no blog também expliquei como enviar e-mails pelo PHP em localhost (Linux/Ubuntu).
Felipe,
Segui o passo a passo e no meu caso acontece o erro abaixo. Você já viu algo assim?
Tem como contornar?
There was a problem while sending a test email. Related debugging output is shown below:
Versions:
WordPress: 4.9.6
WordPress MS: No
PHP: 5.6.36
WP Mail SMTP: 1.2.5
Params:
Mailer: gmail
Constants: No
Client ID/Secret: Yes
Auth Code: Yes
Access Token: No
Server:
OpenSSL: Yes
PHP.allow_url_fopen: Yes
PHP.stream_socket_client(): Yes
PHP.fsockopen(): Yes
PHP.curl_version(): Yes
Debug:
cURL error 7: Failed to connect to http://www.googleapis.com port 443: Connection refused (see http://curl.haxx.se/libcurl/c/libcurl-errors.html)
cURL error 7: Failed to connect to http://www.googleapis.com port 443: Connection refused (see http://curl.haxx.se/libcurl/c/libcurl-errors.html)
cURL error 7: Failed to connect to http://www.googleapis.com port 443: Connection refused (see http://curl.haxx.se/libcurl/c/libcurl-errors.html)
Error while sending via Gmail mailer: cURL error 7: Failed to connect to http://www.googleapis.com port 443: Connection refused (see http://curl.haxx.se/libcurl/c/libcurl-errors.html)
cURL error 7: Failed to connect to http://www.googleapis.com port 443: Connection refused (see http://curl.haxx.se/libcurl/c/libcurl-errors.html)
Please copy only the content of the error debug message above, identified with an orange left border, into the support forum topic if you experience any issues.
Me apareceu o seguinte erro:
Versions:
WordPress: 4.7.5
WordPress MS: No
PHP: 5.6.33
WP Mail SMTP: 1.2.5
Params:
Mailer: gmail
Constants: No
Client ID/Secret: Yes
Auth Code: Yes
Access Token: No
Server:
OpenSSL: Yes
PHP.allow_url_fopen: Yes
PHP.stream_socket_client(): Yes
PHP.fsockopen(): Yes
PHP.curl_version(): Yes
Debug:
Error while sending via Gmail mailer: {
“error”: {
“errors”: [
{
“domain”: “global”,
“reason”: “required”,
“message”: “Login Required”,
“locationType”: “header”,
“location”: “Authorization”
}
],
“code”: 401,
“message”: “Login Required”
}
}
como consertar?
Reclama de login… você executou o Passo 3 da lista?
Executei, mas tinha cometido um erro, agora deu certo. Valew!!
Ola Felipe fiz o que você falou mas continua dando o seguinte erro:
SMTP Error: Could not authenticate.
O que tenho que fazer?
Abs
Normalmente no final da tela de erro tem mais detalhes sobre o que deu errado. “Could not authenticate” pode indicar erro no usuário ou senha 🙂
Foi o único tutorial que funcionou para mim. Obrigado.
Boa noite,
Pode me informar qual finalidade real de se ter um plugin de email via smtp ? e somente para uso de formulário, como faço para enviar email ?
Agradeço se for esclarecedor,
Att
Sergio
Essa é fácil Sérgio, a finalidade real de se ter um plugin de email via smtp: enviar emails via um servidor smtp diferente que o servidor atual. Sobre enviar emails através de envio de formulários preciso saber melhor até que ponto você entende a mecânica de envio do WordPress ok?
jovem, no meu caso o meu formulário de contato funcionava perfeitamente depois que instalei um plugin chamado contact form ele parou de funcionar, quando eu coloco um email do gmail funciona mais quando coloco do meu servido de email não vai, tem alguma ideia do que possa ser.?
Ola Felipe, seguindo a sua orientação
da o seguinte erro
Test Message Sent
The result was:
bool(false)
The full debugging output is shown below:
object(PHPMailer)#369 (65) {
[“Priority”]=>
int(3)
[“CharSet”]=>
string(5) “UTF-8”
[“ContentType”]=>
string(10) “text/plain”
[“Encoding”]=>
string(4) “8bit”
[“ErrorInfo”]=>
string(43) “SMTP Error: Could not connect to SMTP host.”
[“From”]=>
string(20) “[email protected]”
[“FromName”]=>
string(15) “walter sandoval”
[“Sender”]=>
string(20) “[email protected]”
[“ReturnPath”]=>
string(0) “”
[“Subject”]=>
string(40) “WP Mail SMTP: Test mail to [email protected]”
[“Body”]=>
string(68) “This is a test email generated by the WP Mail SMTP WordPress plugin.”
[“AltBody”]=>
string(0) “”
[“MIMEBody”:protected]=>
string(69) “This is a test email generated by the WP Mail SMTP WordPress plugin.
”
[“MIMEHeader”:protected]=>
string(434) “Date: Mon, 24 Mar 2014 04:51:02 +0000
Return-Path: [email protected]
To: [email protected]
From: walter sandoval
Subject: WP Mail SMTP: Test mail to [email protected]
Message-ID:
X-Priority: 3
X-Mailer: PHPMailer 5.2.4 (http://code.google.com/a/apache-extras.org/p/phpmailer/)
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
Content-Type: text/plain; charset=UTF-8
”
[“mailHeader”:protected]=>
string(0) “”
[“WordWrap”]=>
int(0)
[“Mailer”]=>
string(4) “smtp”
[“Sendmail”]=>
string(18) “/usr/sbin/sendmail”
[“UseSendmailOptions”]=>
bool(true)
[“PluginDir”]=>
string(0) “”
[“ConfirmReadingTo”]=>
string(0) “”
[“Hostname”]=>
string(0) “”
[“MessageID”]=>
string(0) “”
[“MessageDate”]=>
string(0) “”
[“Host”]=>
string(14) “smtp.gmail.com”
[“Port”]=>
string(3) “465”
[“Helo”]=>
string(0) “”
[“SMTPSecure”]=>
string(3) “ssl”
[“SMTPAuth”]=>
bool(true)
[“Username”]=>
string(20) “[email protected]”
[“Password”]=>
string(10) “”
[“AuthType”]=>
string(0) “”
[“Realm”]=>
string(0) “”
[“Workstation”]=>
string(0) “”
[“Timeout”]=>
int(10)
[“SMTPDebug”]=>
bool(true)
[“Debugoutput”]=>
string(4) “echo”
[“SMTPKeepAlive”]=>
bool(false)
[“SingleTo”]=>
bool(false)
[“SingleToArray”]=>
array(0) {
}
[“LE”]=>
string(1) ”
”
[“DKIM_selector”]=>
string(0) “”
[“DKIM_identity”]=>
string(0) “”
[“DKIM_passphrase”]=>
string(0) “”
[“DKIM_domain”]=>
string(0) “”
[“DKIM_private”]=>
string(0) “”
[“action_function”]=>
string(0) “”
[“Version”]=>
string(5) “5.2.4”
[“XMailer”]=>
string(0) “”
[“smtp”:protected]=>
object(SMTP)#368 (11) {
[“SMTP_PORT”]=>
int(25)
[“CRLF”]=>
string(2) ”
”
[“do_debug”]=>
bool(true)
[“Debugoutput”]=>
string(4) “echo”
[“do_verp”]=>
bool(false)
[“Timeout”]=>
int(10)
[“Timelimit”]=>
int(30)
[“Version”]=>
string(5) “5.2.4”
[“smtp_conn”:”SMTP”:private]=>
bool(false)
[“error”:”SMTP”:private]=>
array(1) {
[“error”]=>
string(38) “Called Reset() without being connected”
}
[“helo_rply”:”SMTP”:private]=>
NULL
}
[“to”:protected]=>
array(1) {
[0]=>
array(2) {
[0]=>
string(13) “[email protected]”
[1]=>
string(0) “”
}
}
[“cc”:protected]=>
array(0) {
}
[“bcc”:protected]=>
array(0) {
}
[“ReplyTo”:protected]=>
array(0) {
}
[“all_recipients”:protected]=>
array(1) {
[“[email protected]”]=>
bool(true)
}
[“attachment”:protected]=>
array(0) {
}
[“CustomHeader”:protected]=>
array(0) {
}
[“message_type”:protected]=>
string(5) “plain”
[“boundary”:protected]=>
array(3) {
[1]=>
string(35) “b1_6578d022b458b288ceb0214b1224dc6f”
[2]=>
string(35) “b2_6578d022b458b288ceb0214b1224dc6f”
[3]=>
string(35) “b3_6578d022b458b288ceb0214b1224dc6f”
}
[“language”:protected]=>
array(18) {
[“authenticate”]=>
string(35) “SMTP Error: Could not authenticate.”
[“connect_host”]=>
string(43) “SMTP Error: Could not connect to SMTP host.”
[“data_not_accepted”]=>
string(30) “SMTP Error: Data not accepted.”
[“empty_message”]=>
string(18) “Message body empty”
[“encoding”]=>
string(18) “Unknown encoding: ”
[“execute”]=>
string(19) “Could not execute: ”
[“file_access”]=>
string(23) “Could not access file: ”
[“file_open”]=>
string(33) “File Error: Could not open file: ”
[“from_failed”]=>
string(35) “The following From address failed: ”
[“instantiate”]=>
string(36) “Could not instantiate mail function.”
[“invalid_address”]=>
string(15) “Invalid address”
[“mailer_not_supported”]=>
string(25) ” mailer is not supported.”
[“provide_address”]=>
string(54) “You must provide at least one recipient email address.”
[“recipients_failed”]=>
string(45) “SMTP Error: The following recipients failed: ”
[“signing”]=>
string(15) “Signing Error: ”
[“smtp_connect_failed”]=>
string(22) “SMTP Connect() failed.”
[“smtp_error”]=>
string(19) “SMTP server error: ”
[“variable_set”]=>
string(30) “Cannot set or reset variable: ”
}
[“error_count”:protected]=>
int(2)
[“sign_cert_file”:protected]=>
string(0) “”
[“sign_key_file”:protected]=>
string(0) “”
[“sign_key_pass”:protected]=>
string(0) “”
[“exceptions”:protected]=>
bool(true)
}
The SMTP debugging output is shown below:
SMTP -> ERROR: Failed to connect to server: Connection timed out (110)
grato pela ajuda
Walter