Mudança de e-mail no campo “De” quando receber e-mail de form de contato
-
Olá pessoal, boa noite.
Gostaria de ajuda de vocês, já mexi um pouco no código do tema, e vi alguns tópicos na internet mais nada me ajudou no que gostaria de alterar, parece simples mais não estou conseguindo, vamos la:No template atual que uso no meu site, no final tem um formulário de contato configurável pelas opções do tema, é nativo do template, não utilizo nenhum plugin como contact form, é apenas para enviar um simples e-mail então me atende bem.
O formulário funciona bem, porém ao receber o e-mail percebi que o campo “DE” vem com o nome do site e o e-mail default do wordpress, talvez? <wordpress@caixaaltamarketing.digital>
Mas nesse campo eu gostaria que tivesse o nome e o e-mail Fulano Souza <fulanosouza@yahoo.com.br> da pessoa que preencheu o formulário, sendo assim ao responder eu responderia direto a mensagem pra quem enviou e não novamente pra mim mesmo, compreendem?
Já achei o arquivo responsável por esse formulário, vou postar o código dele completo aqui pra ajudar a quem puder me ajudar a traduzir e em que local do código consigo modificar isso, grato a todos.
<?php if (!defined('ABSPATH')) die('No direct access allowed'); ?> <?php class TMM_Contact_Form { public static $types = array( 'textinput' => 'Textinput', 'email' => 'Email', 'website' => 'Website', 'messagebody' => 'Message', 'select' => 'Select' ); public $options_description = array(), $contacts_form_titles = array(), $forms_count = 1; public static function save($data) { TMM::update_option('contact_form', $data); } public static function get_form($form_name) { $contact_forms = TMM::get_option('contact_form'); if (!empty($contact_forms)) { //after import if (!empty($contact_forms) AND is_string($contact_forms)) { $contact_forms = unserialize($contact_forms); } foreach ($contact_forms as $form) { if ($form['title'] == $form_name) { return $form; } } } return array(); } public static function get_forms_names() { $contact_forms = TMM::get_option('contact_form'); $result = array(); if (!empty($contact_forms)) { //after import if (!empty($contact_forms) AND is_string($contact_forms)) { $contact_forms = unserialize($contact_forms); } if (!empty($contact_forms) AND is_array($contact_forms)) { foreach ($contact_forms as $form) { if ($form['title'] == '__FORM_NAME__' OR empty($form['title'])) { continue; } $result[$form['title']] = $form['title']; } } } return $result; } public static function contact_form_request() { $data = array(); parse_str($_REQUEST['values'], $data); $errors = array(); $form = self::get_form($data['contact_form_name']); $website = ""; $messagebody = ""; $pre_messagebody_info = ""; if (!empty($form['inputs'])) { foreach ($form['inputs'] as $input) { $name = strtolower(trim(urlencode($input['label']))); $name = str_replace(" ", "_", $name); $pattern = "/[^a-zA-Z0-9_]+/i"; $name = preg_replace($pattern, "", $name); if ($input['is_required']) { if (empty($data[$name])) { $errors[$name] = trim($name); } } if ($input['type'] == 'email') { if (!is_email(@$data[$name])) { $errors[$name] = trim($name); } } if ($input['type'] == 'messagebody') { $messagebody = @$data[$name]; } if ($input['type'] == 'website') { $website = @$data[$name]; } if ($input['type'] != 'website' AND $input['type'] != 'messagebody') { $pre_messagebody_info.="<strong>" . $input['label'] . "</strong>" . ": " . @$data[$name] . "<br /><br />"; } } } //capcha if (@$form['has_capture']) { if (substr($data['verify_code'], 7, 5) != $data['verify']) { $errors["verify"] = "Capcha"; } } //***** $result = array( "is_errors" => 0, "info" => "" ); if (!empty($errors)) { $result['is_errors'] = 1; $result['hash'] = md5(time()); $result['info'] = $errors; echo json_encode($result); exit; } //***** if (empty($website)) { $website = __("Email from contact form", 'accio'); } //***** add_filter('wp_mail_content_type', create_function('', 'return "text/html";')); add_filter('wp_mail_from_name', 'my_mail_from_name'); function my_mail_from_name($name) { return get_option('blogname'); } //***** $after_message = "\r\n<br />--------------------------------------------------------------------------------------------------\r\n<br /> " . __('This mail was sent via', 'accio') . " " . site_url() . " " . __('contact form', 'accio'); //***** $recepient_mail = sanitize_email($form['recepient_email']); if (empty($form['recepient_email'])) { $recepient_mail = sanitize_email(get_bloginfo('admin_email')); } //****** if (wp_mail($recepient_mail, $website, $pre_messagebody_info . nl2br($messagebody) . $after_message)) { $result["info"] = "succsess"; } elseif( mail($recepient_mail, $website, nl2br($messagebody)) ) { $result["info"] = "succsess"; } else { $result["info"] = "server_fail"; } $result['hash'] = md5(time()); echo json_encode($result); exit; } }
-
Olá, tudo bem?
Você não deve alterar o remetente (o FROM) pois é justamente ele que está enviando (em alguns casos o servidor nem permite enviar e-mails se o endereço não for do próprio servidor). O que você deve fazer é alterar o REPLY-TO do cabeçalho, assim você irá responder para esse e-mail e não para o remetente.
Para fazer isso, adicionamos essa info ao $header (quarto parâmetro da função) no wp_mail.
Dessa forma, troque:
wp_mail($recepient_mail, $website, $pre_messagebody_info . nl2br($messagebody) . $after_message)
por:
wp_mail($recepient_mail, $website, $pre_messagebody_info . nl2br($messagebody) . $after_message, $headers)
E na linha anterior, adiciona a variável:
$headers = array( 'Reply-To: Person Name <person.name@example.com>', );
(claro que vai precisar trocar o “Person Name” pelo nome de quem enviou e o e-mail também, logo depois)
Espero ter ajudado.
AbraçosObservação: quando colar código muito grande, use serviços externos como Gist ou Pastebin. Facilita.
-
Esta resposta foi modificada 7 anos, 10 meses atrás por
Mário Valney.
-
Esta resposta foi modificada 7 anos, 10 meses atrás por
Mário Valney.
Olá boa tarde.
Obrigado pelo breve retorno, então fiz as correções indicadas porém continua a mesma coisa.E mesmo se funcionasse me pergunto, como poderia funcionar o reply-to pegando o campo e-mail de quem preencher o formulário? Teria que ter uma variável pra puxar o campo e-mail do formulário não?
Gostaria realmente de mudar isso, pois ao clicar responder quando recebo o e-mail simplesmente responde a mim mesmo e isso não tem sentido 🙁
Aguardo.
Olá novamente, revisando agora novamente o código que você mandou, a variável estava em um local $headers e em outro $header apenas uma letra, corrigi e agora ok, ao responder puxa o reply-to…
Mas agora fica a minha segunda dúvida, como puxar o e-mail que o usuário preencheu no campo e-mail do formulário? Se eu conseguir pelo menos isso já será de grande valia…
Olá. Obrigado por ter notado o erro de digitação. Mas aproveito para deixar um alerta: sempre confira os códigos que encontra na internet. Afinal alguém mal intencionado pode causar algum problema.
Agora voltando às suas perguntas:
como poderia funcionar o reply-to pegando o campo e-mail de quem preencher o formulário? Teria que ter uma variável pra puxar o campo e-mail do formulário não?
Claro. Não tem como o código adivinhar.. hahaha
Mas agora fica a minha segunda dúvida, como puxar o e-mail que o usuário preencheu no campo e-mail do formulário? Se eu conseguir pelo menos isso já será de grande valia…
Só procurar dentro do método
contact_form_request
: parece que ele é chamado para validar e processar o formulário, afinal a funçãowp_mail
está lá.Deve estar em
$data
pelo código que você mandou (tenta imprimir a variável com um print_r ou algo do tipo).Abraços
-
Esta resposta foi modificada 7 anos, 10 meses atrás por
Mário Valney.
Desculpe mais não sei quase nada de PHP, poderia me indicar exatamente o que fazer e onde fazer no código inicial que enviei?
Além dessa alteração há como adicionar um assunto padrão quando eu receber o e-mail, por exemplo “Contato a partir do site”
Para alterar o assunto basta substituir o segundo parâmetro de wp_mail, ou seja, a variável
$website
.Pode alterar de website para subject e atribuir o valor antes, logo acima de $headers.
Sobre PHP, é complicado tentar “desenvolver de cabeça”.
Mas posso te indicar o tutorial a baixo para entender um pouco de PHP:
http://www.devmedia.com.br/php-tutorial/32540Com isso, consigo tentar te ajudar. Vamos lá…
Coloca umprint_r($data); die();
antes do $headers e me diz o que vai imprimir ao tentar enviar.Deve quebrar (por causa do
die();
) e vai imprimir o conteúdo da variável para podermos saber onde que recebe o e-mail.Abraços
Desculpe, mas, com o print o formulário parou de funcionar o subject não funcionou fica como (sem assunto) acho que não vou conseguir prosseguir meu conhecimento é muito limitado em programação mesmo 🙁
Eu disse que o formulário ia quebrar. Não queremos que o formulário funcione: queremos ver o que tem na variável.
Apareceu algo?
Não apareceu nada.
O site está disponível? Tem como eu acessar o formulário?
Pode ser que ele seja Ajax e consequentemente essa informação estaria no console (F12 no Chrome e na aba Network).Abraços
Sim o site está online em > http://www.caixaaltamarketing.digital
É o formulário de contato no fundo do site? Se for, acho que não colocou o print_r no lugar correto, pois não quebrou… mas de qualquer forma, deu pra dar uma olhada nos names do formulário.
Tenta usar
$data['email']
para o e-mail e$data['nome']
para o nome de quem enviou.Abraços
Ok, mas vamos recapitular, fiz as adições, o código ficaria assim? Pra mim no DW está dando erro em alguma sintaxe, acho que é nessas duas últimas que adicionei acho que não deve ficar dentro do array…
<?php if (!defined('ABSPATH')) die('No direct access allowed'); ?> <?php class TMM_Contact_Form { public static $types = array( 'textinput' => 'Textinput', 'email' => 'Email', 'website' => 'Website', 'messagebody' => 'Message', 'select' => 'Select' ); public $options_description = array(), $contacts_form_titles = array(), $forms_count = 1; public static function save($data) { TMM::update_option('contact_form', $data); } public static function get_form($form_name) { $contact_forms = TMM::get_option('contact_form'); if (!empty($contact_forms)) { //after import if (!empty($contact_forms) AND is_string($contact_forms)) { $contact_forms = unserialize($contact_forms); } foreach ($contact_forms as $form) { if ($form['title'] == $form_name) { return $form; } } } return array(); } public static function get_forms_names() { $contact_forms = TMM::get_option('contact_form'); $result = array(); if (!empty($contact_forms)) { //after import if (!empty($contact_forms) AND is_string($contact_forms)) { $contact_forms = unserialize($contact_forms); } if (!empty($contact_forms) AND is_array($contact_forms)) { foreach ($contact_forms as $form) { if ($form['title'] == '__FORM_NAME__' OR empty($form['title'])) { continue; } $result[$form['title']] = $form['title']; } } } return $result; } public static function contact_form_request() { $data = array(); parse_str($_REQUEST['values'], $data); $errors = array(); $form = self::get_form($data['contact_form_name']); $website = ""; $messagebody = ""; $pre_messagebody_info = ""; if (!empty($form['inputs'])) { foreach ($form['inputs'] as $input) { $name = strtolower(trim(urlencode($input['label']))); $name = str_replace(" ", "_", $name); $pattern = "/[^a-zA-Z0-9_]+/i"; $name = preg_replace($pattern, "", $name); if ($input['is_required']) { if (empty($data[$name])) { $errors[$name] = trim($name); } } if ($input['type'] == 'email') { if (!is_email(@$data[$name])) { $errors[$name] = trim($name); } } if ($input['type'] == 'messagebody') { $messagebody = @$data[$name]; } if ($input['type'] == 'website') { $website = @$data[$name]; } if ($input['type'] != 'website' AND $input['type'] != 'messagebody') { $pre_messagebody_info.="<strong>" . $input['label'] . "</strong>" . ": " . @$data[$name] . "<br /><br />"; } } } //capcha if (@$form['has_capture']) { if (substr($data['verify_code'], 7, 5) != $data['verify']) { $errors["verify"] = "Capcha"; } } //***** $result = array( "is_errors" => 0, "info" => "" ); if (!empty($errors)) { $result['is_errors'] = 1; $result['hash'] = md5(time()); $result['info'] = $errors; echo json_encode($result); exit; } //***** if (empty($website)) { $website = __("Email from contact form", 'accio'); } //***** add_filter('wp_mail_content_type', create_function('', 'return "text/html";')); add_filter('wp_mail_from_name', 'my_mail_from_name'); function my_mail_from_name($name) { return get_option('blogname'); } //***** $after_message = "\r\n<br />--------------------------------------------------------------------------------------------------\r\n<br /> " . __('This mail was sent via', 'accio') . " " . site_url() . " " . __('contact form', 'accio'); //***** $recepient_mail = sanitize_email($form['recepient_email']); if (empty($form['recepient_email'])) { $recepient_mail = sanitize_email(get_bloginfo('admin_email')); } //****** $header = array('Reply-To: $data['name'] <$data['email']>',); if (wp_mail($recepient_mail, $website, $pre_messagebody_info . nl2br($messagebody) . $after_message, $header)) { $result["info"] = "succsess"; } elseif( mail($recepient_mail, $website, nl2br($messagebody)) ) { $result["info"] = "succsess"; } else { $result["info"] = "server_fail"; } $result['hash'] = md5(time()); echo json_encode($result); exit; } }
-
Esta resposta foi modificada 7 anos, 10 meses atrás por
aquilamendes.
Por favor, próxima vez, coloque código muito grande num pastebin ou gist. Assim facilita nossa leitura.
Mas de qualquer forma $header deve ser assim:
$header = array("Reply-To: " . $data['name'] . " <" . $data['email'] . ">");
Acho que isso resolve.
Abraços
-
Esta resposta foi modificada 7 anos, 10 meses atrás por
Mário Valney.
Tentei usar o pastebin mais não vi como colocar aqui dentro do post, coloquei como iframe uma opção que eles disponibilizam mais o fórum não aceitou o código, por isso coloquei na tag code padrão aqui do wordpress, vou testar agora e já retorno com resultado.
-
Esta resposta foi modificada 7 anos, 10 meses atrás por
- O tópico ‘Mudança de e-mail no campo “De” quando receber e-mail de form de contato’ está fechado para novas respostas.