我需要在我的网站上制作一个允许用户上传和发送文件的表单。表单有3个字段,名称,电子邮件和附件。
用户点击发送后,我需要将所有这3个字段发送给我,并附上我的电子邮件。
我有3个文件,HTML文件包含以下格式:
<div class="span6 control-group">
<label>File Upload:</label>
<input type="file" name="file_upload" id="file_upload" />
</div>
.js文件,包含发送文件时的一些视觉效果,如果有错误,必填字段
var Contact = {
initialized: false,
initialize: function() {
if (this.initialized) return;
this.initialized = true;
this.build();
this.events();
},
build: function() {
this.validations();
},
events: function() {
},
validations: function() {
$("#contactForm").validate({
submitHandler: function(form) {
$.ajax({
type: "POST",
url: "php/upload-form.php",
data: {
"name": $("#contactForm #name").val(),
"email": $("#contactForm #email").val(),
"quote": $("#contactForm #upload_file").val()
}, // Rest is visual effects, then ends with //
Contact.initialize();
最后是upload-form.php
<?php
session_cache_limiter('nocache');
header('Expires: ' . gmdate('r', 0));
header('Content-type: application/json');
require 'php-mailer/class.phpmailer.php';
$to = 'xxx@xxx.xxx';
$subject = $_POST['subject'];
if($to) {
$name = $_POST['name'];
$email = $_POST['email'];
$fields = array(
0 => array(
'text' => 'Name',
'val' => $_POST['name']
),
1 => array(
'text' => 'Email address',
'val' => $_POST['email']
),
2 => array(
'text' => 'File',
'val' => $_POST['file_upload']
)
);
$message = "";
foreach($fields as $field) {
$message .= $field['text'].": " . htmlspecialchars($field['val'], ENT_QUOTES) . "<br>\n";
}
$mail = new PHPMailer;
$mail->IsSMTP();
$mail->From = $email;
$mail->FromName = $_POST['name'];
$mail->AddAttachment = $_POST['file_uploaded']; // attachment
$mail->AddAddress($to); // Add a recipient
$mail->AddReplyTo($email, $name);
);
$mail->IsHTML(true); // Set email format to HTML
$mail->CharSet = 'UTF-8';
$mail->Body = $name;
if(!$mail->Send()) {
$arrResult = array ('response'=>'error');
}
我到处搜索,我得到的一切都是人们说要添加
$mail->AddAttachment($_FILES['uploaded_file']['tmp_name'],
但它似乎不起作用,我在谷歌上找到的唯一答案是附加已经在服务器上的文件,但我想附加用户上传的文件,然后发送到我的电子邮件,如果可能的话,我想要文件是临时文件。
我是PHP的菜鸟,所以请帮助我。我做错了什么?
答案 0 :(得分:0)
这应该可以获取文件附件并将其发送到您的电子邮件
$mail->AddAttachment($_FILES['upload']['tmp_name']);
<{1>} $_FILES()
['upload']
关键字表示文件输入的名称。所以相应地调整它。
如果您想向自己发送包含实际附件名称的附件,请尝试此操作。
$mail->AddAttachment($_FILES['upload']['tmp_name'], $_FILES['upload']['name']);
我发现工作非常简单,将$_FILES['upload']['tmp_name']
和$_FILES['upload']['name']
设置为变量。
所以,
$file = $_FILES['upload']['tmp_name']
$file_name = $_FILES['upload']['name']
$mail->AddAttachment($file, $file_name );