Suporte » Desenvolvendo com WordPress » 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;
    	}
    
    }
Visualizando 15 respostas - 1 até 15 (de um total de 19)
  • Moderador Mário Valney

    (@mariovalney)

    WordPress Cleric of Fire

    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ços

    Observação: quando colar código muito grande, use serviços externos como Gist ou Pastebin. Facilita.

    • Esta resposta foi modificada 6 anos, 10 meses atrás por Mário Valney.
    • Esta resposta foi modificada 6 anos, 10 meses atrás por Mário Valney.
    Criador do tópico aquilamendes

    (@aquilamendes)

    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.

    Criador do tópico aquilamendes

    (@aquilamendes)

    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…

    Moderador Mário Valney

    (@mariovalney)

    WordPress Cleric of Fire

    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ção wp_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 6 anos, 10 meses atrás por Mário Valney.
    Criador do tópico aquilamendes

    (@aquilamendes)

    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”

    Moderador Mário Valney

    (@mariovalney)

    WordPress Cleric of Fire

    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/32540

    Com isso, consigo tentar te ajudar. Vamos lá…
    Coloca um print_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

    Criador do tópico aquilamendes

    (@aquilamendes)

    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 🙁

    Moderador Mário Valney

    (@mariovalney)

    WordPress Cleric of Fire

    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?

    Criador do tópico aquilamendes

    (@aquilamendes)

    Não apareceu nada.

    Moderador Mário Valney

    (@mariovalney)

    WordPress Cleric of Fire

    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

    Criador do tópico aquilamendes

    (@aquilamendes)

    Sim o site está online em > http://www.caixaaltamarketing.digital

    Moderador Mário Valney

    (@mariovalney)

    WordPress Cleric of Fire

    É 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

    Criador do tópico aquilamendes

    (@aquilamendes)

    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 6 anos, 10 meses atrás por aquilamendes.
    Moderador Mário Valney

    (@mariovalney)

    WordPress Cleric of Fire

    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 6 anos, 10 meses atrás por Mário Valney.
    Criador do tópico aquilamendes

    (@aquilamendes)

    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.

Visualizando 15 respostas - 1 até 15 (de um total de 19)
  • O tópico ‘Mudança de e-mail no campo “De” quando receber e-mail de form de contato’ está fechado para novas respostas.