Что мне нужно изменить, чтобы отправить вложения с моей формой phpmailer? - PullRequest
0 голосов
/ 12 декабря 2018

У меня есть рабочая контактная форма phpmailer на моем веб-сайте, теперь я хочу иметь возможность прикреплять файлы к почте и отправлять ее, но я не знаю, как ПОСТАВИТЬ данные.

этоскрипт на моем html

  $(document).ready(function (e){
      $("#contactForm").on('submit',(function(e){
          e.preventDefault();
          $('#boton').hide();
          $('#loader-icon').show();
          $.ajax({
              url: "curriculum.php",
              type: "POST",
              dataType:'json',
              data: {
                  "nombre":$('input[name="nombre"]').val(),
                  "fecha":$('input[name="fecha"]').val(),
                  "correo":$('input[name="correo"]').val(),
                  "ocupacion":$('input[name="ocupacion"]').val(),
                  "domicilio":$('input[name="domicilio"]').val(),
                  "telefono":$('input[name="telefono"]').val(),
                  "nacionalidad":$('input[name="nacionalidad"]').val(),
                  "salario":$('input[name="salario"]').val(),
                  "mensaje":$('input[name="mensaje"]').val()},              
              success: function(response){  
                      alert(response.text);
              },
              error: function(){
                alert(response.text);
              } 
          });
      }));
  });

с помощью этого скрипта я передаю следующий php и мои письма отправляются прямо сейчас, я вручную установил вложение для почты, но, очевидно, я хочу удалитьэту строку и иметь возможность загрузить файл ht с веб-сайта

<?php
  use PHPMailer\PHPMailer\PHPMailer;
  use PHPMailer\PHPMailer\Exception;

  require 'phpmailer/Exception.php';
  require 'phpmailer/PHPMailer.php';
  require 'phpmailer/SMTP.php';


  $mail = new PHPMailer(true); // Passing `true` enables exceptions
  try {
  //Server settings
  $mail->isSMTP();           // Set mailer to   use SMTP
  $mail->Host = '****'; // Specify main and backup SMTP servers
$mail->SMTPAuth = true;                               // Enable SMTP authentication
$mail->Username = '****';                 // SMTP username
$mail->Password = '****';                           // SMTP password
$mail->SMTPSecure = '****';                            // Enable TLS encryption, `ssl` also accepted
$mail->Port = ****;                                    // TCP port to connect to

//Recipients
$mail->setFrom('noreply@nautilusagency.com');
$mail->addAddress('ontiverosmtz.alberto@gmail.com');

$user_name      = filter_var($_POST["nombre"], FILTER_SANITIZE_STRING);
$user_fecha     = filter_var($_POST["fecha"], FILTER_SANITIZE_STRING);
$user_email     = filter_var($_POST["correo"], FILTER_SANITIZE_EMAIL);
$user_ocupacion     = filter_var($_POST["ocupacion"], FILTER_SANITIZE_STRING);
$user_domicilio      = filter_var($_POST["domicilio"], FILTER_SANITIZE_STRING);
$user_telefono     = filter_var($_POST["telefono"], FILTER_SANITIZE_STRING);
$user_nacionalidad      = filter_var($_POST["nacionalidad"], FILTER_SANITIZE_STRING);
$user_salario     = filter_var($_POST["salario"], FILTER_SANITIZE_STRING);
$content   = filter_var($_POST["mensaje"], FILTER_SANITIZE_STRING);
$mail->addAttachment('assets/pagina.zip');
//Content

$mail->isHTML(true);                                  // Set email format to HTML
$mail->Subject = utf8_decode($subject);
$mail->Body    = utf8_decode("<style>
body {background: linear-gradient(141deg, #ffffff 0%, #080708a1 51%,                           #000000 75%);}
.contenido
{
color: #428bca;
font-family: serif;
}
.msj1
{
color: #428bca;
}
.empresa
{
color: black;
}
</style>

<body>
<h3 class=msj1> Nombre: $user_name <br> </h3>
<h3 class=msj1> Fecha: $user_fecha <br> </h3>
<h3 class=msj1> Correo: $user_email <br> </h3>
<h3 class=msj1> Ocupacion: $user_ocupacion <br> </h3>
<h3 class=msj1> Domicilio: $user_domicilio <br> </h3>
<h3 class=msj1> Telefono: $user_telefono <br> </h3>
<h3 class=msj1> Nacionalidad: $user_nacionalidad <br> </h3>
<h3 class=msj1> Salario: $user_salario  <br> </h3>
<h3 class=msj1> Mensaje: $content <br> </h3>

</body>");
    $mail->send();
    echo 'Message has been sent';
} catch (Exception $e) {
    echo 'Message could not be sent. Mailer Error: ', $mail->ErrorInfo;
}
?>

Кто-нибудь может мне помочь или указать мне правильное направление?

Ответы [ 2 ]

0 голосов
/ 13 декабря 2018

Мне удалось успешно загрузить и отправить письмо с вложением, но теперь я не могу добавить остальные входные данные формы.Это способ, которым я изменил сценарий, чтобы иметь возможность прикреплять файл, но таким образом я не знаю, как разместить остальную информацию других входных данных.

html

$(document).ready(function (e){
    $("#contactForm").on('submit',(function(e){
      e.preventDefault();
      $('#boton').hide();
      $('#file').hide();
      var file_data = $('#file').prop('files')[0];   
      var form_data = new FormData();                  
      form_data.append('file', file_data);                            
      $.ajax({
        url: 'curriculum.php', // point to server-side PHP script 
        dataType: 'text',// what to expect back from the PHP script, if anything
        cache: false,
        contentType: false,
        processData: false,
        data: form_data,                         
        type: 'post',               
        success: function(php_script_response){
          alert(php_script_response); // display response from the PHP script, if any
        }
      });
    }));
  });

на php я добавил следующие строки кода

 if ( 0 < $_FILES['file']['error'] ) {
    echo 'Error: ' . $_FILES['file']['error'] . '<br>';
}
else {
    move_uploaded_file($_FILES['file']['tmp_name'], 'assets/' . $_FILES['file']['name']);
    $file='assets/' . $_FILES['file']['name'];
}

я попытался объединить первый скрипт, который у меня был, с этим, но я не понял, как это сделать

0 голосов
/ 12 декабря 2018

Файл, указанный для вложения, должен находиться на сервере и быть доступен с полным адресом файла.Когда вы загружаете файл через Ajax для прикрепления - куда он загружается?

В настоящее время у вас есть:

$mail->addAttachment('assets/pagina.zip'); 

Типичная правильная и полная ссылка на файл:

$uploadFileName = 'assets/pagina.zip'; // or wherever you put Ajax uploads.
$mail->addAttachment($_SERVER['DOCUMENT_ROOT'].'/upload/'.$uploadFileName); 
// example string:   
// /home/accountname/public_html/upload/assets/pagina.zip
...