i'm trying to add a PDF attachment in my PHPmailer but it won't send the attachment.
Controller:
$recipient = Request::input('emailaddress');
$recipientName = Request::input('name');
$file = Request::input('file');
$mail = new \PHPMailer(true);
try {
$mail->isSMTP();
$mail->CharSet = "utf-8";
$mail->SMTPAuth = true;
$mail->SMTPSecure = "tls";
$mail->Host = "smtp.sendgrid.net";
$mail->Port = 587;
$mail->Username = "username";
$mail->Password = "password";
$mail->setFrom("info#email.nl", "Business");
$mail->Subject = "Offerte";
$mail->MsgHTML("Test.");
$mail->addAddress($recipient, $recipientName);
if (isset($_FILES[$file]) &&
$_FILES[$file]['error'] == UPLOAD_ERR_OK) {
$mail->AddAttachment($_FILES[$file]['tmp_name'],
$_FILES[$file]['name']);
}
$mail->send();
} catch (phpmailerException $e) {
dd($e);
} catch (Exception $e) {
dd($e);
}
return back()->with('send', 'send');
}
The form:
<form method="POST" action="/offer/sendmail">
<div class="form-group">
<label for="name">Aan:</label>
<input type="text" class="form-control" id="name" name="name" value="{{$offers->name}}">
</div>
<div class="form-group">
<label for="emailaddress">Email-adres:</label>
<input type="text" class="form-control" id="emailaddress" name="emailaddress" value="{{$offers->email}}">
</div>
<div class="form-group">
<label for="subject">Onderwerp:</label>
<input type="text" class="form-control" id="subject">
</div>
<div class="form-group">
<label for="subject">Bericht:</label>
<textarea class="form-control" rows="5" id="comment"></textarea>
</div>
<div class="form-group">
<label for="subject">Voeg een bestand toe:</label>
<input type ="file" name='file' id='uploaded_file'>
</div>
</div>
<div class="modal-footer">
<button type="submit" class="btn btn-success">Verzenden</button>
</form>
It does send the email but there is no attachment in it. Do you have any idea why? I've also changed $mail->username and password so i can keep my credentials private.
This code is unsafe; you're trusting values from $_FILES. You need to call is_uploaded_file or move_uploaded_file. Read the PHP docs on handling uploads.
On a more basic level, you have not set the enctype attribute on the form, so file elements will not work - you need to add enctype="multipart/form-data", so your form tag will become.
<form method="POST" action="/offer/sendmail" enctype="multipart/form-data">
It's a good idea to set a MAX_FILE_SIZE element too.
Base your code on the send_file_upload example provided with PHPMailer, which handles uploads correctly and safely.
Related
Closed. This question needs debugging details. It is not currently accepting answers.
Edit the question to include desired behavior, a specific problem or error, and the shortest code necessary to reproduce the problem. This will help others answer the question.
Closed 2 years ago.
Improve this question
PHP Email form with attachment not working by PHPMailer help me what I'm missing. Without form and PHP code it's working in localhost but when i merge with the form it's totally not working..
<?php
require 'vendor/autoload.php';
require 'classes/config.php';
if(isset($_POST['submit'])){
$name = $_POST['name'];
$email = $_POST['email'];
$mobile = $_POST['mobile'];
$mat = $_POST['mat'];
$res = $_POST['res'];
$tech = $_POST['tech'];
$city = $_POST['city'];
$message = $_POST['message'];
$content='<br><br>Name: '.$name.'<br>'.'<br>Mobile: '.$mobile .'<br>Material: '.$mat.'<br>Res: '.$res.'<br>tech: '.$tech.'<br>City: '.$city .'<br>Message: '.$message.'<br>Email: '.$email;
$file_name = ($_FILES['image']['name']);
$file_tmp = ($_FILES['image']['tmp_name']);
$file_path = "upload";
if(move_uploaded_file($file_tmp, "uploads" . $file_name)){
$mail = new PHPMailer\PHPMailer\PHPMailer();
$mail->isSMTP();
$mail->Host = Config::SMTP_HOST;
$mail->Username = Config::SMTP_USER;
$mail->Password = Config::SMTP_PASS;
$mail->Port = Config::SMTP_PORT;
$mail->SMTPSecure = 'tls';
$mail->SMTPDebug = 2;
$mail->SMTPAuth = true;
$mail->isHTML(true);
$mail->CharSet = 'UTF-8';
$mail->setFrom('mail');
$mail->addAddress('mail');
$mail->Subject = 'Got a Enquiry';
$mail->Body = $content;
$mail->addAttachment($file_path, $file_name);
if($mail->send()){
echo 'Super';
} else {
echo 'nothing:' .$mail->ErrorInfo;
}
}
}
?>
<form class="montform" id="reused_form" enctype="multipart/form-data" >
<div class="col-lg-4 col-md-4 col-sm-12 col-xs-12 bzd-upload-1-1">
<div class="col-lg-12 frm-bg">
<img src="img/upload-icon.png" class="img-responsive">
<p>Drag and Drop Files<br/>
or Upload Here</p>
<p class="file">
<label for="file_attach">
<h6>Browse</h6>
</label>
<input name="image" type="file" id="file" class="feedback-input">
</p>
</div>
</div>
<div class="col-lg-8 col-md-8 col-sm-12 col-xs-12 bzd-form-1-1">
<div class="col-lg-6 col-md-6 col-sm-12 col-xs-12 form-group">
<label class="form-1-1">Name</label>
<p class="name">
<input name="name" type="text" class="feedback-input" required placeholder="Name" id="name" />
</p>
</div>
<div class="col-lg-6 col-md-6 col-sm-12 col-xs-12 form-group">
<label class="form-1-1">Email</label>
<p class="email">
<input name="email" type="email" required class="feedback-input" id="email" placeholder="Email" />
</p>
</div>
<div class="col-lg-6 col-md-6 col-sm-12 col-xs-12 form-group">
<label class="form-1-1">Mobile No</label>
<p class="name">
<input name="phone" type="tel" class="feedback-input" required placeholder="Phone" id="phone" />
</p>
</div>
<div class="col-lg-6 col-md-6 col-sm-12 col-xs-12 form-group">
<label class="form-1-1">Material</label>
<p class="name">
<input name="mat" type="tel" class="feedback-input" required placeholder="Material" id="mat" />
</p>
</div>
<div class="col-lg-6 col-md-6 col-sm-12 col-xs-12 form-group">
<label class="form-1-1">Resolution</label>
<p class="name">
<input name="res" type="tel" class="feedback-input" required placeholder="Resolution" id="res" />
</p>
</div>
<div class="col-lg-6 col-md-6 col-sm-12 col-xs-12 form-group">
<label class="form-1-1">Technology</label>
<p class="name">
<input name="tech" type="tel" class="feedback-input" required placeholder="Technology" id="tech" />
</p>
</div>
<div class="col-lg-6 col-md-6 col-sm-12 col-xs-12 form-group">
<label class="form-1-1">City</label>
<p class="name">
<input name="city" type="text" class="feedback-input" required placeholder="City" id="city" />
</p>
</div>
<div class="col-lg-6 col-md-6 col-sm-12 col-xs-12 form-group">
<label class="form-1-1">Message</label>
<p class="text">
<textarea name="message" class="feedback-input" id="comment" placeholder="Message"></textarea>
</p>
</div>
<div class="submit">
<button type="submit" class="button-blue">SUBMIT</button>
<div class="ease"></div>
</div>
</div>
</form>
When I click the submit button it's loading... No error displayed and also i'm not getting mail. I am also search some more articles but still it is not resolved.. kindly help me in this..
You are checking this:
if(isset($_POST['submit'])){
but your form does not contain an input named submit, so this condition will never be true and your sending code will not be run.
You have this submit button:
<button type="submit" class="button-blue">SUBMIT</button>
but it has no name or value attribute. Change it to this:
<button type="submit" name="submit" class="button-blue">SUBMIT</button>
You should check your error_log file it would show you whats going wrong.
Actualy $mail->SMTPDebug = 2; would create troubleshoots of errors too, so maybe your emails going to spam box.
Here is the code working on my localhost :
require_once "vendor/autoload.php";
$mail = new PHPMailer\PHPMailer\PHPMailer(true);
//Or $mail = new PHPMailer;
//Enable SMTP debugging.
$mail->SMTPDebug = 3;
//Set $mail->SMTPDebug = 0; on live sites.
//Set PHPMailer to use SMTP.
$mail->isSMTP();
//Set SMTP host name
$mail->Host = "smtp.gmail.com";
//Set this to true if SMTP host requires authentication to send email
$mail->SMTPAuth = true;
//Provide username and password
$mail->Username = "useremail#gmail.com";
$mail->Password = "password";
//If SMTP requires TLS encryption then set it
//$mail->SMTPSecure = PHPMailer\PHPMailer\PHPMailer::ENCRYPTION_STARTTLS;
//Set TCP port to connect to
$mail->Port = 587;
$mail->From = "name#gmail.com";
$mail->FromName = "Full Name";
$mail->smtpConnect(
array(
"ssl" => array(
"verify_peer" => true,
"verify_peer_name" => true,
"allow_self_signed" => false
)
)
);
//This won't require any server settings on your localhost.
$mail->addAddress("Recepient#email.com", "Recepient Name");
$mail->isHTML(true);
$mail->Subject = "Subject Text";
$mail->Body = "<i>Mail body in HTML</i>";
$mail->AltBody = "This is the plain text version of the email content";
if(!$mail->send())
{
echo "Mailer Error: " . $mail->ErrorInfo;
}
else
{
echo "Message has been sent successfully";
}
Change credentials to yours, and see if your emails not going to spam box.
Change your form line to this : <form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>" class="montform" id="reused_form" enctype="multipart/form-data"> you dont have post method in your form, it doesnt post your values to php page.
NOTE : if your php codes are not in same page! change this <?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?> to your page.php in action.
Change Your upload codes to :
$file_name = ($_FILES['image']['name']);
$file_tmp = ($_FILES['image']['tmp_name']);
$file_path = "upload/";
if(move_uploaded_file($file_tmp, $file_path.$file_name)){
This question already has answers here:
Debugging PHP Mail() and/or PHPMailer
(1 answer)
PHP mail function doesn't complete sending of e-mail
(31 answers)
Closed 5 years ago.
i'm trying to send that form via gmail :
<!-- form -->
<form name="contactForm" id="contactForm" method="post" action="inc/sendEmail.php">
<fieldset>
<div class="form-field">
<input name="contactName" type="text" id="contactName" placeholder="Nom" value="" minlength="2" required="">
</div>
<div class="form-field">
<input name="contactEmail" type="email" id="contactEmail" placeholder="Email" value="" required="">
</div>
<div class="form-field">
<input name="contactSubject" type="text" id="contactSubject" placeholder="Sujet" value="">
</div>
<div class="form-field">
<textarea name="contactMessage" id="contactMessage" placeholder="message" rows="10" cols="50" required=""></textarea>
</div>
<div class="form-field">
<button class="submitform">Submit</button>
<div id="submit-loader">
<div class="text-loader">Sending...</div>
<div class="s-loader">
<div class="bounce1"></div>
<div class="bounce2"></div>
<div class="bounce3"></div>
</div>
</div>
</div>
</fieldset>
</form> <!-- Form End -->
I've checked with the developer tools and everything is send correctly
My php file is in the inc folder :
<?php
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;
require 'src/Exception.php';
require 'src/PHPMailer.php';
require 'src/SMTP.php';
if(isset($_POST["submit"])){
$username = 'myadress#gmail.com';
$password = 'mypass';
$to = $username;
$mail = new PHPMailer();
$mail->IsSMTP();
$mail->SMTPDebug = 1;
$mail->SMTPAuth = true;
$mail->SMTPSecure = 'ssl';
$mail->Host = "smtp.gmail.com";
$mail->Port = 465;
$mail->IsHTML(true);
$mail->Username = $username;
$mail->Password = $password;
$mail->SetFrom($_POST["contactName"." "."contactEmail"]);
$mail->Subject = $_POST["contactSubject"];
$mail->Body = $_POST["contactMessage"];
$mail->AddAddress($to);
if(!$mail->Send())
{
echo "Mailer error : " . $mail->ErrorInfo . "<br>";
}}
Actually i can't see any error but i receive no mail so something is wrong
(indentation here isn't correct but it's good in my code)
Actually i googled for some solutions but no one has worked for it, what am i missing ?
I created a contact form in a PHP project and I have been trying to get the mail to send and in the process I have been altering some code such as removing my contact form. Now I re-added the form, but it does not display on the browser:
This is the actual file called contact.php:
<?php
define("TITLE", "Contact Us | MicroUrb");
include('includes/header.php');
/**
* PHPMailer Autoloader
*/
require '../vendor/phpmailer/phpmailer/PHPMailerAutoload.php';
/**
* Configure PHPMailer with your SMTP server settings
*/
$mail = new PHPMailer();
$mail->isSMTP();
$mail->Host = 'smtp.gmail.com';
$mail->Port = 465;
$mail->SMTPAuth = true;
$mail->Username = 'myemail#example.com';
$mail->Password = 'secret';
$mail->SMTPSecure = 'tls';
/**
* Enable SMTP debug messages
*/
$mail->SMTPDebug = 2;
/**
* Send an email
*/
$mail->setFrom('sender#gmail.com');
$mail->addAddress('recipient#gmail.com');
$mail->Subject = 'An email sent from PHP';
$mail->Body = 'This is a test message';
if ($mail->send()) {
echo 'Message sent!';
} else {
echo 'Mailer error: ' . $mail->ErrorInfo;
}
?>
<div id="contact">
<hr>
<h1 class="contact">Get in touch with us!</h1>
<form method="post" action="" id="contact-form">
<label for="name">Your name</label>
<input type="text" id="name" name="name">
<label for="email">Your email</label>
<input type="email" id="email" name="email">
<label for="message">and your message</label>
<textarea id="message" name="message"></textarea>
<input type="checkbox" id="subscribe" name="name" value="Subscribe">
<label for="">Subscribe to newsletter</label>
<input type="submit" class="button next" name="contact_submit" value="Send Message">
</form>
<hr>
</div>
<?php include('includes/footer.php'); ?>
I have this problem that I haven't been able to fix for days now and I am going crazy...
I have a HTML form and I am trying to pass those variables from the form over to my PHP script but for some reason they are not passing over.
HTML Form:
<div class="col-md-4 col-sm-12">
<a name="contactus"></a>
<div class="contact-form bottom">
<h2>Send a message</h2>
<form name="contact form" method="POST" action="sendemail_1.php" id="main-contact-form">
<div class="form-group">
<input type="text" name="name" id="names" class="form-control" required="required" placeholder="Name">
</div>
<div class="form-group">
<input type="email" name="email" id="emails" class="form-control" required="required" placeholder="Email">
</div>
<div class="form-group">
<input type="text" name="number" id="numbers" class="form-control" required="required" placeholder="Number">
</div>
<div class="form-group">
<textarea name="message" id="messages" required="required" class="form-control" rows="8" placeholder="Your text here"></textarea>
</div>
<div class="form-group">
<input type="submit" name="submit" class="btn btn-submit" value="Submit">
</div>
</form>
</div>
</div>
Full PHP SCRIPT:
<?php
require 'PHPMailer/PHPMailerAutoload.php';
$mail = new PHPMailer;
$mail->isSMTP();
$mail->Host = 'smtp.gmail.com';
$mail->SMTPAuth = true;
$mail->Username = '*****#gmail.com';
$mail->Password = '****';
$mail->SMTPSecure = 'tls';
$mail->Port = 587;
$mail->setFrom('*****#gmail.com', 'Test');
$mail->addReplyTo('****#gmail.com', 'Test');
$mail->addAddress("****#hotmail.com");
$mail->isHTML(false); // Set email format to HTML
$bodyContent = "test";
$name = filter_input(INPUT_POST, 'name');
$number = filter_input(INPUT_POST, 'number');
$email = filter_input(INPUT_POST, 'email');
$message = filter_input(INPUT_POST, 'message');
$mail->Subject = 'Test';
$mail->Body = $bodyContent;
if(!$mail->send()) {
echo 'Message could not be sent.';
echo 'Mailer Error: ' . $mail->ErrorInfo;
} else {
echo 'Message has been sent';
}
error_reporting(E_ALL);
?>
The JS used
// Contact form
var form = $('#main-contact-form');
form.submit(function(event){
event.preventDefault();
var form_status = $('<div class="form_status"></div>');
$.ajax({
url: $(this).attr('action'),
beforeSend: function(){
form.prepend( form_status.html('<p><i class="fa fa-spinner fa-spin"></i> Email is sending...</p>').fadeIn() );
}
}).done(function(data){
form_status.html('<p class="text-success">Thank you for contact us. As early as possible we will contact you</p>').delay(3000).fadeOut();
});
});
I have also tried it with the $_POST('name') but it also does not work.
Any help is really appreciated! Thanks
Commenting is starting to grow too large and this is too large for a comment.
To test, use what follows instead of what you have now.
Change from:
$name = filter_input(INPUT_POST, 'name');
$number = filter_input(INPUT_POST, 'number');
$email = filter_input(INPUT_POST, 'email');
$message = filter_input(INPUT_POST, 'message');
To:
if(
!empty($_POST['name'])
&&
!empty($_POST['number'])
&&
!empty($_POST['email'])
&&
!empty($_POST['message'])
) {
$name = $_POST['name'];
$number = $_POST['number'];
$email = $_POST['email'];
$message = $_POST['message'];
}
else{
echo "No empty fields please.";
exit; // This will STOP any further execution.
}
// the rest of your code below
I can't see this failing.
Note:
I see ID's everywhere and this suggests that you may be using additional Javascript to work with this.
Should this be the case, then you need to make sure that the syntax is correct.
This wasn't answered in my comment to you earlier.
okay found the issue - you need to pass submit button name as a submit not submited.
Try below code:
Your html file :
<form name="contact form" method="POST" action="sendemail_1.php" id="main-contact-form">
<div class="form-group">
<input type="text" name="name" id="names" class="form-control" required="required" placeholder="Name">
</div>
<div class="form-group">
<input type="email" name="email" id="emails" class="form-control" required="required" placeholder="Email">
</div>
<div class="form-group">
<input type="text" name="number" id="numbers" class="form-control" required="required" placeholder="Number">
</div>
<div class="form-group">
<textarea name="message" id="messages" required="required" class="form-control" rows="8" placeholder="Your text here"></textarea>
</div>
<div class="form-group">
<input type="submit" name="submit" class="btn btn-submit" value="Submit">
</div>
</form>
Your Php File
if(isset($_POST['submit']))
{
print_r($_POST);
}
i am trying to send mail from one to other using gmail smtp.
the mail sent successfully but without attachment. how can i solve this?
html form:
<form id="main-contact-form" class="contact-form" name="contact-form" method="post" action="sendresume.PHP" enctype="multipart/form-data">
<div class="row">
<div class="col-sm-5">
<div class="form-group">
<input type="text" name="name" class="form-control" required="required" placeholder="Name">
</div>
<div class="form-group">
<input type="text" name="mobile" class="form-control" required="required" placeholder="Mobile number">
</div>
<div class="form-group">
<input type="email" name="email" class="form-control" required="required" placeholder="Email address">
</div>
<p class="lead" style="margin-bottom: 10px;">Resume :</p>
<div class="form-group">
<input type="file" name="file" class="form-control" required="required" >
</div>
<div class="form-group">
<button type="submit" class="btn btn-primary btn-lg">Send Message</button>
</div>
</div>
<div class="col-sm-7">
<textarea name="messege" id="message" class="form-control" rows="8" placeholder="Note"></textarea>
</div>
</div>
</form>
and php code is:
<?php
include "classes/class.phpmailer.php"; // include the class name
$email = $_POST["email"];
$messege=$_POST['messege'];
$name=$_POST['name'];
$mobile=$_POST['mobile'];
$mail = new PHPMailer(); // create a new object
$mail->IsSMTP(); // enable SMTP
$mail->SMTPDebug = 1; // debugging: 1 = errors and messages, 2 = messages only
$mail->SMTPAuth = true; // authentication enabled
$mail->SMTPSecure = 'ssl'; // secure transfer enabled REQUIRED for GMail
$mail->Host = "smtp.gmail.com";
$mail->Port = 465; // or 587
$mail->IsHTML(true);
$mail->Username = "abc#gmail.com";
$mail->Password = "mypassword";
$mail->SetFrom("feedback#abc.com");
$mail->Subject = "this is subject";
$mail->Body = "this is body <br/><br/><br/><br/>
name:$name <br/><br/>
email:$email<br/><br/>
mobile:$mobile<br/><br/>
messege:$messege</b>";
$mail -> Addattachment('here is problem');
$mail->AddAddress("mymail#gmail.com");
if(!$mail->Send()){
echo "Mailer Error: " . $mail->ErrorInfo;
}
else{
echo "mail sent";
}
?>
this mail is sent successfully but I want it with attachment. file store in directory is not important. hope this problem solve immediately. thanks in advance because I never learned an used php before.
Here is an example to send attachment using PHPMailer class:
http://tournasdimitrios1.wordpress.com/2011/11/08/a-simple-example-sending-email-with-attachment-using-phpmailer/