Jquery Ajax Email Sending File Instead Of Message - php

I have a simple contact form that I want to submit to an email.
Everything is working fine except that instead of the input values being sent in the body of the email it's sending a file.
I tried changing the content-type of my php file but the only thing that changes is the format of the file that's sent, .html or .txt.
It's my first time working with ajax or PHP, so what am I doing wrong here?
I tried inserting the html tags on the message $body and tried without them as well, same thing happens.
Here's my jquery
$("#enviar").click(function(){
$.ajax({
dataType:'html',
url:"./scripts/email.php",
type:"POST",
data:({nome:$("input[name='name']").val(),email:$("input[name='email']").val(),telefone:$("input[name='phone']").val()}),
beforeSend: function(data){
}, success:function(data){
alert("Dados Enviados");
}, complete: function(data){}
});
});
And here's the PHP
<?php
if(isset($_POST['email']) && !empty($_POST['email'])){
$nome = strip_tags($_POST['nome']);
$email = strip_tags($_POST['email']);
$telefone = strip_tags($_POST['telefone']);
$headers = "MIME-Version: 1.1\n";
$headers .= "Content-type: text/html: charset=UTF-8\n";
$headers .= "From: mexample#example.com\n";
$headers .= "Return-Path: example#example.com\n";
$headers .= "Reply-To: ".$email."\n";
$emailsender = "example#example.com";
$to = "receiver email";
$subject = "Formulario - Contato";
$body = "<html>
<head>
<title> Formulario </title>
</head>
<body>".
"<p>". "Nome: " .strip_tags($nome). "</p>".
"<p>". "Email: " .strip_tags($email). "</p>".
"<p>"."Telefone: " .strip_tags($telefone). "</p>".
"</body>
</html>";
if(!mail($to, $subject, $body, $headers ,"-r".$emailsender)){
$headers .="Return-Path: " . $emailsender . "\n";
mail($to, $subject, $body, $headers);
}
}
?>

Related

Php contact form keeps going to spam and has an html attachement

I experiencing a problem with a php contact form that I normal use on our products sites.
<?php
$to = "martin#puritech.co.za";
$subject = "Reverse Osmosis";
$name = $_POST['name'];
$email = $_POST['email'];
$number = $_POST['tel'];
$mail = $_POST['message'];
$headers = "From: $name \r\n";
$headers .= "Email: $email \r\n";
$headers .= "MIME-Version: 1.0 \r\n";
$headers .= "Content-type: text/html charset=iso-8859-1 \r\n";
$message = "<html><body style='font-family: Arial;'>";
$message .= "<h1>Hello Guys! You have a request from ".$name."</h1>";
$message .= "<p>".$mail."</p>";
$message .= "<p><span style='font-weight:bold;'>From:</span> ".$name."</p>";
$message .= "<span style='font-weight:bold;'>Email:</span> ".$email."</p>";
$message .= "<span style='font-weight:bold;'>Contact Number:</span> ".$number."</p>";
$message .= "</body></html>";
$send = mail ($to, $subject, $message, $headers);
if ($send==true) {
header('Location: ../index.html');
exit;
}else {?>
<script type="text/javascript">
alert('Please check your details and resend. Thank you.');
window.location = '../index.html';
</script>
<?php
}
?>
When I click on the send button, the mail goes straight to spam and has an html doc attachment.
How do I fix this? really draining me and its starting to annoy me.

jQuery/PHP Send email on mousedown link event

Here my code. I could not display errors message. Simply mail is not sent. What's wrong with this approach ?
<a id="target" href="http://www.mylink.wav">mylink</a>
<script type="text/javascript">
$(function() {
$("#target").mousedown(function() {
$.post(
"sendemail.php",
{ name: "John" }
);
});
});
</script>
<?php
if($_POST)
{
$mail = "myemail.email.com"
$name = $_POST['name'];
$subject = 'My subject';
$to = "myemail#email.com";
$message = "My message: ".$name."<br />";
$headers = "From: $mail \n";
$headers .= "Reply-To: $mail \n";
$headers .= "MIME-Version: 1.0 \n";
$headers .= "Content-Type: text/html; charset=ISO-8859-1 \n";
}
?>
Thank you for your suggestions to solve this issue.
Firstly check if you actually are calling your script inside jQuery block.
Second, you need to include php mail() function (if enabled on server):
mail($to, $subject, $message, $headers);
http://php.net/manual/en/function.mail.php

php send mail script encoding issue on windows

I have problem with non english characters with this e-mail script. If I set the script to send e-mail to my gmail account, I have no problem. However, if I set the script to send email to my domain account and if i open the email with windows live mail or with microsoft outlook then the e-mail is not readable. I must to go to encoding menu, and then select the utf-8, and then i can read the email.
If I open the mail on iMac mail client, i have no problem.
My customer see this as big problem and want me to solve it. Anyone can help?
Here is the code:
<?php
// send the form to the specify email
// CONFIG VARS
$subject = "mysite.com | contact form";
$to = "myaccount#somemail.com";
$from = 'another#somemail.com';
//data
$msg = "Name: " .$_POST['namesup'] ."<br>\n";
$msg .= "Email: " .$_POST['emailsup'] ."<br>\n";
$msg .= "Phone: " .$_POST['phonesup'] ."<br>\n";
$msg .= "Message: " .$_POST['yourtextsup'] ."<br>\n";
//Headers
$headers = "MIME-Version: 1.0\r\n";
$headers .= "Content-type: text/html; charset=UTF-8\r\n";
$headers .= "From: <".$from. ">" ;
//send
mail($to, $subject, $msg, $headers);
?>
Any help will be deeply appreciated.
Zoran
Checkout this code it will work for me,
<?php
$subject = "mysite.com | contact form";
$to = "myaccount#somemail.com";
$from = 'another#somemail.com';
$msg = '<html>
<head>
</head>
<body>
<p>
Name: ".$_POST['namesup']."<br>
Email: ".$_POST['emailsup']."<br>
Phone: ".$_POST['phonesup']."<br>
Message: ".$_POST['yourtextsup']."<br>
</p>
</body>
</html>';
$headers = 'MIME-Version: 1.0' . "\r\n" . 'Content-type: text/html; charset=UTF-8' . "\r\n";
$headers .= "X-Mailer: PHP \r\n";
$headers .= "From: <".$from. ">" ;
mail($to,$subject,$msg,$headers);
?>
This line $headers = 'MIME-Version: 1.0' . "\r\n" . 'Content-type: text/html; charset=UTF-8' . "\r\n"; is resolved your issue of like Arabic language or others.
I would suggest making sure your message is valid HTML, including the <html> and <head> tags, and also make sure you include the <meta http-equiv="Content-Type" content="text/html charset=UTF-8" /> tag. So:
//data
$msg = '<html><head><meta http-equiv="Content-Type" content="text/html charset=UTF-8" /></head><body>';
$msg .= "Name: " .$_POST['namesup'] ."<br>\n";
$msg .= "Email: " .$_POST['emailsup'] ."<br>\n";
$msg .= "Phone: " .$_POST['phonesup'] ."<br>\n";
$msg .= "Message: " .$_POST['yourtextsup'] ."<br>\n";
$msg .= '</body></html>';
Try changing your scripts charset to:
<?php
// send the form to the specify email
// CONFIG VARS
$subject = "mysite.com | contact form";
$to = "myaccount#somemail.com";
$from = 'another#somemail.com';
//data
$msg = "Name: " .$_POST['namesup'] ."<br>\n";
$msg .= "Email: " .$_POST['emailsup'] ."<br>\n";
$msg .= "Phone: " .$_POST['phonesup'] ."<br>\n";
$msg .= "Message: " .$_POST['yourtextsup'] ."<br>\n";
//Headers
$headers = "MIME-Version: 1.0\r\n";
$headers .= "Content-type: text/html; charset=iso-8859-1";
$headers .= "From: <".$from. ">" ;
//send
mail($to, $subject, $msg, $headers);
?>

PHP Mail function not working (jQuery/php)

I have a little problem with the following code. When I click "Send" it says "PHP Warning: mail() [function.mail]: "sendmail_from" not set in php.ini or custom "From:" header missing in C:***.com**\mail.php on line 21"
This is the jQuery:
$(document).ready(function(){
$("#send").click(function(){
var valid = '';
var isr = ' requested.</h6>';
var name = $("#name").val();
var mail = $("#email").val();
var messaggio = $("#message").val();
if (name.length<1) {
valid += '<h6>A valid name is'+isr;
}
if (!mail.match(/^([a-z0-9._-]+#[a-z0-9._-]+\.[a-z]{2,4}$)/i)) {
valid += '<h6>A valid e-mail address is'+isr;
}
if (valid!='') {
$("#re").fadeIn("slow");
$("#re").html("<h6><b>Error:</b></h6>"+valid);
$("#re").css("background-color","#ffc0c0");
}
else {
var datastr ='name=' + name + '&mail=' + mail + '&messaggio=' + encodeURIComponent(messaggio);
$("#re").css("display", "block");
$("#re").css("background-color","#FFFFA0");
$("#re").html("<h6>Sending..</h6>");
$("#re").fadeIn("slow");
setTimeout("send('"+datastr+"')",2000);
}
return false;
});
});
function send(datastr){
$.ajax({
type: "POST",
url: "mail.php",
data: datastr,
cache: false,
success: function(html){
$("#re").fadeIn("slow");
$("#re").html(html);
$("#re").css("background-color","#e1ffc0");
setTimeout('$("#re").fadeOut("slow")',2000);
}
});
}
And the PHP
<?php
$mail = $_POST['mail'];
$name = $_POST['name'];
$text = $_POST['messaggio'];
$ip = $_SERVER['REMOTE_ADDR'];
$to = "admin#****.com";
$message = "E-mail received from: ".$name.", ".$mail.".<br />";
$message .= "Messaggio: <br />".$text."<br /><br />";
$message .= "IP: ".$ip."<br />";
$headers = "From: $mail \n";
$headers .= "Reply-To: $mail \n";
$headers .= "MIME-Version: 1.0 \n";
$headers .= "Content-Type: text/html; charset=ISO-8859-1 \n";
if(mail($to, $message, $headers)){
echo "<h6>Message sent.</h6>";
}
else{
echo "<h6>Ops! We've got a problem! :(</h6>";
}
?>
The mentioned line is "if(mail($to, $message, $headers)){" but I don't understand the error.
I am using the same code on another website (another domain also) and it runs without problems.
Headers need to be terminated with \r\n not \n.
$headers = "From: $mail \r\n";
$headers .= "Reply-To: $mail \r\n";
$headers .= "MIME-Version: 1.0 \r\n";
$headers .= "Content-Type: text/html; charset=ISO-8859-1 \r\n";
Also there is a Header Injection vulnerability in your code. You should validate all of the post data that you put into email headers.
Have you checked the SMTP Settings in PHP.INI?
Set this in your code or in your php.ini:
<?php
ini_set("SMTP","smtp-server-address" );
ini_set('sendmail_from', 'from-email-address');
?>
And if you are sending through a different port than 25, you can also override the default:
ini_set('smtp_port', '2525');
You might try replacing your FROM headers with:
$headers = "From: $name <$mail>\r\n";
designating the email address within lt/gt brackets.
One other thought is to be sure the $_POST['mail'] value is indeed being passed.
I think you might have a carriage return coming from your field. You need to scrub your data input in the $_POST like:
$mail = trim($_POST['mail']);
You might also want to use mysql_real_escape_string or something similar in regexp if inputting into a DB.
Also for consistantcy in your code:
$headers = "From: ".$mail." \r\n";
$headers .= "Reply-To: ".$mail." \r\n";
Also I think your missing the correct mail parameters. According to the mail documentation your missing a subject parameter:
mail($to, $subject, $message, $headers);

PHP Contact Form not Sending?

Ive got a contact form that isnt sending but is outputting that the message is sent? Can anybody see a problem?
<?php
$name = $_POST['name'];
$email = $_POST['email'];
$subject = $_POST['subject'];
$message = $_POST['message'];
$to = "myemail#email.co.uk";
//begin of HTML message
$message = "
From : $name,
Email: $email,
Subject: $subject,
Message: $message ";
//end of message
// To send the HTML mail we need to set the Content-type header.
$headers = "MIME-Version: 1.0\r\n";
$headers .= "Content-type: text/html; charset=iso-8859-1\r\n";
$headers .= "From: Website Enquiry";
if (isset($_POST['name'])) {
// now lets send the email.
mail($to, $subject, $message, $headers);
header('Location: ' . $_SERVER['HTTP_REFERER'] . '?e=Thankyou, we will be in touch shortly.');
} else {
header('Location: ' . $_SERVER['HTTP_REFERER'] . '?e=There was an error sending your message, Please try again.');
}
?>
The "From" header should have a syntactically correct email address. You also need to check the return value of the "mail" function.
$header .= "From: Website Enquiry <enquiry#website.com>";
PS: Please improve your code formatting.
Try to enter an email at From: in $headers.
Like $headers .= "From: youremail#provider.com" or
$headers .= "From: Website Enquiry <youremail#provider.com>"
And you should change it to
if(mail(...)) {
//success
}
else {
//email failed
}

Categories