Я готов создать страницу формы для веб-сайта, для которой потребуется заполнить много полей, которые будут отправлены по указанному электронному адресу.
Пока я создал страницу фиктивного php-email, которая получает ваше сообщение, 1 вложение и адрес электронной почты получателя, используя SMTP Google.
Вот мой код для uploadtest.html:
<body> <h1>Test Upload</h1> <form action="email.php" method="get"> Message: <input type="text" name="message"> Email: <input type="text" name="email"><br> Attach File: <input type="file" name="file" id="file"> <input type="submit"> </form> </body>
uploadtest.html – это то, что пользователь увидит
Вот код для email.php:
<?php require("class.phpmailer.php"); $mail = new PHPMailer(); $recipiant = $_GET["email"]; $message = $_GET["message"]; $mail->IsSMTP(); // telling the class to use SMTP $mail->SMTPAuth = true; // SMTP authentication $mail->Host = "smtp.gmail.com"; // SMTP server $mail->Port = 465; // SMTP Port $mail->SMTPSecure = 'ssl'; $mail->Username = "xxxxx@gmail.com"; // SMTP account username $mail->Password = "xxxxxxxx"; // SMTP account password $mail->AddAttachment($_FILES['tmp_name']); //****HERE'S MY MAIN PROBLEM!!! $mail->SetFrom('cinicraftmatt@gmail.com', 'CiniCraft.com'); // FROM $mail->AddReplyTo('cinicraftmatt@gmail.com', 'Dom'); // Reply TO $mail->AddAddress($recipiant, 'Dominik Andrzejczuk'); // recipient email $mail->Subject = "First SMTP Message"; // email subject $mail->Body = $message; if(!$mail->Send()) { echo 'Message was not sent.'; echo 'Mailer error: ' . $mail->ErrorInfo; } else { echo 'Message has been sent.'; } ?>
Поэтому из того, что я могу здесь сказать, метод AddAttachment () PHPMailer принимает в качестве параметра URL-адрес файла DIRECTORY, который вы хотите добавить. И здесь моя главная проблема.
Каким будет имя переменной, которая будет получать местоположение моего файла (dir / upload.jpg), который я загрузил, чтобы я мог использовать его в качестве параметра в методе AddAttachment ()?
Нет, он не требует URL-адресов или каталогов. Он имеет прямой путь к файлу.
например
$mailer->AddAttachment( '/path/to/file/on/your/server.txt', 'name_of_file_in_email', 'base64', 'mime/type' );
Путь не требует объяснений. name_of_file_in_email
позволяет вам «переименовать» файл, чтобы вы могли загрузить файл с именем «foo.exe» на своем сервере, он может отображаться как «bar.jpg» в электронном письме, которое получает клиент.
Ваша проблема заключается в том, что вы пытаетесь присоединить загруженный файл, но используете неправильный источник. Должен быть
<input type="file" name="thefile" /> ^^^^^^^ $_FILES['thefile']['tmp_name'] ^^^^^^^
Обратите внимание на отношение имени поля к $ _FILES.
Тег <form>
должен указывать атрибут enctype
следующим образом:
<form ... enctype="multipart/form-data"> ... </form>
Это будет отправлено через PHPMailer Class
$mail->AddAttachment($_FILES['tmp_name'],$_FILES['name']); //****HERE'S MY MAIN PROBLEM!!! So you would have to give file name also.
попробуйте с этим
include "phpMailerClass.php"; $email = new PHPMailer(); $email->From = $to; $email->FromName = $_POST['name']; $email->Subject = $subject; $email->Body = $EmailText; $email->AddAddress( 'shafiq2626@hotmail.com' ); $email->IsHTML(true); $file_to_attach = $_FILES['file']['tmp_name']; $filename=$_FILES['file']['name']; $email->AddAttachment( $file_to_attach , $filename ); $email->Send();
Это код работает нормально.